在python中捕获人脸框
Posted
技术标签:
【中文标题】在python中捕获人脸框【英文标题】:Capturing face frames in python 【发布时间】:2018-02-25 13:59:12 【问题描述】:我是 python 新手。我正在使用 python 3.5 和 openCV3。我有以下代码,假设通过网络摄像头捕获大约 20 帧:
import cv2
import time
cam = cv2.VideoCapture(0)
print(cam.isOpened())
detector=cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
Id=1
sampleNum=0
time.sleep(5)
while(True):
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = detector.detectMultiScale(gray, 1.3, 5)
for (x,y,w,h) in faces:
cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)
#incrementing sample number
sampleNum=sampleNum+1
#saving the captured face in the dataset folder
cv2.imwrite("dataSet/User."+Id +'.'+ str(sampleNum) + ".jpg", gray[y:y+h,x:x+w])
cv2.imshow('frame',img)
#wait for 100 miliseconds
if cv2.waitKey(100) & 0xFF == ord('q'):
break
# break if the sample number is morethan 20
elif sampleNum>20:
break
cam.release()
cv2.destroyAllWindows()
但是我收到了这个错误:
灰色 = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
错误:......\modules\imgproc\src\color.cpp:7456: 错误:(-215) scn == 3 ||函数 cv::ipp_cvtColor 中的 scn == 4
请问我该如何克服这样的错误?
【问题讨论】:
print(cam.isOpened()) 的输出是什么? 我只是仔细检查一下凸轮是否工作。但是我上面的代码未能捕获我的照片并将其保存在数据集文件夹中! 【参考方案1】:这段代码在我的机器上运行并跟踪我的脸。请尝试以下操作:
确保 haarcascade xml 文件与运行代码的目录位于同一目录中。您还可以指定文件的绝对路径以确保。 检查gray
图像是否看起来像您所期望的cv2.imgshow('gray', gray)
(并插入一个睡眠以便您可以看到它)。 cam.isOpened() 应该返回 True
检查其数据类型是否为 uint8 np.ndarray:print(gray.dtype)
【讨论】:
请问您现在使用的是什么版本的python? 3.5?还是更少? 另外,你的意思是说我要把这一行从 cv2.imshow('frame', img) 改成 cv2.imshow('gray', gray) !!!另外,我尝试指定xml的绝对路径,但它不起作用! 文件“C:/Users/Mary/Desktop/Project/face Rec/face_datasets.py”,第 13 行,在以上是关于在python中捕获人脸框的主要内容,如果未能解决你的问题,请参考以下文章
如何避免在 firebase ML Kit 的人脸检测 API 中捕获模糊图像