前提
ここに質問の内容を詳しく書いてください。
juliusを使って音声認識を行い、'start'と音声認識をするとopencvを使いリアルタイムで目の検知を行い、'stop'と認識すると目の検知を一時停止し、再び'start'と認識すると一時停止を再開するプログラムを作っています。エラーは出ずに動き、'start'と喋るとframeが開き目の検知が始まるのですが、マイクが音を拾う瞬間だけカメラが動きます。最初は、カメラが重たいのかなと思いfpsを変更したのですが変わりません。
実現したいこと
音声認識で、'start'という言葉を認識すると目の検知を開始する。
音声認識で、'stop'という言葉を認識すると目の検知を一時停止する。
以降は、'start' 'stop'で再開・一時停止をできるようにしたい。
ここに実現したいことを箇条書きで書いてください。
- ▲▲機能を動作するようにする
発生している問題・エラーメッセージ
該当のソースコード
python
1import cv2 2import time 3import socket 4import xml.etree.ElementTree as ET 5 6cap = cv2.VideoCapture(0) 7cap.set(cv2.CAP_PROP_FPS, 10) 8cap.set(cv2.CAP_PROP_FRAME_WIDTH, 320) 9cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 240) 10eye_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml') 11 12detect_eyes = False 13last_detection = time.time() 14 15client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 16client.connect(('localhost', 10500)) 17 18try: 19 data = '' 20 while True: 21 if '</RECOGOUT>' in data: 22 start_tag = data.find('<RECOGOUT>') 23 end_tag = data.find('</RECOGOUT>')+len('</RECOGOUT>') 24 data = data[start_tag:end_tag] 25 root = ET.fromstring(data) 26 for whypo in root.findall('./SHYPO/WHYPO'): 27 command = whypo.get('WORD') 28 score = float(whypo.get('CM')) 29 print(command + ':' + str(score)) 30 31 if score >= 0.9: 32 if command == 'start': 33 detect_eyes = True 34 print('Start Eye detection') 35 elif command == 'stop': 36 detect_eyes = False 37 print('Stop Eye detection') 38 39 print('\n') # new line 40 41 data = '' 42 43 else: 44 data += client.recv(1024).decode('utf-8') 45 46 if detect_eyes: 47 ret, rgb = cap.read() 48 gray = cv2.cvtColor(rgb, cv2.COLOR_BGR2GRAY) 49 eyes = eye_cascade.detectMultiScale(gray, scaleFactor=1.11, minNeighbors=3, minSize=(8, 8)) 50 current_time = time.time() 51 if len(eyes)>0: 52 last_detection = current_time 53 elif current_time - last_detection > 1.5: 54 cv2.putText(rgb,"Sleepy eyes! Wake up!",(10,100), cv2.FONT_HERSHEY_PLAIN, 3, (0,0,255), 2, cv2.LINE_AA) 55 56 for ex, ey, ew, eh in eyes: 57 cv2.rectangle(rgb, (ex, ey), (ex + ew, ey + eh), (255, 255, 0), 1) 58 59 cv2.imshow('frame', rgb) 60 if cv2.waitKey(1) == 27: 61 break 62 63except KeyboardInterrupt: 64 client.close() 65 cap.release() 66 cv2.destroyAllWindows()
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
こちらのサイトのコードを参考に、組み合わせて書いています。
音声認識
https://monomonotech.jp/kurage/raspberrypi/julius.html
画像処理
https://qiita.com/mogamin/items/a65e2eaa4b27aa0a1c23
回答1件
あなたの回答
tips
プレビュー