前のこの記事の続きです!
今回は
ビデオの中の顔を検出するプログラムを実行したいと思います。
合わせて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)をコンパイルして使いたい方はこちらの記事をどうぞ!
