前提・実現したいこと
pytonで顔の画像認識を勉強しています。
顔を認識して、フレームを作るコードですが、フレームの1つの点をポイント1として、ここでフレームの真ん中にポイント2を作りたいと考えています。ポイント2を含む青いフレームを顔のフレームの中央に持ってくるにはどうしたらいいでしょうか?
発生している問題・エラーメッセージ
rect2,rect3を半分にして、ポイント1に足したいのですが、うまくできません。どうすればいいでしょうか?
エラーメッセージ
該当のソースコード
python
1facerect = cascade.detectMultiScale(frame) 2 print(len(facerect)) 3 4 if len(facerect) > 0: 5 for rect in facerect: 6 cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (0,0,255), thickness=2) 7 cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]-rect[2:4]), (255,0,0), thickness=2) 8 point1 = [rect[0], rect[1]] 9 point2 = [rect[0]+rect[2], rect[1]+rect[3]] 10 print(point1, point2) 11 cv2.imshow('f', frame) 12 13 if cv2.waitKey(1) & 0xFF == ord('q'): 14 break
試したこと
ここに問題に対して試したことを記載してください。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
import部分やcascadeの定義部分が抜けているようです。cascadeの設定を収めたxmlはhaarlikeの標準品かと思いますが、設定ファイルの名前からどれを使ったかまで特定できます。
ポン付けで動くような、動作確認に最低限必要なコード書いていただけますか?
import cv2
try:
capture = cv2.VideoCapture(0)
cascade = cv2.CascadeClassifier(
r'C:\Users\admin\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml')
while(True):
ret, frame = capture.read()
if ret == False:
print('カメラから映像を取得できませんでした.')
continue
facerect = cascade.detectMultiScale(frame)
print(len(facerect))
if len(facerect) > 0:
for rect in facerect:
cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (0,0,255), thickness=2)
cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]-rect[2:4]), (255,0,0), thickness=2)
point1 = [rect[0], rect[1]]
point2 = [rect[0]+rect[2], rect[1]+rect[3]]
print(point1, point2)
cv2.imshow('f', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
capture.release()
cv2.destroyAllWindows()
except:
import sys
print("Error:", sys.exc_info()[0])
print(sys.exc_info()[1])
import traceback
print(traceback.format_tb(sys.exc_info()[2]))
お願いします