teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

1

低評価をもらったので、実行可能結果まで載せました!Thanks!

2020/05/18 09:04

投稿

退会済みユーザー
answer CHANGED
@@ -1,8 +1,39 @@
1
- これでし
1
+ 実行確認済みの全ソースす。そもそも質問のコードは[OpenCVのPythonのチュートリアル](https://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html)とほぼ全く同じですよね。haarcascadesのファイルはインストール済みのOpenCVのディレクトリのshareとの下にあります。環境によって違うの見つからなければ検索てPythonのソースコードと同じディレクトリにhaarcascadesと言ディレクトリを丸ごとコピーしてください。
2
+
2
3
  ```py3
4
+ import os
5
+ import cv2
6
+ import numpy as np
3
- def facedetect(filename):
7
+ from matplotlib import pyplot as plt
4
- face_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_frontalface_default.xml')
5
- eye_cascade = cv2.CascadeClassifier('haarcascades/haarcascade_eye.xml')
6
- img = cv2.imread(filename)
7
8
 
9
+
10
+ def facedetect(imagefile):
11
+ face_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_frontalface_default.xml')
12
+ eye_cascade = cv2.CascadeClassifier('./haarcascades/haarcascade_eye.xml')
13
+ img = cv2.imread(imagefile)
14
+ gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
15
+ faces = face_cascade.detectMultiScale(gray, 1.3, 5)
16
+ for (x, y, w, h) in faces:
17
+ cv2.rectangle(img, (x, y), (x+w, y+h), (255, 0, 0), 2)
18
+ roi_gray = gray[y:y+h, x:x+w]
19
+ roi_color = img[y:y+h, x:x+w]
20
+ eyes = eye_cascade.detectMultiScale(roi_gray)
21
+ for(ex, ey, ew, eh) in eyes:
22
+ cv2.rectangle(roi_color, (ex, ey), (ex+ew, ey+eh), (0, 255, 0), 2)
23
+ plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
24
+ plt.show()
25
+
26
+
27
+ if __name__ == '__main__':
28
+ imagefile = 'lena.jpg'
29
+ if os.path.exists(imagefile):
30
+ facedetect(imagefile)
8
- ```
31
+ ```
32
+
33
+ オマケにレナさん1972年当時21才と2019年67才の時の入力画像です。
34
+
35
+ ![イメージ説明](e75c61d73b8d0b0720efb9f396e1c853.jpeg)
36
+
37
+ 実行結果
38
+
39
+ ![検出できました!](f5ee2f1854c8f740ac610d6c7467b55b.png)