質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

705閲覧

顔を認識して、フレームを作り、フレームの中心を点の情報として認識したいです

gygygy

総合スコア4

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

1クリップ

投稿2019/11/07 02:25

前提・実現したいこと

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/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/07 20:57

import部分やcascadeの定義部分が抜けているようです。cascadeの設定を収めたxmlはhaarlikeの標準品かと思いますが、設定ファイルの名前からどれを使ったかまで特定できます。 ポン付けで動くような、動作確認に最低限必要なコード書いていただけますか?
gygygy

2019/11/12 04:58

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])) お願いします
guest

回答1

0

Pythonはインデントが違うと意味が違ってきますので、次回以降コードを張り付ける際には<code>のボタンを押した内側にそのままペーストしてください。

Python3

1import cv2 2 3try: 4 # オリジナル 5 capture = cv2.VideoCapture(1) 6 cascade = cv2.CascadeClassifier(r'C:\Users\admin\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_alt.xml') 7 8 # 汎用コード 9 # capture = cv2.VideoCapture(0) 10 # cascade = cv2.CascadeClassifier("./haarcascade_frontalface_alt.xml") 11 12 while(True): 13 ret, frame = capture.read() 14 if ret == False: 15 print('カメラから映像を取得できませんでした.') 16 continue 17 18 # 追加 19 img_gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) 20 img_gray = cv2.equalizeHist(img_gray) 21 22 23 # 修正 24 # facerect = cascade.detectMultiScale(frame) 25 facerect = cascade.detectMultiScale(img_gray) 26 27 if len(facerect) > 0: 28 for rect in facerect: 29 # 追加 30 # 外枠 31 pts1 = rect[0:2] 32 wh = rect[2:4] 33 pts2 = pts1 + wh 34 cv2.circle(frame,tuple(pts1),10,(0,0,128),-1) 35 cv2.circle(frame,tuple(pts2),10,(0,0,192),-1) 36 cv2.rectangle(frame,tuple(pts1),tuple(pts2),(0,0,256), thickness=2) 37 38 # 内枠 39 half_wh = list(map(int,wh/4)) 40 pts3 = pts1 + half_wh 41 pts4 = pts2 - half_wh 42 cv2.circle(frame,tuple(pts3),10,(0,128,0),-1) 43 cv2.circle(frame,tuple(pts4),10,(0,192,0),-1) 44 cv2.rectangle(frame,tuple(pts3),tuple(pts4),(0,256,0), thickness=2) 45 46 # 参考 47 center = list(map(int,wh/2)) 48 cv2.circle(frame,tuple(pts1 + center),10,(256,256,256),-1) 49 50 51 # pts_wh = tuple(rect[2:4])/2 52 # cv2.rectangle(frame,tuple(pts1),tuple(pts2),(0,0,256), thickness=2) 53 54 # 削除 55 # cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]+rect[2:4]), (0,0,255), thickness=2) 56 # cv2.rectangle(frame, tuple(rect[0:2]),tuple(rect[0:2]-rect[2:4]), (255,0,0), thickness=2) 57 # point1 = [rect[0], rect[1]] 58 # point2 = [rect[0]+rect[2], rect[1]+rect[3]] 59 # print(point1, point2) 60 cv2.imshow('f', frame) 61 62 if cv2.waitKey(1) & 0xFF == ord('q'): 63 break 64 # 移動元 65 # capture.release() 66 # cv2.destroyAllWindows() 67 68# 追加 69except KeyboardInterrupt: 70 pass 71 72except: 73 import sys 74 print("Error:", sys.exc_info()[0]) 75 print(sys.exc_info()[1]) 76 import traceback 77 print(traceback.format_tb(sys.exc_info()[2])) 78 79# 追加 80finally: 81 # 移動先 82 capture.release() 83 cv2.destroyAllWindows() 84

投稿2019/11/14 21:54

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問