PythonでFaceAPIを使う方法 part2(顔検出)
part1ではFaceAPIを使う準備を行いました。
part2では実際にPythonでFaceAPIを使っていきます。
FaceAPIで画像を処理してもらい、その結果を画像に書き込んで保存するところまでいきます。
手順
1. 画像をURLに送信して結果を変数に格納
2. 結果を描画して保存
基本的には公式のマニュアル通りにやっていきます。
準備
FaceAPIを楽に利用できるcognitive_faceというライブラリがあります。
pipでインストールできます。
$ pip3 install cognitive_face
1. 画像をURLに送信して結果を変数に格納
10行目でオプションを設定することができます。
landmarksをtrueにすると顔のパーツの細かい座標が取得できます。今回はとくに必要ないのでfalse。
また、attributesで取得したい情報を指定することができます。
項目は以下の通り。
attributes | 説明 | 詳細 |
---|---|---|
hair | 髪型 | bald(ハゲ率) invidible(画像内に髪があるかどうか) "true" or "false" haircolor(髪の色) |
smile | 表情 | "0.0 ~ 1.0" |
headPose | 頭の角度 | pitch(左右) "0.0 ~ 1.0" roll(前後) "0.0 ~ 1.0" yaw(上下) "0.0 ~ 1.0" |
gender | 性別 | "male" or "female" |
age | 年齢 | "0.0" ~ |
facialHair | 顔の毛(ヒゲなど) | moustache(口ひげ) "0.0 ~ 1.0" beard(あごひげ) "0.0 ~ 1.0" sideburns(ほおひげ、もみあげ) "0.0 ~ 1.0" |
glasses | メガネの有無 | "NoGlasses" or メガネの種類 |
makeup | 化粧 | eyeMakeup(目の化粧) "true" or "false" lipMakeup(唇の化粧) "true" or "false" |
emotion | 感情 | anger(怒り) "0.0 ~ 1.0" contempt(軽蔑) "0.0 ~ 1.0" disgust(嫌気) "0.0 ~ 1.0" fear(恐怖) "0.0 ~ 1.0" happiness(幸福) "0.0 ~ 1.0" neutral(はっきりしない) "0.0 ~ 1.0" sadness(悲しみ) "0.0 ~ 1.0" surprise(驚き) "0.0 ~ 1.0" |
occlusion | 顔の隠れている部分 | foreheadOccluded(額 "true" or "false" eyeOccluded(目) "true" or "false" mouthOccluded(口) "true" or "false" |
accessories | アクセサリーの種類 | type(種類) confidence(信頼性) "0.0 ~ 1.0" |
blur | 画像のぼかしレベル | blurLevel(ぼかしレベル) "Low" or "medium" or "high" value "0.0 ~ 1.0" |
exposure | 露出度 | exposureLevel value "0.0 ~ 1.0" |
noise | 画像のノイズレベル | noseLevel(ノイズレベル) "Low" or "medium" or "high" value "0.0 ~ 1.0" |
faceLandmarks | 顔のパーツの座標 | pupilLeft pupilRight noseTip mouthLeft mouthRight eyebrowLeftOuter eyebrowLeftInner eyeLeftOuter eyeLeftTop eyeLeftBottom eyeLeftInner eyebrowRightInner eyebrowRightOuter eyeRightTop eyeRightBottom eyeRightOuter noseRootLeft noseRootRight noseLeftAlarTop noseRightAlarTop noseLeftAlarOutTip noseRightAlarOutTip upperLipTop upperLipBottom underLipTop underLipBottom |
2. 結果を描画して保存
画像から顔を検出することができればfacesの中には顔の座標やattributesで指定した情報が格納されています。
これらの情報をオリジナル画像に書き込み、別ファイルとして保存します。
画像pathとfacesを関数drawに引数として渡します。
男性と女性で色を変えるようにしてみました。実行すると結果を描画したものが保存されていきます。
完成版
「img」ディレクトリを作成し、その中に顔検出をしたい画像を入れておきます。
プログラムを実行するとimg内の全ての画像で顔検出を行い、結果を描画したものを「face」ディレクトリに保存していきます。
ただし、FaceAPIは10回/分の制限があります。とは言うものの、この制限は少しあまいようでなぜか20回くらい叩けたりしました。
なので1枚の画像を処理するごとに3秒sleepさせればよさそうですが、一応余裕を持って4秒sleepさせています。もしかしたら今後制限が厳しくなるかもしれませんし、大人しく6秒sleepさせておいたほうがいいのかもしれません。
まとめ
これでPythonでFaceAPIを使うことができるようになりました。
性別と年齢の判定ができるだけでも何か色々できそうな気がします。
part3では顔認証システムの構築をやります(たぶん)。