作ったもの
顔認識AIを使って画像から似ている有名人(女性)を検索するLINEbotを作りました
— みかん三世 (@mikan_the_third) 2018年7月28日
↓友達追加はこれhttps://t.co/SPgRgpZKoG pic.twitter.com/u0VTKiSYhy
使い方
- 次のボタン、QRコード、もしくは
@dxg4720j
でID検索すると友達に追加できます
- 画像を送ると似ている有名人(女性)の検索結果を返します
- 「画像をもっと見る」で登録されている画像一覧を見ることができます
- 「Wikipediaで開く」でその人のWikipediaを参照できるようにしました
- Wilkipediaで閲覧数の多い人を優先的に約900人を登録しています
- テキストを送った場合、登録されている氏名と一致した時は画像一覧を返します
実装の概要
- 登録する名前の一覧を用意する
- Google画像検索で名前を検索し、httpsの画像の一覧を用意する
- MicrosoftのFaceAPIを使用して画像から顔を検出して登録し、学習させる
- 2枚目以降は顔識別を行い、定めた閾値以上の場合は同一人物と判断して顔画像を追加し、再び学習させる
- これを人数分繰り返す
- LINEからwebhookを受け取るAPIを用意する
- 画像が送られてきた場合、FaceAPIで顔検出を行ってfaceIdを取得する
- 続けて顔識別を行って似ている顔を取得して返すようにする
簡単な補足
登録する名前の一覧
- 今回はWikipediaの日本の女優一覧のようなページから名前の一覧を取得しています
- FaceAPIの無料枠では1000人までしか登録できないので、閲覧数の多い人を優先的に登録しています
- 参考:How to use Wikipedia API to get the page view statistics of a particular page in wikipedia?
Google画像検索から画像を取得
- SeleniumとBeautifulSoupで
https
の画像URLを取得しました - 参考:PythonとBeautiful Soupでスクレイピング
- 参考:SeleniumからHeadless Chromeを使ってみた
Microsoft FaceAPI
- MicrosoftのCognitiveServicesのうちFaceAPIを使用して顔検出・顔識別を行っています。
- まずLargePersonGroupを作成し、先ほど取得した名前でPersonを作成し、顔検出の結果を登録し、トレーニング(学習)を行います
- 2枚目以降は顔識別を行い、定めた閾値以上の場合は同一人物と判断して顔画像を追加し、再び学習させています
- FaceAPIではどんな画像が登録されているか分からないため、別途、誰にどの画像を登録したのかを保存しておく必要があります。
- また、APIのRateLimitが1分あたり20回までなので、連続してAPIを叩く場合は間隔をあける必要があります
- GoogleCloudのAutoMLでも同じようなことができるはずですが、APIのコール回数の無料枠が少ない(月1000回)なので、FaceAPI(月30000回)にしました
LINE MessagingAPI
- LINEの設定については [python] LINEの文字起こし君を作ってみた で紹介しています
- MessagingAPIでは
https
の画像しか送れないので要注意です
余談
- 登録されていない名前の場合は新たにデータを追加できるようにしたいですね