[OpenCV4.5.0] haarcascadesで顔検出をやってみよう

OpenCVで顔検出をやりたい。画像は以下のサッカー中の二人。

元画像

### 前準備
– 顔検出に使うカスケードファイルを使います。
haarcascades
$ mkdir haarcascades
$ cd haarcascades
$ wget https://github.com/opencv/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml

###

import cv2

cascade_file = "haarcascades/haarcascade_frontalface_alt.xml"
cascade = cv2.CascadeClassifier(cascade_file)

img = cv2.imread("1.jpg")
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

face_list = cascade.detectMultiScale(img_gray, minSize=(150,150))

if len(face_list) == 0:
	print("false")
	quit()

for (x,y,w,h) in face_list:
	print(" 顔の座標=", x, y, w, h)
	red = (0, 0, 255)
	cv2.rectangle(img, (x, y), (x+w, y+h), red, thickness=20)

cv2.imwrite("face-detect.png", img)

$ python3 app.py
SystemError: returned a result with an error set

ん?
haarcascade_frontalface_alt.xmlを、opencvの公式からダウンロードして、上書き

$ python3 app.py
顔の座標= 141 47 60 60
顔の座標= 318 47 59 59

なんだこれ、やべーな。