前のこの記事の続きです!
今回は
ビデオの中の顔を検出するプログラムを実行したいと思います。
合わせてnoteのよくメンテする記事もご参考ください。
まず、新しいバージョンのpythonを使うために(python 3)下記のコマンドを実行しておきましょう。
詳細説明は、前回の記事をご参照ください。
source ~/.profile workon cv
続いて、下記のプログラムを用意します。
注意:まず picameraをインストールしてください
同じRaspberry Piでpython 2の環境で、プログラムが実行できたのに
python 3の環境が下記のエラーが出ました。
ImportError : No module named ‘picamera’
結局pyhon 3の環境では、picamera をインストールしていないから、見つからないのは当然です。
下記のコマンドを実行する!
pip install picamera
python3の環境にインストールしました。
下記のプログラムを実行します!
#!/usr/bin/env python # -*- coding: utf-8 -*- from picamera.array import PiRGBArray from picamera import PiCamera import cv2, time # フレームサイズ FRAME_W = 320 FRAME_H = 192 # 正面の顔検出用 cascPath = '/usr/local/share/OpenCV/lbpcascades/lbpcascade_frontalface.xml' faceCascade = cv2.CascadeClassifier(cascPath) camera = PiCamera() camera.resolution = (FRAME_W, FRAME_H) camera.framerate = 32 rawCapture = PiRGBArray(camera, size=(FRAME_W, FRAME_H)) time.sleep(0.1) for image in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): frame = image.array # frame = cv2.flip(frame, -1) # 上下反転する場合 # Convert to greyscale for detection gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.equalizeHist( gray ) # 顔検出 faces = faceCascade.detectMultiScale(gray, 1.1, 3, 0, (10, 10)) # 検出した顔に枠を書く for (x, y, w, h) in faces: # 見つかった顔を矩形で囲む cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) frame = cv2.resize(frame, (540,300)) # ビデオに表示 cv2.imshow('Video', frame) key = cv2.waitKey(1) & 0xFF rawCapture.truncate(0) if key == ord("q"): break cv2.destroyAllWindows()
深夜、妻と子供が寝た後
ギリギリ画面に暗い照明を当てて、取ったスクリーンショットです。お許しください。
出来ました!
ここでは、画像ですが、実際はもちろん、ビデオで流している映像を動的に二人の顔を検出しています!
(ちなみに、これはWeworkの二人です。)
これで、監視カメラとか
店舗の来客人数識別カウンターなど、色々応用が出来そうですね。
後、サーボと組み合わせて、顔追跡も出来そうですね。
というよりは、次回顔追跡をやってみたいです!
[amazonjs asin=”B01NAHBSUD” locale=”JP” title=”Raspberry Pi 3 Model B V1.2 (日本製) 国内正規代理店品”]
[amazonjs asin=”B00FGKYHXA” locale=”JP” title=”サインスマート Raspberry Pi 用 カメラモジュール Camera Module for ラズベリーパイ”]
Raspberry Piで最新版のopenCV(3.4.4)をコンパイルして使いたい方はこちらの記事をどうぞ!