• python、pyqt5实现人脸检测、性别和年龄预测


    在这里插入图片描述
    摘要:这篇博文介绍基于opencv:DNN模块自带的残差网络的人脸、性别、年龄识别系统,系统程序由OpenCv, PyQt5的库实现。如图系统可通过摄像头获取实时画面并识别其中的人脸表情,也可以通过读取图片识别,本文提供完整的程序文件并详细介绍其实现过程。博文要点如下:

    关于相关的网络模型部分

    汇总 | OpenCV DNN模块中支持的分类网络

    1. 前言

    在这个人工智能成为超级大热门的时代,人脸识别已成为其中的一项研究热点,而卷积神经网络、深度信念网络和多层感知器等相关算法在人脸面识别领域的运用最为广泛。

    当前深度学习发展迅速,关于表情识别IEEE上面有许多质量很高的文章,里面介绍的是利用深度神经网络实现的面部表情识别,可以学习和参考。于是自己动手做了这个项目,这里特此将前期工作作个总结,希望能给类似工作的朋友带来一点帮助。这里使用的是已有的模型——如今CNN的主流框架之opencv的的残差网络

    二、实现步骤

    1.预先加载三个网络模型

    2.对于识别部分实现

    图片识别
    [ ] 读取图片并显示到pyqt页面当中
    [ ] 将图片传入到网络模型中
    [ ] 将模型中识别后的结果返回到页面并显示
    视频识别
    [ ] 打开摄像头流/加载图像
    [ ] 对每一帧图片进行传送到模型中
    [ ] 返回识别后的视频,显示在pyqt当中
    保存图片
    [ ] 将当前视频帧保存在文件目录下

    1、加载模型

    MODEL_MEAN_VALUES = (78.4263377603, 87.7689143744, 114.895847746)
    ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']
    genderList = ['Male', 'Female']
    
    # Load network
    ageNet = cv.dnn.readNet(ageModel, ageProto)
    genderNet = cv.dnn.readNet(genderModel, genderProto)
    faceNet = cv.dnn.readNet(faceModel, faceProto)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、人脸检测

    def getFaceBox(net, frame, conf_threshold=0.7):
        frameOpencvDnn = frame.copy()
        frameHeight = frameOpencvDnn.shape[0]
        frameWidth = frameOpencvDnn.shape[1]
        blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)
    
        net.setInput(blob)
        detections = net.forward()
        bboxes = []
        for i in range(detections.shape[2]):
            confidence = detections[0, 0, i, 2]
            if confidence > conf_threshold:
                x1 = int(detections[0, 0, i, 3] * frameWidth)
                y1 = int(detections[0, 0, i, 4] * frameHeight)
                x2 = int(detections[0, 0, i, 5] * frameWidth)
                y2 = int(detections[0, 0, i, 6] * frameHeight)
                bboxes.append([x1, y1, x2, y2])
                cv.rectangle(frameOpencvDnn, (x1, y1), (x2, y2), (0, 255, 0), int(round(frameHeight / 150)), 8)
        return frameOpencvDnn, bboxes
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    在这里插入图片描述
    源码

  • 相关阅读:
    Postman核心功能解析-参数化和测试报告
    10_那些格调很高的个性签名
    ndk-build
    用DIV+CSS技术设计的美食主题网站(web前端网页制作课作业)美食餐饮网站设计与实现(HTML+CSS+JavaScript)
    数据结构——图
    LeetCode-1668. 最大重复子字符串【字符串匹配】
    AI:154-利用机器学习进行电力系统故障检测与预测
    Kubecost - Kubernetes 开支监控和管理
    分支和循环语句
    中国象棋开源人工智能程序(带UI)搬运
  • 原文地址:https://blog.csdn.net/qq_40127080/article/details/131035652