#環境
Windows10
Python=3.6
OpenCV=3.4
ノートPC(カメラが一つ付いてます)
#実現したいこと
Telloのカメラからの映像をリアルタイムにカスケード分類器を使用し群衆行動の推定を行いたいです
#現在の状況
TelloPyを使用していてvideo_effect.pyは問題なく動く(joystick_and_video.py、keyboard_and_video.pyは指定されたファイルが見つからないというエラーが延々と出て動きません)ので、それにカスケード分類器のコードを記述して動かしたいです
自分で多少いじくったりしたのですがカスケード分類器を呼び出せていない?エラーが出てわからなくなっています(実行時のソースコードは下に記述しときます)
Python
1OpenCV(3.4.1) Error: Assertion failed (!empty()) in cv::CascadeClassifier::detectMultiScale, file C:\projects\opencv-python\opencv\modules\objdetect\src\cascadedetect.cpp, line 1698
途方に暮れて他にTelloを制御するコードないかなぁ...
と探したところカスケード分類器も実装しているplaytelloが!
しかし、Wondowsがサポートされていないものをimportしているようで動きませんでした...(エラーがでたimportの箇所はキーボード入力のため?みたいなのでそこをなくせば動くのでは!?と思ったのですが,どこまで消してどこを残したらよいのかわかりませんでした)
#助けていただきたいこと
カスケード分類器を使うためには動画ファイルをキャプチャーしなくてはならないようなのでvideo_effect.pyでどうやったらキャプチャーすることができるか
もしくは
playtelloでWindowsをサポートしていない箇所をどこまで削除してよいか
その際、キーボート入力の部分は全部削ることになっても構いません!
Telloを制御(離着陸など)するコマンドは残しておきたいです...
初心者なので詳しく教えていただけるとありがたいです!
よろしくお願いします。
python
1import sys 2import traceback 3import tellopy 4import av 5import cv2 6import numpy 7import time 8 9def main(): 10 DEVICE_ID = 0 11 # 分類器の指定 12 cascade_file = "haarcascade_eye.xml" 13 cascade = cv2.CascadeClassifier(cascade_file) 14 # カメラ映像取得 15 cap = cv2.VideoCapture(DEVICE_ID) 16 17 # 初期フレームの読込 18 end_flag, c_frame = cap.read() 19 height, width, channels = c_frame.shape 20 21 22 drone = tellopy.Tello() 23 try: 24 drone.connect() 25 drone.wait_for_connection(60.0) 26 retry = 3 27 container = None 28 while container is None and 0 < retry: 29 retry -= 1 30 try: 31 container = av.open(drone.get_video_stream()) 32 except av.AVError as ave: 33 print(ave) 34 print('retry...') 35 # skip first 300 frames 36 frame_skip = 300 37 while end_flag == True: 38 for frame in container.decode(video=0): 39 # 画像の取得と顔の検出 40 img = c_frame 41 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 42 face_list = cascade.detectMultiScale(img_gray, minSize=(100, 100)) 43 44 # 検出した顔に印を付ける 45 for (x, y, w, h) in face_list: 46 color = (0, 0, 225) 47 pen_w = 3 48 cv2.rectangle(img_gray, (x, y), (x+w, y+h), color, thickness = pen_w) 49 50 # フレーム表示 51 cv2.imshow('org', c_frame) 52 cv2.imshow('gaussian', img_gray) 53 54 # 次のフレーム読み込み 55 end_flag, c_frame = cap.read() 56 if 0 < frame_skip: 57 frame_skip = frame_skip - 1 58 continue 59 start_time = time.time() 60 image = cv2.cvtColor(numpy.array(frame.to_image()), cv2.COLOR_RGB2BGR) 61 cv2.imshow('Original', image) 62 #cv2.imshow('Canny', cv2.Canny(image, 100, 200)) 63 cv2.waitKey(1) 64 drone.take_picture() 65 if frame.time_base < 1.0/60: 66 time_base = 1.0/60 67 else: 68 time_base = frame.time_base 69 frame_skip = int((time.time() - start_time)/time_base) 70 except Exception as ex: 71 exc_type, exc_value, exc_traceback = sys.exc_info() 72 traceback.print_exception(exc_type, exc_value, exc_traceback) 73 print(ex) 74 finally: 75 drone.quit() 76 cv2.destroyAllWindows() 77 cap.release() 78if __name__ == '__main__': 79 main() 80
あなたの回答
tips
プレビュー