zoukankan      html  css  js  c++  java
  • 视频人脸检测——OpenCV版(三)

    视频人脸检测是图片人脸检测的高级版本,图片检测详情点击查看我的上一篇《图片人脸检测——OpenCV版(二)》 

    往期目录

    视频人脸检测——Dlib版(六)
    OpenCV添加中文(五)
    图片人脸检测——Dlib版(四)
    视频人脸检测——OpenCV版(三)
    图片人脸检测——OpenCV版(二)
    OpenCV环境搭建(一)
    更多更新,欢迎访问我的github:https://github.com/vipstone/faceai

    实现思路:

    调用电脑的摄像头,把摄像的信息逐帧分解成图片,基于图片检测标识出人脸的位置,把处理的图片逐帧绘制给用户,用户看到的效果就是视频的人脸检测。

    效果预览:

    实现步骤

    使用OpenCV调用摄像头并展示

    获取摄像头:

    cap = cv2.VideoCapture(0)

    参数0表示,获取第一个摄像头。

    显示摄像头 逐帧显示,代码如下:

    while (1): 
        ret, img = cap.read()
        cv2.imshow("Image", img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()  # 释放摄像头
    cv2.destroyAllWindows()  # 释放窗口资源

    cv2.waitKey(1) & 0xFF使用了“&”位元算法,含义是获取用户输入的最后一个字符的ASCII码,如果输入的是“q”,则跳出循环。

    视频的人脸识别

    这个时候,用到了上一节的《图片人脸检测——OpenCV版(二)》 把人脸识别的代码封装成方法,代码如下:

    def discern(img):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        cap = cv2.CascadeClassifier(
            "C:Python36Libsite-packagesopencv-masterdatahaarcascadeshaarcascade_frontalface_default.xml"
        )
        faceRects = cap.detectMultiScale(
            gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))
        if len(faceRects):
            for faceRect in faceRects:
                x, y, w, h = faceRect
                cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2)  # 框出人脸
        cv2.imshow("Image", img)

     再循环摄像头帧图片的时候,调用图片识别方法即可,代码如下:

    # 获取摄像头0表示第一个摄像头
    cap = cv2.VideoCapture(0)
    while (1):  # 逐帧显示
        ret, img = cap.read()
        # cv2.imshow("Image", img)
        discern(img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()  # 释放摄像头
    cv2.destroyAllWindows()  # 释放窗口资源
    

      

    完整的代码如下:

    # -*- coding:utf-8 -*-
    # OpenCV版本的视频检测
    import cv2
    
    
    # 图片识别方法封装
    def discern(img):
        gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        cap = cv2.CascadeClassifier(
            "C:Python36Libsite-packagesopencv-masterdatahaarcascadeshaarcascade_frontalface_default.xml"
        )
        faceRects = cap.detectMultiScale(
            gray, scaleFactor=1.2, minNeighbors=3, minSize=(50, 50))
        if len(faceRects):
            for faceRect in faceRects:
                x, y, w, h = faceRect
                cv2.rectangle(img, (x, y), (x + h, y + w), (0, 255, 0), 2)  # 框出人脸
        cv2.imshow("Image", img)
    
    
    # 获取摄像头0表示第一个摄像头
    cap = cv2.VideoCapture(0)
    while (1):  # 逐帧显示
        ret, img = cap.read()
        # cv2.imshow("Image", img)
        discern(img)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()  # 释放摄像头
    cv2.destroyAllWindows()  # 释放窗口资源
    

     

  • 相关阅读:
    Mybatis中#{}和${}传参的区别
    笔记摘抄 —— shiro学习篇
    使用Spring的Testcase的单元测试的写法
    【转】FreeMarker学习笔记
    破解Pycharm,IDEA,PhpStrom等系列产品的,有关JetbrainsCrack的使用方法
    Python的字符串
    python的变量
    python开头注释
    h5-动画小案例-滚动展示
    h5-钟表动画案例
  • 原文地址:https://www.cnblogs.com/vipstone/p/8933916.html
Copyright © 2011-2022 走看看