前提・実現したいこと
ROSでOpenCVを用いて、顔認識をしたいと考えています。プログラムを実行する際に以下のようなエラーが発生しています。
発生している問題・エラーメッセージ
タイムアウトを選択 タイムアウトを選択 OpenCVエラー:マット、ファイル/tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/include/opencv2/core/matでアサーションが失敗しました(total()== 0 || data!= __null)。 inl.hpp、500行目 トレースバック(最後の最後の呼び出し): <module>内のファイル "face_detect.py"、34行目 end_flag、c_frame = cap.read() cv2.error:/tmp/binarydeb/ros-kinetic-opencv3-3.3.1/modules/core/include/opencv2/core/mat.inl.hpp:500:エラー:(-215)total()== 0 | | データ!=関数Matの__null
該当のソースコード
python
1#!/usr/bin/env pyhon 2# -*- coding: utf-8 -*- 3import cv2 4#import rospy 5#import numpy as np 6#from sensor_msgs.msg import Image, CameraInfo 7#from cv_bridge import CvBridge, CvBridgeError 8#class faceExtract(object): 9 # def __init__(self): 10 # self._image_pub = rospy.Publisher('masked_image', Image, queue_size = 1) 11 # self._image_sub = rospy.Subscriber('/usb_cam/image_raw', Image, self.callback) 12 # self._bridge = CvBridge() 13 14 15if __name__ == '__main__': 16 # 定数定義 17 ESC_KEY = 27 # Escキー 18 INTERVAL= 33 # 待ち時間 19 FRAME_RATE = 30 # fps 20 21 ORG_WINDOW_NAME = "org" 22 GAUSSIAN_WINDOW_NAME = "gaussian" 23 24 DEVICE_ID = 0 25 26 # 分類器の指定 27 cascades_file ="haarcascade_frontalface_alt2.xml" 28 cascade = cv2.CascadeClassifier(cascades_file) 29 30 # カメラ映像取得 31 cap = cv2.VideoCapture(DEVICE_ID) 32 33 # 初期フレームの読込 34 end_flag, c_frame = cap.read() 35 height, width, channels = c_frame.shape 36 37 # ウィンドウの準備 38 cv2.namedWindow(ORG_WINDOW_NAME) 39 cv2.namedWindow(GAUSSIAN_WINDOW_NAME) 40 41 # 変換処理ループ 42 while end_flag == True: 43 44 # 画像の取得と顔の検出 45 img = c_frame 46 47 # 画像サイズの指定 48 cv.SetCaptureProperty(capture,cv.CV_CAP_PROP_FRAME_WIDTH,100) 49 cv.SetCaptureProperty(capture,cv.CV_CAP_PROP_FRAME_HEIGHT,100) 50 51 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 52 face_list = cascade.detectMultiScale(img_gray, minSize=(100, 100)) 53 54 # 検出した顔に印を付ける 55 for (x, y, w, h) in face_list: 56 color = (0, 0, 225) 57 pen_w = 3 58 cv2.rectangle(img_gray, (x, y), (x+w, y+h), color, thickness = pen_w) 59 60 # フレーム表示 61 cv2.imshow(ORG_WINDOW_NAME, c_frame) 62 cv2.imshow(GAUSSIAN_WINDOW_NAME, img_gray) 63 64 # Escキーで終了 65 key = cv2.waitKey(INTERVAL) 66 if key == ESC_KEY: 67 break 68 69 # 次のフレーム読み込み 70 end_flag, c_frame = cap.read() 71 72 # 終了処理 73 cv2.destroyAllWindows() 74 cap.release()
試したこと
様々なサイトを調べ、自分なりに、ソースコードや画像のサイズの変更を行った。
(載せてあるソースはサイトから引用したものオリジナル)
補足情報(FW/ツールのバージョンなど)
使用するWindowsのpc上にVMwareを用いて仮想OSを作成
仮想OSはUbuntu16.04
ROSはKinetic
webカメラはUVC対応
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。