yolofaceで顔画像のトリミングをしてみました

前回、画像の取得ができたので、次に教師データのために画像トリミング方法を調べました。 すると、認識用のプログラムを使って、自動でトリミングして教師データとする手法が用いられていることがわかりました。

OpenCVにはhaar detectionがあるので、まずは顔のトリミングに取り組むことにしました。 と、試しましたが顔を傾けると認識されないので、せっかくなので良さげな顔認識プログラムを探してみました。

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)