見出し画像

Python初心者 無料で学習を極める(17)

こんにちわー。前回に引き続き画像の特徴量を抽出したいと思います。
今回は、下記の一つの仮説を用いた確認を行ってみたいと思います。

私が好きな画像は、人が映っている時が多いのでは?

その為、今回は顔の輪郭検出を行っていきたいと思います!

画像処理の環境構築はこちらに記載しています。OpenCVのwindows環境の構築例です。良かったら、見て下さい。

それでは本日も宜しくお願い致します!

準備:過去の天才の方の力を借りて!

pythonに触れて分かってくるのが、

みんながみんなお互いを支え合っている

感をすごく感じます。そうゆうところ、本当に素敵ですね。
その為、今回も天才の方の力を借りましょう!
「Github」と言ったサイトの中に、今回私が実施したい様な事を行っており、且つそれをコードとして公開している状態があります☆素晴らしい!
その為、今回はその方が行った内容を活用させて頂いて、進めたいと思います。

こちらのサイトに入っている「ファイルをダウンロードする」ことを実施します。Githubと仮想ディレクトリ?で関連をさせて実行する方法があるみたいですが、今の私には無理そう感。笑。 を感じているので、一旦はダウンロードして、自分の作業ディレクトリに置いていくことを実行します!

こちらのサイトにアクセスし、zipファイルをダウンロードしましょう。

ファイル保存

そして、「lbpcascade_animeface.xml」ファイルをを自分の作業領域に置きましょう。
※私の場合は、解凍したフォルダごと作業環境に置いています。
これで、準備はできたと思いますので、早速特徴量抽出を行っていきましょう!

特徴量抽出4:顔検出

先程、ダウンロードしたファイルを活用し、顔の検出を行っていきます。
今回分からなかった用語として、

カスケード型識別器

という言葉がありました。
簡単に言うと、顔があった(正解)、顔が無かった(不正解)と言ったことを繰り返し行い、「色々な要素から見て、顔だねー」と言ったファイルを見つける識別方法を活用するとの事です。私の説明よりも「google先生」の方が詳しく乗っていますので、この言葉を検索し、勉強をしてみて下さい☆

# 画像を読み込み
img = cv.imread('original_photo/kazetachinu037.jpg')
#画像の情報収集
h, w, c = img.shape
print('width:  ', w)
print('height: ', h)
print('channel:', c)

画像の情報を収集し、それに対して顔の領域を考えます。

# カスケード型識別器の読み込み
cascade = cv.CascadeClassifier("./lbpcascade_animeface-master/lbpcascade_animeface.xml")
# グレースケール変換
gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
# 顔領域の探索
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
# 顔領域を赤色の矩形で囲む
for (x, y, w, h) in face:
   cv.rectangle(img, (x, y), (x + w, y+h), (0, 0, 200), 3)
#画像表示
img_face_display = cv.cvtColor(img,cv.COLOR_BGR2RGB)
fig = plt.figure(1,(10,10))
plt.imshow(img_face_display)
print("検出ポイント:{}".format(face))

画像2

え?

何も反応がありません(屍の用だ・・・。(FF風))。笑。これは、

不正解の分類になった。

と判断する事が正しいでしょう。面白い結果ですね!!
それでは、他の画像で、明らかに人が映っているものをしてみました。その結果。。。。

画像3

いいね!

嬉しいですねー。ここまでできたのであれば、画像事の特徴量として、

顔を検出しているか。

を次回にしてみて、前回までに保存していた特徴量のデータコードに加えることを考えたいと思います!それではまた!次回★

私は、週末の朝しかコードの勉強ができない為、更新は来週の土曜日です。。。ご了承ください☆

よろしければサポート頂けると幸いです!子供へのパパ時間提供の御礼(お菓子)に活用させて頂きます☆