ハールトレーニングしたカスケード分類器を使って顔検出してみます。
当然ながら(ディープラーニングではない機械学習なので)Movidius NCSは使いません。
カメラはラズパイ専用カメラモジュールを使います。
ハールトレーニングやカスケードについては、ここ参照 OpenCV覚書
カスケードファイルはネット上で見つけることができます。
例:GitHub
注:データの取得の仕方によってはxml形式が崩れることがあります、ご注意くださいね。
また、このGitHubにはHaar-like以外にHogやLbpのカスケードファイルも置かれています。
このカスケードを使ってみます(正面を向いた顔を検出します)。
検出用のPythonコードはこんな感じ。
【facedetection.py】
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 |
from picamera.array import PiRGBArray from picamera import PiCamera import sys, os import time import cv2 camera = PiCamera() camera.resolution = (640, 480) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(640, 480)) cascPath = sys.argv[1] faceCascade = cv2.CascadeClassifier(cascPath) time.sleep(0.1) # capture frames from the camera for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): image = frame.array gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = faceCascade.detectMultiScale( gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE ) for (x, y, w, h) in faces: cv2.rectangle( image, (x, y), (x+w, y+h), (0, 255, 0), 2) cv2.imshow("Frame", image) key = cv2.waitKey(1) & 0xFF rawCapture.truncate(0) if key == ord("q"): break |
「q」のキーを押すと終了します。
ラズパイに、例えば~/FaceDetectというディレクトリーを作って、カスケード(XMLファイル)と上のfacedetection.pyファイルを置いておきます。
$cd ~/FaceDetect
$python3 facedetection.py haarcascade_frontalface_default.xml
こんな感じで検出されます。
CPU温度は一気に上がって84℃くらになっていますがクロック周波数は765MHzくらいでそんな上がっていません。そのかわり使用率は75%。4コアをフルに使おうとしようとしてる……?
Leave a Reply