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文件被导入时执行。

    总的来说视频检测与图像检测没有太大区别,就是将视频分割成一帧帧图片再进行处理。
  • 相关阅读:
    Advanced Configuration Tricks
    Reviewing the Blog Module
    Editing and Deleting Data
    Making Use of Forms and Fieldsets
    Understanding the Router
    SQL Abstraction and Object Hydration
    Preparing for Different Databases
    Java学习理解路线图
    Openstack学习历程_1_视频
    CentOS安装Nginx负载
  • 原文地址:https://www.cnblogs.com/xzb0-0/p/10246858.html
Copyright © 2011-2022 走看看