python opencv 人脸检测

进行人脸检测前需要调用笔记本的摄像头。
opencv中通过cv2.VideoCapture()来进行摄像头的调用。括号中为0代表调用本机摄像头,为1代表调用usb摄像头。
调用摄像头后,就需要进行人脸的检测,此处需要借助opencv中的CascadeClassifier()函数加载haarcascade_frontalface_alt.xml文件。
之后就是对摄像头得到的每帧视频进行处理,要对它进行灰度转换,再用之前加载得分类器进行人脸检测。使用classfier.detectMultiScale()返回检测到得人脸矩阵的Rect(x,y,w,h),x、y是左上角起始坐标,h、w是高和宽。
将得到的矩阵用cv2.rectangle()画出来。
所有代码如下:

import cv2

def openvideo(window_name ,video_id):
    cv2.namedWindow(window_name) # 创建一个窗口

    cap=cv2.VideoCapture(video_id) # 获取摄像头
    while cap.isOpened():
        ok,frame=cap.read() # ok表示摄像头读取状态,frame表示摄像头读取的图像
        if not ok :
            break

        cv2.imshow(window_name,frame) # 将图像矩阵显示在一个窗口中
        c=cv2.waitKey(10) # 等待10ms,10ms内没有按键操作就进入下一次while循环,从而得到10ms一帧的效果,waitKey返回在键盘上按的键
        if c & 0xFF==ord('q'): # 按键q后break
            break

    # 释放资源
    cap.release()
    cv2.destroyWindow(window_name)
    print("cam closed")


def facedetect(windowname,camera_id):

    cv2.namedWindow(windowname)

    cap=cv2.VideoCapture(camera_id,cv2.CAP_DSHOW)
    # Face Detection using Haar Cascades http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_objdetect/py_face_detection/py_face_detection.html?highlight=cascadeclassifier
    classfier=cv2.CascadeClassifier('haarcascade_frontalface_alt.xml') # 加载分类器,分类器位置可以自行更改,注意这里用opencv库文件夹下的绝对路径也不行,在库文件夹里找到这个文件复制到这个程序的同目录下,参考:https://blog.csdn.net/GAN_player/article/details/77993872

    color=(0,225,0)#人脸框的颜色,采用rgb模型,这里表示g取255,为绿色框

    while cap.isOpened():
        ok,frame=cap.read() # 读取一帧数据,ok表示摄像头读取状态,frame表示摄像头读取的图像矩阵mat类型
        print(ok)
        if not ok:
            break
        # 灰度
        gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)#图像灰度化,cv2.cvtColor(input_image, flag) where flag determines the type of conversion.
        # detectMultiScale完成人脸探测工作,returns the positions of detected faces as Rect(x,y,w,h),x、y是左上角起始坐标,h、w是高和宽
        # grey是要识别的图像数据,scaleFactor图像缩放比例,可以理解为同一个物体与相机距离不同,其大小亦不同,必须将其缩放到一定大小才方便识别,该参数指定每次缩放的比例
        faceRects=classfier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32)) # 利用分类器检测灰度图像中的人脸矩阵数,1.2和3分别为图片缩放比例和需要检测的有效点数

        print(faceRects)
        if len(faceRects)>0:#大于0则检测到人脸

            for faceRect in faceRects:# 可能检测到多个人脸,用for循环单独框出每一张人脸
                x,y,w,h=faceRect#获取框的左上的坐标,框的长宽
                cv2.rectangle(frame,(x-10,y-10),(x+w-10,y+h-10),color,2)

        cv2.imshow(windowname,frame) # 显示图像
        c=cv2.waitKey(10)
        if c&0xFF==27: # 退出条件
            break

    cap.release()#释放摄像头并销毁所有窗口
    cv2.destroyAllWindows()

print ('open camera...')
# openvideo('mycam' ,0)
facedetect('facedetect',0)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中使用OpenCV进行人脸检测的方法可以按照以下步骤进行操作。首先,导入所需的库和模型。可以使用以下代码导入OpenCV库和人脸检测模型: import cv2 cascade = cv2.CascadeClassifier("path/to/haarcascade_frontalface_default.xml") 在代码中,将"path/to/haarcascade_frontalface_default.xml"替换为你自己安装的OpenCV人脸检测模型的路径。 接下来,读取视频流或图像并将其转换为灰度图像以方便处理。可以使用以下代码完成此步骤: video_capture = cv2.VideoCapture(0) # 如果要从网络摄像头读取视频流,将0更改为视频流的URL while True: ret, frame = video_capture.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) 然后,使用模型进行人脸检测并标记出检测到的人脸。可以使用以下代码完成此步骤: faces = cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) 最后,显示标记后的图像并等待用户按下"q"键退出程序。可以使用以下代码完成此步骤: cv2.imshow('Video', frame) if cv2.waitKey(1) & 0xFF == ord('q'): break 完成以上步骤后,释放视频捕获对象并销毁所有窗口。可以使用以下代码完成此步骤: video_capture.release() cv2.destroyAllWindows() 以上是使用PythonOpenCV进行人脸检测的基本步骤。可以根据需要进行调整和扩展,例如添加眼睛和嘴巴的检测功能,或使用Dlib库进行更高级的人脸相关任务。 <span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [python opencv人脸检测提取及保存方法](https://download.csdn.net/download/weixin_38552305/13769902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [使用OpenCV实现人脸检测Python)](https://blog.csdn.net/weixin_42990464/article/details/120171635)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值