性别和年龄的视频实时监测项目

注意:本文引用自专业人工智能社区Venus AI
更多AI知识请参考原站 ([www.aideeplearning.cn])

性别和年龄检测 Python 项目

首先介绍性别和年龄检测的高级Python项目中使用的专业术语

什么是计算机视觉?

计算机视觉是使计算机能够像人类一样查看和识别数字图像和视频的研究领域。它面临的挑战很大程度上源于对生物视觉的有限理解。计算机视觉涉及获取、处理、分析和理解数字图像,以从现实世界中提取高维数据,从而生成可用于做出决策的符号或数字信息。该过程通常包括对象识别、视频跟踪、运动估计和图像恢复等实践。

什么是 OpenCV?

OpenCV是开源计算机视觉的缩写。顾名思义,它是一个开源计算机视觉和机器学习库。该库能够处理实时图像和视频,同时还具有分析功能。它支持深度学习框架Tensorflow、Caffe 和 PyTorch。

什么是CNN?

CNN即卷积神经网络,是一种广泛用于图像识别和处理的深度神经网络 (DNN) 。它具有输入层和输出层以及多个隐藏层,其中许多是卷积层。在某种程度上,CNN 是正则化的多层感知器。

性别和年龄检测——目标

构建一个性别和年龄检测器,可以在 Adience 数据集上使用深度学习模型来大致猜测图片中人(脸部)的性别和年龄。

性别和年龄检测——关于该项目

在这个 Python 项目中,我们将使用深度学习从单张脸部图像中准确识别一个人的性别和年龄。我们将使用Tal Hassner 和 Gil Levi训练的模型。预测的性别可以是“男性”和“女性”之一,预测的年龄可以是以下范围之一 – (0 – 2)、(4 – 6)、(8 – 12)、(15 – 20) 、(25 – 32)、(38 – 43)、(48 – 53)、(60 – 100)(最终 softmax 层中的 8 个节点)。由于化妆、灯光、障碍物和面部表情等因素,很难从单张图像中准确猜测出确切的年龄。因此,我们将其视为分类问题,而不是回归问题。项目的结果展示动态图如下所示,请点击观看:

ev_20240225_131028

CNN 架构

这个 python 项目的卷积神经网络很简单,有 3 个卷积层:

  • 卷积层:96 个节点,卷积核大小 7
  • 卷积层:256 个节点,卷积核大小 5
  • 卷积层:384 个节点,卷积核大小 3

它有 2 个全连接层,每个层有 512 个节点,以及一个 softmax 类型的最终输出层。

要开始 python 项目,我们将:

  • 检测人脸
  • 分为男/女
  • 分为 8 个年龄范围之一
  • 将结果放在图像上并显示
数据集

对于这个 python 项目,我们将使用 Adience 数据集;该数据集可在公共领域使用,您可以在此处找到它。该数据集作为人脸照片的基准,包含各种现实世界的成像条件,如噪声、照明、姿势和外观。这些图像是从 Flickr 相册中收集的,并根据知识共享 (CC) 许可进行分发。它共有 26,580 张照片,涉及 8 个年龄段(如上所述)的 2,284 名拍摄对象,大小约为 1GB。我们将使用的模型已经在此数据集上进行了训练。

先决条件

您需要安装 OpenCV (cv2) 才能运行该项目。可以用 pip- 来做到这一点

​​​​​​pip install opencv-python

您需要的其他包是 math 和 argparse,它们是标准 Python 库的一部分。

项目的目录结构

项目的目录结构如下:

  • opencv_face_ detector.pbtxt
  • opencv_face_ detector_uint8.pb
  • Age_deploy.prototxt
  • Age_net.caffemodel
  • gander_deploy.prototxt
  • gander_net.caffemodel
  • main.py
  • 一示例的图片

关于上述文件类型的解释:

  • .pb文件:这是一个TensorFlow用于保存模型的文件格式。它包含了模型的结构(也就是神经网络的架构)和模型训练后的权重(即模型在训练过程中学到的信息)。使用这个文件,我们可以运行一个已经训练好的模型来进行面部检测。
  • .pbtxt文件:与.pb文件类似,但它以文本格式存储protobuf数据,而不是二进制格式。这使得文件内容可以直接阅读和编辑,但通常大小会更大。
  • TensorFlow文件:TensorFlow是一个流行的机器学习框架,用于创建和训练神经网络。.pb和.pbtxt文件都是TensorFlow用来保存模型的文件格式。
  • .prototxt文件:这些文件用于描述神经网络的结构,即网络中每一层应该如何构建。这对于构建用于年龄和性别识别的模型特别重要。
  • .caffemodel文件:这种文件格式是Caffe框架的一部分,另一个流行的机器学习框架。.caffemodel文件保存了训练后的模型参数,即网络每一层的权重和偏置。这对于运行已经训练好的年龄和性别识别模型至关重要。

注意:上述这些文件是博主将项目编译之后得到的结果,而不是原始项目代码。这些文件类型通常用于存储训练好的模型和它们的配置,而不是用于存储原始的源代码。原代码详见Github:https://github.com/eranid/adience_align/tree/master

main.py脚本详解:

导入库

  • import cv2: 导入 OpenCV 库,用于计算机视觉相关任务。
  • import math: 导入数学库,提供数学运算支持。
  • import argparse: 导入参数解析库,用于解析命令行参数。
import cv2
import math
import argparse

highlightFace 函数

  • 这个函数用于在图像中突出显示人脸。
  • frame: 要处理的图像。
  • conf_threshold: 用于确定检测是否有效的置信度阈值。
  • 函数首先创建图像的副本,然后根据图像的尺寸生成一个 blob(神经网络输入)。
  • 使用提供的神经网络 (net) 对 blob 进行前向传播,以检测图像中的人脸。
  • 检测到的每个人脸都被添加到 faceBoxes 列表中,并在图像上绘制矩形框以突出显示人脸。
  • 返回处理后的图像和检测到的人脸框列表。 
def highlightFace(net, frame, conf_threshold=0.7):frameOpencvDnn=frame.copy()frameHeight=frameOpencvDnn.shape[0]frameWidth=frameOpencvDnn.shape[1]blob=cv2.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)net.setInput(blob)detections=net.forward()faceBoxes=[]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)faceBoxes.append([x1,y1,x2,y2])cv2.rectangle(frameOpencvDnn, (x1,y1), (x2,y2), (0,255,0), int(round(frameHeight/150)), 8)return frameOpencvDnn,faceBoxes

解析命令行参数: 

  • 使用 argparse 库来解析命令行输入的参数。这里解析了 --image 参数,允许用户指定一个图像文件的路径。
  • 若不指定,默认使用摄像头采集当前画面进行实时检测。
parser=argparse.ArgumentParser()
parser.add_argument('--image')args=parser.parse_args()

加载模型
  • 指定了用于人脸检测、年龄和性别预测的模型文件的路径。
  • 使用 cv2.dnn.readNet 从这些路径加载对应的模型。
  • MODEL_MEAN_VALUES: 在预处理图像时用于归一化的均值。
  • ageList 和 genderList: 分别包含年龄范围和性别类别的列表。
faceProto="opencv_face_detector.pbtxt"
faceModel="opencv_face_detector_uint8.pb"
ageProto="age_deploy.prototxt"
ageModel="age_net.caffemodel"
genderProto="gender_deploy.prototxt"
genderModel="gender_net.caffemodel"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']faceNet=cv2.dnn.readNet(faceModel,faceProto)
ageNet=cv2.dnn.readNet(ageModel,ageProto)
genderNet=cv2.dnn.readNet(genderModel,genderProto)

处理视频流

  • 使用 cv2.VideoCapture 打开视频源(从文件或摄像头)。
  • 在一个循环中读取每一帧图像,并使用 highlightFace 函数检测人脸。
video=cv2.VideoCapture(args.image if args.image else 0)

性别和年龄预测
  • 对于检测到的每个人脸,截取人脸区域并为性别和年龄预测网络准备输入 blob。
  • 运行性别和年龄预测网络,并从 genderList 和 ageList 中获取预测结果。
  • 将预测结果(性别和年龄)打印出来,并在图像上绘制包含这些信息的文本。
  • 使用 cv2.imshow 显示带有预测结果的图像。
  • 循环持续进行,直到用户按键中断。
padding=20
while cv2.waitKey(1)<0:hasFrame,frame=video.read()if not hasFrame:cv2.waitKey()breakresultImg,faceBoxes=highlightFace(faceNet,frame)if not faceBoxes:print("No face detected")for faceBox in faceBoxes:face=frame[max(0,faceBox[1]-padding):min(faceBox[3]+padding,frame.shape[0]-1),max(0,faceBox[0]-padding):min(faceBox[2]+padding, frame.shape[1]-1)]blob=cv2.dnn.blobFromImage(face, 1.0, (227,227), MODEL_MEAN_VALUES, swapRB=False)genderNet.setInput(blob)genderPreds=genderNet.forward()gender=genderList[genderPreds[0].argmax()]print(f'Gender: {gender}')ageNet.setInput(blob)agePreds=ageNet.forward()age=ageList[agePreds[0].argmax()]print(f'Age: {age[1:-1]} years')cv2.putText(resultImg, f'{gender}, {age}', (faceBox[0], faceBox[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0,255,255), 2, cv2.LINE_AA)cv2.imshow("Detecting age and gender", resultImg)

性别和年龄检测的 Python 项目示例 

除了捕获摄像头画面进行检测外,脚本也支持在我们自己的一些图像上尝试这个性别和年龄分类器。

我们将进入命令提示符,使用图像选项运行脚本并指定要分类的图像:

输入:
pthon main.py --image girl2.jpg
输出:

 

资源:

在这个 python 项目中,我们实现了一个 CNN 来从单张脸部图片或视频流中检测性别和年龄。

项目代码压缩包和项目的数据集,请原站 ([www.aideeplearning.cn])

如果需要项目的原代码,请访问github:

GilLevi/AgeGenderDeepLearning on GitHub.

© 版权声明

文章版权归作者所有,未经允许,请勿转载,私自转载将严厉追究法律责任。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Camunda实现bpmn 2.0各种类型的任务

基于Camunda实现bpmn中各种类型任务 ​ Camunda Modeler -为流程设置器&#xff08;建模工具&#xff09;&#xff0c;用来构建我们的流程模型。Camunda Modeler流程绘图工具&#xff0c;支持三种协议类型流程文件分别为&#xff1a;BPMN、DMN、Form。 ​ Camunda Modeler下载…

配置MySQL与登录模块

使用技术 MySQL&#xff0c;Mybatis-plus&#xff0c;spring-security&#xff0c;jwt验证&#xff0c;vue 1. 配置Mysql 1.1 下载 MySQL :: Download MySQL Installer 1.2 安装 其他页面全选默认即可 1.3 配置环境变量 将C:\Program Files\MySQL\MySQL Server 8.0\bin…

【Spring Boot 源码学习】BootstrapRegistry 初始化器实现

《Spring Boot 源码学习系列》 BootstrapRegistry 初始化器实现 一、引言二、往期内容三、主要内容3.1 BootstrapRegistry3.2 BootstrapRegistryInitializer3.3 BootstrapRegistry 初始化器实现3.3.1 定义 DemoBootstrapper3.3.2 添加 DemoBootstrapper 四、总结 一、引言 前面…

Avalonia学习(二十八)-OpenGL

Avalonia已经继承了opengl&#xff0c;详细的大家可以自己查阅。Avalonia里面启用opengl继承OpenGlControlBase类就可以了。有三个方法。分别是初始化、绘制、释放。 这里把官方源码的例子扒出来给大家看一下。源码在我以前发布的单组件里面。地址在前面的界面总结博文里面。 …

YOLOv9有效改进|使用空间和通道重建卷积SCConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 SCConv是一种即插即用的空间和通道重建卷积。 RepNCSPELAN4是YOLOv9中的特征提取模块&#xff0c;类似YOLOv5和v8中的C2f与C3模块。 …

MySQL进阶:MySQL事务、并发事务问题及隔离级别

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习、 &#x1f30c;上期文章&#xff1a;MySQL进阶&#xff1a;视图&&存储过程&&存储函数&&触发器 &#x1f4da;订阅专栏&#xff1a;MySQL进…

Docker Machine windows系统下 安装

如果你是 Windows 平台&#xff0c;可以使用 Git BASH&#xff0c;并输入以下命令&#xff1a; basehttps://github.com/docker/machine/releases/download/v0.16.0 &&mkdir -p "$HOME/bin" &&curl -L $base/docker-machine-Windows-x86_64.exe >…

点燃技能火花:探索PyTorch学习网站,开启AI编程之旅!

介绍&#xff1a;PyTorch是一个开源的Python机器学习库&#xff0c;它基于Torch&#xff0c;专为深度学习和科学计算而设计&#xff0c;特别适合于自然语言处理等应用程序。以下是对PyTorch的详细介绍&#xff1a; 历史背景&#xff1a;PyTorch起源于Torch&#xff0c;一个用于…

【真机Bug】异步加载资源未完成访问单例导致资源创建失败

1.错误表现描述 抽卡时&#xff0c;10抽展示界面为A。抽取内容可能是整卡或者碎片&#xff0c;抽到整卡&#xff0c;会有立绘展示和点击详情的按钮。点击详情后出现详情页B。【此时界面A预制体被销毁&#xff0c;卡片数据进入数据缓存池】点击页面B的返回按钮&#xff0c;单例…

C++——模版

前言&#xff1a;哈喽小伙伴们好久不见&#xff0c;这是2024年的第一篇博文&#xff0c;我们将继续C的学习&#xff0c;今天这篇文章&#xff0c;我们来习一下——模版。 目录 一.什么是模版 二.模版分类 1.函数模版 2.类模板 总结 一.什么是模版 说起模版&#xff0c;我们…

高性能通信之Netty

一, 同步IO(BIO)模型的架构 一般针对性能不高的情况下可以使用. 二,异步IO(NIO)模型的架构 多路复用(epoll模型):

【LeetCode:124. 二叉树中的最大路径和 + 二叉树+递归】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

【力扣hot100】刷题笔记Day19

前言 回溯回溯回溯&#xff01;早上整理档案竟然用了桶排序&#xff0c;不愧是算法狂魔们 79. 单词搜索 - 力扣&#xff08;LeetCode&#xff09; DFS class Solution:def exist(self, board: List[List[str]], word: str) -> bool:m, n len(board), len(board[0])# used…

谈谈高并发系统的设计方法论

谈谈高并发系统的设计方法论 何为高并发系统&#xff1f;什么是并发&#xff08;Conurrent&#xff09;&#xff1f;什么是高并发&#xff08;Hight Concurrnet&#xff09;&#xff1f;高并发的衡量指标有哪些&#xff1f; 实现高并发系统的两大板块高并发系统应用程序侧的设计…

腾讯云学生服务器使用教程_申请腾讯云学生机详细流程

2024年腾讯云学生服务器优惠活动「云校园」&#xff0c;学生服务器优惠价格&#xff1a;轻量应用服务器2核2G学生价30元3个月、58元6个月、112元一年&#xff0c;轻量应用服务器4核8G配置191.1元3个月、352.8元6个月、646.8元一年&#xff0c;CVM云服务器2核4G配置842.4元一年&…

还在用Jenkins?快来试试这款简而轻的自动部署软件!

最近发现了一个比 Jenkins 使用更简单的项目构建和部署工具&#xff0c;完全可以满足个人以及一些小企业的需求&#xff0c;分享一下。 Jpom 是一款 Java 开发的简单轻量的低侵入式在线构建、自动部署、日常运维、项目监控软件。 日常开发中&#xff0c;Jpom 可以解决下面这些…

吴恩达机器学习全课程笔记第五篇

目录 前言 P80-P85 添加数据 迁移学习 机器学习项目的完整周期 公平、偏见与伦理 P86-P95 倾斜数据集的误差指标 决策树模型 测量纯度 选择拆分方式增益 使用分类特征的一种独热编码 连续的有价值特征 回归树 前言 这是吴恩达机器学习笔记的第五篇&#xff0c…

《2023跨境电商投诉大数据报告》发布|亚马逊 天猫国际 考拉海购 敦煌网 阿里巴巴

2023年&#xff0c;跨境电商API接口天猫国际、京东国际和抖音全球购以其强大的品牌影响力和市场占有率&#xff0c;稳坐行业前三的位置。同时&#xff0c;各大跨境电商平台消费纠纷问题层出不穷。依据国内知名网络消费纠纷调解平台“电诉宝”&#xff08;315.100EC.CN&#xff…

javaEE--后端环境变量配置

目录 pre 文件准备 最终运行成功结果 后端运行步骤 1.修改setenv文件 2.运行setenv&#xff0c;设置环境变量 3.查看jdk版本 4.修改mysql文件夹下的my文件 前端运行步骤 1.nodejs环境配置 2.查看node和npm版本 3.下载并运行npm 4.注册登录 pre 文件准备 最终运行…

VR转接器:破解虚拟与现实边界的革命性设备

VR转接器&#xff0c;这一革命性的设备&#xff0c;为虚拟现实体验带来了前所未有的自由度。它巧妙地连接了虚拟与现实&#xff0c;使得用户在享受VR眼镜带来的奇幻世界的同时&#xff0c;也能自由地在现实世界中活动。这一设计的诞生&#xff0c;不仅解决了VR眼镜续航的瓶颈问…