10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Generated Photosを使って顔認識を試すよ

Last updated at Posted at 2021-01-14

この記事はリンク情報システムの「2021新春アドベントカレンダー TechConnect」のリレー記事です。
engineer.hanzomon のグループメンバによってリレーされます。
(リンク情報システムのFacebookはこちらから)

2021新春アドベントカレンダー Tech Connect インデックスはこちら

15日の記事を担当しますshinmoです。よろしくお願いします。


あけましておめでとうございます。
私事ですが、最近スマホをiPhone12に買い換えました。
このiPhone12はFaceIDという顔を識別する機能があって、これでロックを解除できるんですね。

そんなわけで、今年は顔認識の勉強(といってもさわりだけですが)をしてみたいと思います。
(去年は文字認識でした)

2019年頃に、AIが存在しない人物の顔を作成してくれるサイトが出来た、というニュースがあったのをご存じでしょうか?
それまでにも似たようなサイトは存在していたのですが、その時に紹介されていたサイトGenerated Photos
はかなり出来がよく、かつてそれまでの他のサイトにあったような不自然さがないという点で話題になっていました。
(実際のサイトの画面)
genP_.png

自分の顔をネットの海に流さなくてもよい、肖像権の侵害もない。
これは顔認識を試すのにちょうどよいのでは…?

というわけで、 Generated Photos を使って顔認識を試してみようと思います。

##準備
今回使う環境とライブラリは下記です。
Python3.7.4
openCV

openCVは次のコマンドでインストールします。

コマンドプロンプト
python -m pip install -U opencv-python

次に分類器というものを用意します。
分類器というものを簡単に言うと、これは顔である/でないを振り分けるフィルターに当たるものです。
下記のopencvにデフォルトのものがいくつか用意されていますので、そちらを使います。
https://github.com/opencv/opencv/tree/master/data/haarcascades
今回は haarcascade_frontalface_alt_tree.xml を使用します。

##実行する
使う画像はこれ。(引用:https://generated.photos/)
generate_2.jpg

あとは下記のように実装して、実際に動かしてみます。

faceRcg.py
import cv2

cascade_path = "./cascade/haarcascade_frontalface_alt_tree.xml"

# 使用ファイルと入出力ディレクトリ
image_file = "generate_1.jpg"
image_path = "./in/" + image_file
output_path = "./out/" + image_file

#ファイル読み込み
image = cv2.imread(image_path)

#グレースケール変換
image_gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

#分類器の取得
cascade = cv2.CascadeClassifier(cascade_path)

#検出実行
facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=10, minSize=(30, 30))

#枠線の色指定:赤
color = (0, 0, 255)

# 検出した場合
if len(facerect) > 0:

    #検出した顔を囲む枠線の作成
    for rect in facerect:
        cv2.rectangle(image, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), color, thickness=2)

#認識結果の出力
cv2.imwrite(output_path, image)

結果は…
generate_2.jpg

うまくいったようです。
ちなみに、 Generated Photos には顔の向きとかも指定できるようなので、ちょっと変えてみます。
入力:
(引用:https://generated.photos/)
generate_1.jpg

出力:
generate_1.jpg

…ダメ見たいです。あまり正面に向いてないからですかね?
ただ、iPhone12でも斜めすぎるとロックが解除されなかったので、斜めの顔判定は難しいのかもしれないですね。

##終わりに
前回も今回もですが、作るのが大変そうだなあと思ったものが、調べてみると案外お手軽に実装出来たりするので
驚きです。次やるときには、機械学習用のモデルを作るところにも手を付けたりできると面白そうですね。

あとGenerated Photosがすごすぎて小1時間くらい遊んでました。

ここまで読んでいただきありがとうございました。

10
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?