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

注意:本文引用自专业人工智能社区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下载…

笨办法:基于后端Matplotlib生成图片, 前端绘制报表

很久很久以前, 做过一个项目, 因为前端基础差, echarts捣鼓不来, 然后就折腾出来一套比较奇葩的技术方案, 就是前端需要什么图表, 后端先绘制好, 然后前端需要什么图表, 再从后端拉取后端之前响应的图片路径, 再去做渲染。 其实基于后端使用 Matplotlib 绘制图表,前端…

DangZero:通过直接页表访问的高效UAF检测(摘要及介绍及背景翻译)

先通过翻译过一遍文章&#xff0c;然后再对每个章节进行总结 摘要 Use-after-free vulnerabilities remain difficult to detect and mitigate, making them a popular source of exploitation. Existing solutions in- cur impractical performance/memory overhead, requir…

powershell界面中,dir命令的效果

常用参数 -path D:\111\111_2。读取指定路径。 -Name。只输出文件名 -Include *.txt。指定后缀的文件 -Recurse。搜索目录及其子目录。 -Force。显示具有 h 模式的隐藏文件。 >1dir.txt。将结果入指定文件 各参数使用效果 dir PS D:\111\111_2> dir 目录: D:\111…

初中孩子最近不愿意上学怎么办?有什么好方法可以解决?

这个年龄段属于叛逆期&#xff0c;这个时候孩子出现厌学问题很正常&#xff0c;家长应该多些耐心和时间&#xff0c;不要一味地责骂&#xff0c;会更加排斥和反感&#xff0c;叛逆的。可以跟孩子好好谈谈聊聊&#xff0c;学会倾听他的心声&#xff0c;愿意听你说话在教育和引导…

配置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…

10个常见的Java面试问题及其答案

问题&#xff1a; Java的主要特性是什么&#xff1f; 答案&#xff1a; Java的主要特性包括面向对象、平台无关、自动内存管理、安全性、多线程支持、丰富的API和强大的社区支持。 问题&#xff1a; 什么是Java的垃圾回收机制&#xff1f; 答案&#xff1a; Java的垃圾回收机…

【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类就可以了。有三个方法。分别是初始化、绘制、释放。 这里把官方源码的例子扒出来给大家看一下。源码在我以前发布的单组件里面。地址在前面的界面总结博文里面。 …

图数据库 之 Neo4j - 应用场景4 - 反洗钱(9)

原理 Neo4j图数据库可以用于构建和分析数据之间的关系。它使用节点和关系来表示数据,并提供实时查询能力。通过使用Neo4j,可以将大量的交易数据导入图数据库,并通过查询和分析图结构来发现洗钱行为中的模式和关联。 案例分析 假设有一家转账服务公司,有以下交易数据,每个…

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

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

突破编程_C++_设计模式(建造者模式)

1 建造者模式的概念 建造者模式&#xff08;Builder Pattern&#xff09;是一种创建型设计模式&#xff0c;也被称为生成器模式。它的核心思想是将一个复杂对象的构建与它的表示分离&#xff0c;使得同样的构建过程可以创建不同的表示。 在建造者模式中&#xff0c;通常包括以…

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;我们…

线索二叉树

线索二叉树即从前、中、后序三种遍历中其中一种来看&#xff0c;树中的左右孩子都不会是空着的&#xff0c;都会指向对应的前驱和后驱。 以中序遍历为例&#xff0c;二叉树线索化过程如下&#xff1a; 先是树的结构 typedef struct ThreadNode{Elemetype data;struct ThreadNo…

微服务面试题之套路一

面试题 一、你的项目是从SpringBoot演进到微服务架构的&#xff0c;你在此过程中有调研过哪些技术&#xff0c;怎么调研落地的? 微服务通信框架&#xff1a; 需要选择适合项目的微服务通信框架&#xff0c;如Dubbo、Spring Cloud或gRPC Feign RestTemplate 等。调研方式可以是…

高性能通信之Netty

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