TadaoYamaokaの開発日記

個人開発しているスマホアプリや将棋AIの開発ネタを中心に書いていきます。

Surfaceのカメラでリアルタイムに顔器官検出を行う

以前日記に書いた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で顔器官検出を行って、取り込んだ画像に検出点(ランドマーク)を重ねて表示しています。

このような表示になります。
f:id:TadaoYamaoka:20170221220153j:plain

本をカメラの前にかざしています。(自分は写したくないので、適当に人物が写っている本にしましたm(__)m)

Surfaceで実行すると2秒に一回くらいしか更新されません。
もう少し速いPCじゃないとリアルタイムとは呼べませんね。