在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 行,在 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 错误: ..\..\..\modules\imgproc\src\color.cpp:7456: 错误:(-215) scn == 3 || scn == 4 在函数 cv::ipp_cvtColor 我用的是 Python3。 imshow 方法只是在屏幕上显示图像。你能看到吗? 我无法捕捉或看到任何图像。会不会和我的设置环境有关?

以上是关于在python中捕获人脸框的主要内容,如果未能解决你的问题,请参考以下文章

Android自动裁剪相机捕获的图像

如何在跟踪js中进行人脸检测后捕获图像

如何避免在 firebase ML Kit 的人脸检测 API 中捕获模糊图像

需要在使用 MLKit 和 Camera2 进行人脸检测期间捕获静止图像

如何在捕获的照片 android 上进行人脸检测?

视频捕捉人脸检测-安卓