yolofaceで顔画像のトリミングをしてみました
前回、画像の取得ができたので、次に教師データのために画像トリミング方法を調べました。 すると、認識用のプログラムを使って、自動でトリミングして教師データとする手法が用いられていることがわかりました。
OpenCVにはhaar detectionがあるので、まずは顔のトリミングに取り組むことにしました。 と、試しましたが顔を傾けると認識されないので、せっかくなので良さげな顔認識プログラムを探してみました。
- YOLOFace
- GitHub - sthanhng/yoloface: Deep learning-based Face detection using the YOLOv3 algorithm (https://github.com/sthanhng/yoloface)
- iMacだとmodel-weights/の中にmodel-weights/が作られていたのでmv ../することが必要でした。
- 精度や顔の数が画面に表示され、流用が効きやすそうな感じで勉強になります。
- virtualenvの使い方まで示されていて助かります。
- すごく顔にひっついてくれます笑 ただ、さすがに手で大部分を隠すと検出はできませんでした。
pip3 install -r requirements.txt python3 yoloface.py
↑でカメラから顔を的確に認識できることがわかりました。 さらに、以下のようにソースコードを修正すると、顔画像の切り抜きを作成してくれました!! (本当はgitに登録したかったんですが、MITライセンスだったのでやめることにしました) これで、ひとまず顔画像をひたすら取得できそうなので、次に適当に学習させて認識させてみようと思います。
diff --git a/yoloface.py b/yoloface.py index dc9cee9..6e66705 100644 --- a/yoloface.py +++ b/yoloface.py @@ -133,7 +133,17 @@ def _main(): # Save the output video to file if args.image: - cv2.imwrite(os.path.join(args.output_dir, output_file), frame.astype(np.uint8)) + # cv2.imwrite(os.path.join(args.output_dir, output_file), frame.astype(np.uint8)) + + left = faces[0][0] + top = faces[0][1] + width = faces[0][2] + height = faces[0][3] + # print("left:{0} top:{1} width:{2} height:${3}", left, top, width, height) + # dst = im[200:400,70:270] + dst = frame.astype(np.uint8)[top:top+height, left:left+width] + # print(type(dst)) + cv2.imwrite(os.path.join(args.output_dir, output_file),dst)