PythonのOpenCVでデータセット内の重複画像をチェックする
CreateMLで人の顔を見分けたい
↑この続き。
機械学習(CreateML)で顔を見分けるために”良質な”データセットを作成しようと試みている。
画像検索で得た画像を使うとどうしても、これ持ってるよな?持ってたっけ?となってしまう。
なるべく避けようとするのだが、そうすると判断につかれるとかチェックに時間がかかってしまったりする。
そして実際どうしても重複してしまう。
なら重複覚悟でサクサク画像を得てから、後で重複をチェックすることにした。
(その1)顔の中にある目の相対位置で評価する

↑PythonのOpenCVで顔や目の位置を得ることができる(※1)。
これを使って得た顔部分基準で目の相対位置なんかで評価すればいいんじゃね?というアイデアで実装を進めた。
ところがどうもよい結果がでない。調べてみたところ以下のようなことが原因だった。


↑例えばこの2枚の画像。単に1枚をクロップ(トリミング)したのがもう1枚の画像。この2枚の画像に対して顔の位置を検出した結果がこちら↓


同じ位置に顔を検出するものかと思っていたが微妙に違う。
そういうものなら仕方ない、とあきらめ別な方法を試してみた。
(その2)顔のランドマークを使う

↑顔の輪郭や目の位置などを細かく取得できるのを利用してみた(※2)。
これだと顔のいろんな位置の座標を取得できる。

↑ある点からある点へのベクトルを作成して、x軸との傾き(単位ベクトルにして内積から)などを評価、比較すればいいのでは?という考えで実装してみた。

↑これだと使えそうな程度にはなり、サクサクと重複している可能性のある画像を表示することができるようになった。

↑単に向きを数値化しているようなものなので似たような角度で撮影された画像は全く違っていても似ている、と判断するので完全自動化まではいかないが、自分の用途にはOKだ。
※1 参考サイト
Python, OpenCVで顔検出と瞳検出(顔認識、瞳認識) | note.nkmk.me
※2 参考サイト
顔のランドマークを検出 Python + OpenCV + dlib を使う | 404 Motivation Not Found
↑この続き。
機械学習(CreateML)で顔を見分けるために”良質な”データセットを作成しようと試みている。
画像検索で得た画像を使うとどうしても、これ持ってるよな?持ってたっけ?となってしまう。
なるべく避けようとするのだが、そうすると判断につかれるとかチェックに時間がかかってしまったりする。
そして実際どうしても重複してしまう。
なら重複覚悟でサクサク画像を得てから、後で重複をチェックすることにした。
(その1)顔の中にある目の相対位置で評価する

↑PythonのOpenCVで顔や目の位置を得ることができる(※1)。
これを使って得た顔部分基準で目の相対位置なんかで評価すればいいんじゃね?というアイデアで実装を進めた。
ところがどうもよい結果がでない。調べてみたところ以下のようなことが原因だった。


↑例えばこの2枚の画像。単に1枚をクロップ(トリミング)したのがもう1枚の画像。この2枚の画像に対して顔の位置を検出した結果がこちら↓


同じ位置に顔を検出するものかと思っていたが微妙に違う。
そういうものなら仕方ない、とあきらめ別な方法を試してみた。
(その2)顔のランドマークを使う

↑顔の輪郭や目の位置などを細かく取得できるのを利用してみた(※2)。
これだと顔のいろんな位置の座標を取得できる。

↑ある点からある点へのベクトルを作成して、x軸との傾き(単位ベクトルにして内積から)などを評価、比較すればいいのでは?という考えで実装してみた。

↑これだと使えそうな程度にはなり、サクサクと重複している可能性のある画像を表示することができるようになった。

↑単に向きを数値化しているようなものなので似たような角度で撮影された画像は全く違っていても似ている、と判断するので完全自動化まではいかないが、自分の用途にはOKだ。
※1 参考サイト
Python, OpenCVで顔検出と瞳検出(顔認識、瞳認識) | note.nkmk.me
※2 参考サイト
顔のランドマークを検出 Python + OpenCV + dlib を使う | 404 Motivation Not Found
スポンサーサイト