• 用opencv实现人脸识别(5)


    目的

    • 运用opencv实现人脸的区域检测, 基于opencv的算法

    步骤

    导入算法模型

    • 不需要去网上下载,还需要积分,直接在opencv的目录下就可以找到
      在这里插入图片描述
    我的目录是:D:\soft\anaconda3\Lib\site-packages\cv2
    
    • 1

    读取视频

    
    def video_detect(filename):
        cap = cv2.VideoCapture(filename)
        while cap.isOpened():
            if not cap:
                print('video is not input, error')
                break
            ret, frame = cap.read()
            if not ret:
                print('read is over')
                break
            out = StaticDetect(frame)
            cv2.imshow('video-face', out)
            k = cv2.waitKey(1000//60)
            if k == 27:
                break
        cap.release()
        cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    处理单张图

    # 1.静态图像中的人脸检测
    def StaticDetect(img):
         # 创建1个级联分类器 加载1个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
         face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
         # 加载图像
        #  img = cv2.imread(filename)
         # 转换为灰度图
         gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
         # 人脸检测:scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及
         # 每个人脸矩形保留近似数⽬的最⼩值
         # 返回人脸矩形数组
         faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
         for (x, y, w, h) in faces:
             # 在原图像上绘制矩形
             img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        #  cv2.namedWindow('Face Detected!')
        
        #  cv2.imshow('Face Detected!', img)
        #  cv2.waitKey(0)
        #  cv2.destroyAllWindows()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    方法调用

    
    video_detect('./videos/face.mp4')
    
    • 1
    • 2

    效果

    在这里插入图片描述

    扩展

    • 接下来可以用cnn等算法来识别人脸,判断是不是同一个人

    完整代码

    import cv2 
    import numpy as np
    
    haar_front_face_xml = 'libs/haarcascade_frontalface_default.xml'
    haar_eye_xml = 'libs/haarcascade_eye.xml'
    
    # 1.静态图像中的人脸检测
    def StaticDetect(img):
         # 创建1个级联分类器 加载1个 .xml 分类器文件. 它既可以是Haar特征也可以是LBP特征的分类器.
         face_cascade = cv2.CascadeClassifier(haar_front_face_xml)
         # 加载图像
        #  img = cv2.imread(filename)
         # 转换为灰度图
         gray_img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
         # 人脸检测:scaleFactor,minNegihbors,分别表示人脸检测过程中每次迭代时图像的压缩率以及
         # 每个人脸矩形保留近似数⽬的最⼩值
         # 返回人脸矩形数组
         faces = face_cascade.detectMultiScale(gray_img, 1.3, 5)
         for (x, y, w, h) in faces:
             # 在原图像上绘制矩形
             img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
        #  cv2.namedWindow('Face Detected!')
        
        #  cv2.imshow('Face Detected!', img)
        #  cv2.waitKey(0)
        #  cv2.destroyAllWindows()
         return img
    def video_detect(filename):
        cap = cv2.VideoCapture(filename)
        while cap.isOpened():
            if not cap:
                print('video is not input, error')
                break
            ret, frame = cap.read()
            if not ret:
                print('read is over')
                break
            out = StaticDetect(frame)
            cv2.imshow('video-face', out)
            k = cv2.waitKey(1000//60)
            if k == 27:
                break
        cap.release()
        cv2.destroyAllWindows()
    video_detect('./videos/face.mp4')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
  • 相关阅读:
    Node.js版本管理工具nvm安装
    一文搞懂cookie与session
    【Hbase】第二章——安装部署( 快速入门)
    25 - 单例模式:如何创建单一对象优化系统性能?
    mysql行锁,表锁,间隙锁
    含文档+PPT+源码等]精品基于Uniapp+SSM实现的移动端农副产品销售平台实现的App[包运行成功]计算机毕业设计安卓项目源码
    数据结构——图(图的存储及基本操作)
    NumPy简单学习(需要结合书本)
    java基于JSP+Servlet的员工绩效考核系统
    Java项目:SSM图书馆图书管理系统
  • 原文地址:https://blog.csdn.net/monk96/article/details/125615487