【问题标题】:Detecting faces from camera using Opencv Python使用 Opencv Python 从相机中检测人脸
【发布时间】:2016-07-05 12:15:09
【问题描述】:

我目前正在尝试从我的笔记本电脑摄像头检测面部,但由于某种原因,我找到的代码没有给出结果。该代码正在启动网络摄像头并且没有给出任何错误,但没有为面部绘制矩形。没有检测到人脸,因此 for 循环永远不会运行,我尝试更改比例因子,但这没有帮助。这两个 xml 文件与代码位于同一文件夹中。代码如下:

import numpy as np
import cv2

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

img = cv2.VideoCapture(0)

while(1):
    _,f=img.read()
    gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    for (x,y,w,h) in faces:
        cv2.rectangle(f,(x,y),(x+w,y+h),(255,0,0),2)
        roi_gray = gray[y:y+h, x:x+w]
        roi_color = f[y:y+h, x:x+w]
        eyes = eye_cascade.detectMultiScale(roi_gray)
        for (ex,ey,ew,eh) in eyes:
            cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)

    cv2.imshow('img',f)
    if cv2.waitKey(25) == 27:
        break

cv2.destroyAllWindows()
img.release()

【问题讨论】:

    标签: python opencv face-detection


    【解决方案1】:

    您好,您的程序运行良好,您有 2 个小问题,您需要 Tab 将此代码放入 while:

    cv2.imshow('img',f)
    if cv2.waitKey(25) == 27:
      break
    

    并确保您的 xml 文件已建立,这是我的代码:

    import numpy as np
    import cv2
    
    face_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv3/3.0.0/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
    eye_cascade = cv2.CascadeClassifier('/usr/local/Cellar/opencv3/3.0.0/share/OpenCV/haarcascades/haarcascade_eye.xml')
    
    img = cv2.VideoCapture(0)
    
    while(1):
        _,f=img.read()
        gray = cv2.cvtColor(f, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
        for (x,y,w,h) in faces:
            cv2.rectangle(f,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = f[y:y+h, x:x+w]
            eyes = eye_cascade.detectMultiScale(roi_gray)
            for (ex,ey,ew,eh) in eyes:
                cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
    
        cv2.imshow('Test',f)
        if cv2.waitKey(25) == 27:
            break
    
    cv2.destroyAllWindows()
    img.release()
    

    【讨论】:

    • 我在此处发布时已将代码标记为只是忘记执行此操作。对此感到抱歉。但是我的代码仍然没有显示任何矩形。请帮忙。两个 xml 文件与代码位于同一文件夹中。
    • 我只是运行代码并且工作正常,也许是你的 OpenCV 版本我已经在 Mac 上使用 OpenCV 3 尝试过,效果很好
    • 非常感谢。我的 xml 文件中有错误。代码有效。
    猜你喜欢
    • 2016-09-22
    • 2015-12-18
    • 2016-02-15
    • 2014-06-28
    • 2012-02-04
    • 2013-05-24
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多