Windows7 + Python2.7 + OpenCV + USB接続のWebカメラを使って、動画中に顔検出をやってみた。
ラズパイ2で顔検出やってみたけど、せっかくなのでWin7でも出来るかやってみた。
ラズパイいっぱい夢いっぱい! カメラを取り付けてOpenCVで顔検出をやってみた。
Webカメラはヨドバシカメラで1,980円(10%ポイント)で昨日買ってきたやつ。
さすがにiPhone3GSと同じ位のカメラなので、今見るとなかなかに厳しい感じ。取り扱い説明書でもskypeビデオチャット用のセットアップ方法だった…。
とりあえず、Python2.7 + OpenCVをexeのインストーラーでインストしていく。
戸惑ったのは識別器をフルパス指定してみたら、なんか上手く行かなかったのでpythonファイルと同じフォルダに入れてみたら動いた。if cascade.empty(): でチェック出来るみたい。
それなりに誤認識もあるけど、自分が移動しながらでも顔を認識し続ける感じで大成功(^_^)/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# encoding: utf-8 # OpenCV(フリーの画像解析ライブラリ) import cv2 # 0番のカメラをUSB接続のWebカメラと仮定 camera = cv2.VideoCapture(0) #カメラの解像度を設定 camera.set(3, 640) # Width camera.set(4,480) # Height camera.set(5, 15) # FPS # 識別器を「正面顔」に指定する cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") # カメラがオープン出来続ける限りループ while(camera.isOpened()): # カメラから画像を取得 ret, frame = camera.read() # 灰色に変換(解析が楽になる) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # ライブラリに顔検出してもらう(戻り値は、検知できた顔の数) facerect = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1)) # 顔検出した部分を長方形で囲う for (x, y, w, h) in facerect: cv2.rectangle(frame, (x, y),(x + w, y + h),(0, 50, 255), 3) # ウィンドウに画像を表示する cv2.imshow("captured video", frame) # キーボードからqを入力されたら終了 if cv2.waitKey(33) & 0xFF == ord('q'): break # カメラ開放 camera.release() # ウィンドウも閉じる cv2.destroyAllWindows() |