zoukankan      html  css  js  c++  java
  • OpenCV3 视频中的人脸检测

    视频里的人脸检测跟静态图片中的差不多,只是需要调用摄像头。

    import cv2
    def detect():                       
        face_cascade  = cv2.CascadeClassifier(
            'cascades/haarcascade_frontalface_default.xml')
        eye_cascade = cv2.CascadeClassifier(
            'cascades/haarcascade_eye.xml')
        camera = cv2.VideoCapture(0)    #初始化摄像头,参数传递的是要使用的第几个摄像头
    
        while True:
            ret, frame = camera.read()  #read()函数返回两个值,第一个布尔值用于判断是否检测到帧,第二个为帧
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  #捕捉到帧后将其转为灰度图像(OpenCV基于灰度色彩空间)
    
            faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    
            for  (x, y, w, h) in faces:
                img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 蓝色矩形框
                eyes = eye_cascade.detectMultiScale(gray, 1.2, 5,0,(5,5))       #直接传值的话需要多传一个flags值,否则报错
    
                font = cv2.FONT_ITALIC          
                cv2.putText(frame, 'xzb', (x -10, y - 10), font, 1, (255, 0, 255), 2)
                #在人脸框上显示文本1-图片,2-文本,3-位置,4-字体,5-大小,6-颜色,7-线宽
    
                for (ex, ey, ew, eh) in eyes:
                    cv2.rectangle(img, (ex,ey),(ex+ew,ey+eh),(0,255,0),2)   #绿色矩形框
    
                cv2.imshow('camera',frame)
    
            if cv2.waitKey(100) & 0xff == ord ('q'):
                break
    
        camera.release()
        cv2.destroyAllWindows()
    
    if __name__ =='__main__':        
        detect()

     结果:

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

     这里加载了两个分类器,一个是用于检测脸,一个是检测眼睛

    camera = cv2.VideoCapture(0)

    初始化摄像头,参数传递的是要使用的第几个摄像头

            for  (x, y, w, h) in faces:
                img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)  # 蓝色矩形框
                eyes = eye_cascade.detectMultiScale(gray, 1.2, 5,0,(5,5))  #直接传值的话需要多传一个flags值,否则报错
                font = cv2.FONT_ITALIC          #字体
                cv2.putText(frame, 'xzb', (x -10, y - 10), font, 1, (255, 0, 255), 2)
                #在人脸框上显示文本1-图片,2-文本,3-位置,4-字体,5-大小,6-颜色,7-线宽
    
                for (ex, ey, ew, eh) in eyes:
                    cv2.rectangle(img, (ex,ey),(ex+ew,ey+eh),(0,255,0),2)   #绿色矩形框
    cv2.imshow('camera',frame)

     这里是将每一帧检测到脸的图片进行眼睛检测。这样相比整张图片检测眼可以减少计算量,提高运算速度。

            if cv2.waitKey(100) & 0xff == ord ('q'):
                break
    
        camera.release()
        cv2.destroyAllWindows()
    
    if __name__ =='__main__':         
        detect()

     输入q退出,不然摄像头一直会调用。

    if __name__ =='__main__':         
        detect()是为了防止这个py文件被导入时执行。

    总的来说视频检测与图像检测没有太大区别,就是将视频分割成一帧帧图片再进行处理。
  • 相关阅读:
    php网摘收藏
    php优秀网摘
    jquery ajax thinkphp异步局部刷新完整流程
    easyui的accordion为动态生成,accordion的onSelect方法中又动态生成tree,为什么要第二次选择accordion,tree才生成出来
    php导出CSV文件时身份证号码显示为科学计数的解决方法
    php导出数据到excel,防止身份证等数字字符格式变成科学计数的方法
    JQuery实战教程即将面市
    在windows+apache环境下安装ioncube
    PHP长文章分页 实现手动分页代码 代码简单
    DEDE非内容页调用自定义字段使用方法
  • 原文地址:https://www.cnblogs.com/xzb0-0/p/10246858.html
Copyright © 2011-2022 走看看