乙Py先生のプログラミング教室

乙Py先生のプログラミング教室
初学者のためのプログラミング学習サイト

先日マイクロソフトから
エクセルに関する発表がありました


解説動画はこちら




先日
マイクロソフトから
エクセルでPythonが使える様になるという
アナウンスがありました

WindowsのMicrosoft 365のユーザー向けに
パブリックベータ版を配布しているっぽいですね

なので、サブスクユーザーだけだと思いますが
こんな風になるそうです

エクセルでPython.003



エクセルでPython.004



エクセルでPython.005


エクセルでPython.006



エクセルでPython.007




エクセルだけで
高度な分析結果を出せたり
精細な視覚化が行える様になるなら
これはすごい事ですねえ

加えて機械学習もできてしまう!!!!

エクセルは使えるけど
Pythonは知らない

これからPythonを覚えたい

もうちょっとデータ分析頑張りたい人には
丁度いい機能になるかもしれません


製品版として
リリースされるのを待ちたいと思います

それでは





今回はシルエット当てクイズとかに使われる
視力検査画像を作っていきたいと思います


解説動画はこちら


Opencvで視力検査の画像っぽいものを作ります

画像のシルエットを浮かび上がらせて
何のキャラかを当てるやーつですね
見えたら正常・・・ってな奴です

参考画像はこんな感じのものです

IMG_0252




今回はGoogle Colabで作業を行います


作業手順としては次の通りです
0.画像をGoogle Colabにアップロードしておく
1.画像を取り込む
2.シルエットを抽出する
3.下地画像を作る
4.下地にシルエットを合成する


画像の用意

まずはなんでも良いので
画像を用意しましょう

シルエットがうまく抽出できるように
背景が薄くて、個体が判別できるものが良いですね

これをファイル置き場に置いておきます



画像の読み込み

opencvで画像を取り込んでいきます

Opencvのインポート

import numpy as np
import cv2
import os
from IPython.display import display,Image
import matplotlib.pyplot as plt
%matplotlib inline


ライブラリのインポートが終わったら
画像を読み込みましょう

ファイル名やパスなどは
あわせる様に変えましょう

うまく取り込めていたら
画面に表示されます
# 画像を読み込む
file_path = "/content/ファイル名"
img = cv2.imread(file_path)

# 出力
out = cv2.imencode(".png", img)[1]
display(Image(out,width=300))


シルエットを抽出する

画像が取り込めたら
次はその画像のシルエットを抽出します

具体的な手法としては
白黒画像に変換して
閾値を調整しながら濃いところを
抜いていきます

threshold をうまく変えて
調整して抜いて下さい

# グレースケールに変換する。
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 2値化する(thresholdを変えて、うまく抜いてね)
threshold = 120
ret, bin_img = cv2.threshold(gray, threshold, 255, cv2.THRESH_BINARY)

# 出力
out = cv2.imencode(".png", bin_img)[1]
display(Image(out,width=300))

シルエット画像は
こんな感じになります
siru



下地の画像を用意する

合成用の下地となる
青い画像を作っていきます

サイズは元の画像のサイズになります

height = bin_img.shape[0]
width = bin_img.shape[1]
blank = np.zeros((height, width, 3))
blank += [0,0,255][::-1]
blank = blank.astype(np.uint8)

out = cv2.cvtColor(blank, cv2.COLOR_BGR2RGB)
plt.imshow(out)
plt.axis("off")
plt.show()
blue



下地にシルエットを合成する


最後に下地にシルエットを合成します

eye_test_value を変えると
シルエットの濃さを調整できるので
色々変えて試してみて下さい

eye_test_value = 100
for h in range(bin_img.shape[0]):
  for w in range(bin_img.shape[1]):
    v = bin_img[h][w]
    if v==0:
      blank[h][w][0] = blank[h][w][0] - eye_test_value

out = cv2.cvtColor(blank, cv2.COLOR_BGR2RGB)
plt.imshow(out)
plt.axis("off")
plt.show()
100

値を小さくしてみると

50

5

どこまで見えますかね

見えたらあなたの視力は正常です


シルエット画像や下地
濃さを調整すれば
色々楽しめそうな感じの画像が
いくらでも作れますね

opencvは便利なので
こういった画像加工を行いたい方は
是非参考にしてみてください

それでは

 

今回は先日公開されたジブリ映画に関する
ジブリ公式ツイッターさんの投稿に関するものです

解説動画はこちら


ジブリ公式Twitterの投稿が
まるでモールス信号のようだと
話題になっていたので解読してみました

対象のツイートはこちら

ジブリ公式ツイッター


宮崎駿監督の最新作「君たちはどう生きるか」の
ポスターに描かれた謎の鳥のイラストとともに
「カカヘカ・・・」と暗号文ぽいものが
書かれています

鳥の鳴き声のようにも見えるますが・・・
モールス信号に変換する事で
解読する事ができる様です

 

書かれている文字

ツイートされていたのはこの文章
カカヘカヘッカヘヘッヘカヘカヘッカカッヘカヘカカッヘカヘカヘッカヘカヘカッヘカカヘッカヘッヘカヘカッカカヘカッヘカヘカカッカヘッカヘカヘヘッヘカヘヘカッヘヘッ

「カ」は「・」
「ヘ」は「-」
「ッ」は区切り
として和文モールス符号に
変換することが出来るみたいです

早速解読するコードを作っていきましょう

モールス暗号解読コード
md = {
'カヘ': 'イ','カヘカヘ': 'ロ','ヘカカカ': 'ハ','ヘカヘカ': 'ニ',
'ヘカカ': 'ホ','カ': 'ヘ','カカヘカカ': 'ト','カカヘカ': 'チ',
'ヘヘカ': 'リ','カカカカ': 'ヌ','ヘカヘヘカ': 'ル','カヘヘヘ': 'ヲ',
'ヘカヘ': 'ワ','カヘカカ': 'カ','ヘヘ': 'ヨ','ヘカ': 'タ',
'ヘヘヘ': 'レ','ヘヘヘカ': 'ソ','カヘヘカ': 'ツ','ヘヘカヘ': 'ネ',
'カヘカ': 'ナ','カカカ': 'ラ','ヘ': 'ム','カカヘ': 'ウ','カカヘヘ': 'ノ',
'カヘカカカ': 'オ','カカカヘ': 'ク','カヘヘ': 'ヤ','ヘカカヘ': 'マ',
'ヘカヘヘ': 'ケ','ヘヘカカ': 'フ','ヘヘヘヘ': 'コ','ヘカヘヘヘ': 'エ',
'カヘカヘヘ': 'テ','ヘヘカヘヘ': 'ア','ヘカヘカヘ': 'サ','ヘカヘカカ': 'キ',
'ヘカカヘヘ': 'ユ','ヘカカカヘ': 'メ','カカヘカヘ': 'ミ','ヘヘカヘカ': 'シ',
'カヘヘカカ': 'ヱ','ヘヘカカヘ': 'ヒ','ヘカカヘカ': 'モ','カヘヘヘカ': 'セ',
'ヘヘヘカヘ': 'ス','カヘカヘカ': 'ン','カカ': '゛','カカヘヘカ': '゜'
}

def morus_decode(text):
    texts = text.replace("\n","").split("ッ")
    result_text = ''.join([md[tx] for tx in texts if tx in md])
    print(result_text)

辞書を使って対象の文字列を
変換してつなげるだけのシンプルで簡単なコードです

これを使って先ほどの文章を入力すると
text  = """
カカヘカヘッカヘヘッ
ヘカヘカヘッカカッヘカヘカカッ
ヘカヘカヘッカヘカヘカッヘカカヘッカヘッ
ヘカヘカッカカヘカッヘカヘカカッカヘッ
カヘカヘヘッヘカヘヘカッヘヘッ
"""

morus_decode(text)

答えが出ます!!!!!!!

答えを知りたい方は
動画を見るかコード試してみて下さいね




平文をモールス暗号に変換するコード
md2 = {v:k for k,v in md.items()}
def morus_code(text):
    result_text = 'ッ'.join([md2[tx] for tx in text if tx in md2])
    print(result_text)
    
text = "ココニテキストヲ"
morus_code(text)

逆でテキストをモールス暗号化するのも
辞書変換で出来ます

Python言語を使えば
こういった暗号解読も簡単に行えます

文法がまだの方は
是非この機会に
色々動画見てみて下さいね

それでは

このページのトップヘ