利用opencv的CascadeClassifier简单实现人脸识别
环境:MAC+anaconda+opencv3.4
问题:SystemError:‘class ‘cv2.CascadeClassifier’’ returned a result with an error set
在学习opencv-python时,利用笔记本摄像头实现一个视频流人脸识别小程序,其中在调用opencv的haarcascade_frontalface_default.xml时程序报错SystemError,详细信息如下:
import cv2
import numpy as np
img = cv2.imread('photo_noisy.jpg')
print(img.shape)
face_detect = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
face_zone = face_detect.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)
print("识别人脸信息:",face_zone)
for x,y,w,h in face_zone:
#绘制矩形人脸区域
cv2.rectangle(img,(x,y),(x+w,y+h),color=[0,0,255],thickness=2)
#绘制圆形人脸区域
cv2.circle(img,(x+w//2,y+h//2),radius=w//2,color=[0,255,0],thickness=2)
cv2.namedWindow("Easmount-CSDN",0)
cv2.imshow("result",img)
cv2.waitKey(0)
报错信息如下:
在网页:https://github.com/ihongxx/opencv/tree/master/datamaster/data/haarcascades/haarcascade_frontalface_default.xml中
我们将“haarcascade_frontalface_default.xml”文件已经下载至本地并放在当前的包中。但是出现这个错误。原因是:应该把opencv的资源整合在一起,单独下载xml或者某几个文件,可能会缺少关联文件,而出现错误。所有要把opencv的资源包放在一起。
解决方法:
在我当前的环境中不需要下载xml文件,因为这个文件已经存在,在我们使用anaconda安装opencv时候,已经下载了这个xml文件了。所以只需要找到cv2/data这个目录,就会发现xml存在。那问题是anaconda安装的opencv文件具体在哪儿。我的mac电脑文件具体目录是:/Users/hxx/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml。找到后修改代码中的文件目录就成功了。
import cv2
import numpy as np
img = cv2.imread('photo_noisy.jpg')
print(img.shape)
face_detect = cv2.CascadeClassifier('/Users/hxx/anaconda3/lib/python3.7/site-packages/cv2/data/haarcascade_frontalface_default.xml')
face_zone = face_detect.detectMultiScale(img,scaleFactor=1.1,minNeighbors=5)
print("识别人脸信息:",face_zone)
for x,y,w,h in face_zone:
#绘制矩形人脸区域
cv2.rectangle(img,(x,y),(x+w,y+h),color=[0,0,255],thickness=2)
#绘制圆形人脸区域
cv2.circle(img,(x+w//2,y+h//2),radius=w//2,color=[0,255,0],thickness=2)
cv2.namedWindow("Easmount-CSDN",0)
cv2.imshow("result",img)
cv2.waitKey(0)