以前日記に書いたdlibを使った顔器官検出をSurfaceのカメラを使ってリアルタイムに行ってみました。
import sys import dlib import cv2 if len(sys.argv) != 2: print("realtime_shape_predictor.py model") exit() model = sys.argv[1] predictor = dlib.shape_predictor(model) detector = dlib.get_frontal_face_detector() video_capture = cv2.VideoCapture(1) while True: ret, frame = video_capture.read() dets = detector(frame, 1) for d in dets: # Get the landmarks/parts for the face in box d. shape = predictor(frame, d) # Draw the face landmarks on the screen. for i in range(shape.num_parts): p = shape.part(i) cv2.circle(frame, (p.x, p.y), 3, (0, 0, 255), 1) cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break video_capture.release() cv2.destroyAllWindows()
OpenCVを使うと簡単にカメラから画像を取り込めます。(詳細はこちらの日記を参照)
取り込んだ画像に対してdlibで顔器官検出を行って、取り込んだ画像に検出点(ランドマーク)を重ねて表示しています。
このような表示になります。
本をカメラの前にかざしています。(自分は写したくないので、適当に人物が写っている本にしましたm(__)m)
Surfaceで実行すると2秒に一回くらいしか更新されません。
もう少し速いPCじゃないとリアルタイムとは呼べませんね。