#OpenCVを使って顔認識のデモをカメラ映像で作りたい
プログラム初心者です。Raspberry PiとRaspiカメラv2を使用して顔認識のデモを作りたいと思い、コードを打ち込んでみたのですが、突破できないエラーに遭遇したので、なにかご存知の方に知恵をお借りしたいです。
`
エラーメッセージ
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (1759) handleMessage OpenCV | GStreamer warning: Embedded video playback halted; module v4l2src0 reported: Failed to allocate required memory.
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (888) open OpenCV | GStreamer warning: unable to start pipeline
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_gstreamer.cpp (480) isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
[ WARN:0] global /home/pi/opencv/modules/videoio/src/cap_v4l.cpp (893) open VIDEOIO(V4L2:/dev/video0): can't open camera by index
Traceback (most recent call last):
File "face_demo.py", line 23, in <module>
igray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
cv2.error: OpenCV(4.3.0-dev) /home/pi/opencv/modules/imgproc/src/color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cvtColor'
該当のソースコード
python3
1 2import cv2 3 4# 以下のカスケードファイルは実行するpythonファイルと同じディレクトリに移動しておく 5cascade = cv2.CascadeClassifier("haarcascade_frontalface_alt.xml") 6 7# カメラモジュールから入力を開始 8capture = cv2.VideoCapture(0) 9 10# 検出時のサイズを指定 11MIN_SIZE = (150, 150) 12 13# while文で処理を指定 14while True: 15 # 「ESC」を押したら処理を止める、waitKey()はキーボード入力を処理する関数で、引数は入力を待つ時間を指定 16 if cv2.waitKey(1) & 0xFF == 27: 17 break 18 19 # カメラ画像を読み込む 20 _, image = capture.read() 21 # raspiのカメラだと反転しているので修正 22 image = cv2.flip(image, -1) 23 # OpenCVでグレースケール化、計算処理を高速化するため 24 igray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 25 # 顔検出を行う部分 26 faces = cascade.detectMultiScale(igray, minSize=MIN_SIZE) 27 28 # 顔検出時以外もフレームを表示させておく 29 if len(faces) == 0: 30 cv2.imshow('frame', image) 31 continue 32 for (x, y, w, h) in faces: 33 color = (255, 0, 0) 34 cv2.rectangle(image, (x, y), (x+w, y+h), 35 color, thickness=8) 36 37 # 顔が検出されたら顔の周りに枠を表示してフレームを表示、引数にはウィンドウ名と表示する画像を指定、ループが高速に動作するので画像が連続で表示され映像のように映る 38 cv2.imshow('frame', image) 39 40 # 顔を検出したらターミナルに「face」と表示 41 print("face") 42 43capture.release() # カメラを解放 44cv2.destroyAllWindows() # ウィンドウを破棄
補足情報
OpenCVのバージョンは4.3.0-devです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/08 17:39
2020/05/08 19:26
2020/05/11 06:29
2020/05/13 16:29