Posted at

【Qiita記事無作為試用①】Google Colaboratoryで簡単な顔認識に挑戦

・膨大な素晴らしきプログラムの集積地であるQiitaの中から、無作為に試してみて、惜しげもなく我が物顔を炸裂する記事第一弾。

・興味のあるものは何の躊躇も恥もなく無心で模倣してきた「自己解決反対運動」の信者のため、思う存分発揮していこう。

・初回として、顔認識処理が簡単に扱える記事を発見したので、これを試してみよう。


概要



  • Google Colaboratoryという、Jupyter Notebook環境を構築不要ですぐに試せるサービスを使って、指定画像を顔認識処理にかけて、返してくれる。

    ※Jupyter Notebookとは、実行記録型のデータ分析ツールである。主にPython実行環境として使用されていたが、現在は様々な言語に対応している。


結果

<指定画像、処理前>

group.jpg

<指定画像、処理後>

a.PNG


使用環境・技術


手順


使用画像の用意


  • 今回顔認識処理に用いる好きな画像を用意する。(※公開等なければ、著作権はあまり気にしない。)

  • 画像決定すれば、名前をつけて保存。その際の保存名はメモしておく。

    ※今回の保存名は「test.jpg」で、使用画像は下記。
    test.jpg


解析ライブラリの設定


  • 画像の顔認識処理のために、解析ライブラリであるOpenCVの公式GitHubから下記のファイルを自分のパソコンにダウンロードする。

    「ファイル名」・・・haarcascade_frontalface_default.xml

    「取得リンク」・・・ここ


Google Colaboratoryの設定


  • GoogleドライブからColaboratoryプロジェクト作成。

    ※Googleアカウントを持っていない人は、作成する。


    • Googleドライブを起動

    • 「新規」→ 「その他」→「アプリを追加」の順にクリック。


    • アプリ検索欄に「colab」と入力して検索。


    • 検索結果に「Colaboratory」が表示されるので、そこの「接続」ボタンをクリック

    • 改めて「新規」→ 「その他」の順にクリックしていくと、「Colaboratory」が表示されているので、クリック。



image.png

image.png


  • 起動したプロジェクトに名前をつける

    ※プロジェクト名が反映されるわけではないが、自分がわかる名前をつける。


  • GPU割り当てのため、プロジェクト上部メニューの「ランタイム」から「ランタイムのタイプを変更」をクリック。

    image.png

  • ノートブックの設定を下記のように設定。


    image.png


  • ノートブック設定後、プロジェクトに下記のコードを入力後、左の三角ボタンで実行する。


from google.colab import files

f = files.upload()

as.PNG


  • ファイル選択ボタンが表示されるので、先程保存した下記の2つのファイルをアップロードする。


    ※アップロードは1つずつ行う。


    ①使用画像ファイル・・・今回は「test.jpg」


    ②解析ライブラリファイル・・・「haarcascade_frontalface_default.xml 」


  • アップロード後、下記のコードを入力して、実行する。


import cv2

from matplotlib import pyplot as plt
# 画像読み込み
img=cv2.imread("./test.jpg")
# 画像のRGB形式への変換
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
# 解析ライブラリの使用
cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml')
# 検出処理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=3, minSize=(30, 30))
# 検出領域のデザイン処理
for (x, y, w, h) in face:
cv2.rectangle(img, (x, y), (x + w, y + h), (200,0,0), 3)
# 標準軸の非表示処理
plt.grid(False)
plt.tick_params(labelbottom=False, labelleft=False, labelright=False, labeltop=False)
plt.imshow(img)

※好きな画像を使用している場合は、「test.jpg」の部分を自分用に変える。


  • 実行後、下記のようになれば完了。

    a.PNG


まとめ


  • 初回は顔認識処理ということで、「賢人の方々の知の結晶のおかげで、こんなにも恩恵を受けているのだな」と、水分の跡も見られないまぶたをぬぐいながら、記事を書く。

  • とはいえこの模倣学習は、GoogleやQiitaや作成者等の多くの方々の偉大な功績によるものなので、毎回の礼拝作業は欠かさない。

  • 「今後も、自己満足促進のための素晴らしきプログラム探しに精進しよう」と、堂々他人依存決断。


参考