当前位置: 首页 > news >正文

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

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

© 版权声明

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

相关文章:

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

注意&#xff1a;本文引用自专业人工智能社区Venus AI 更多AI知识请参考原站 &#xff08;[www.aideeplearning.cn]&#xff09; 性别和年龄检测 Python 项目 首先介绍性别和年龄检测的高级Python项目中使用的专业术语 什么是计算机视觉&#xff1f; 计算机视觉是使计算机能…...

【Spring面试题】

目录 前言 1.Spring框架中的单例bean是线程安全的吗? 2.什么是AOP? 3.你们项目中有没有使用到AOP&#xff1f; 4.Spring中的事务是如何实现的&#xff1f; 5.Spring中事务失效的场景有哪些&#xff1f; 6.Spring的bean的生命周期。 7.Spring中的循环引用 8.构造方法…...

打车代驾小程序开发 醉酒不用怕一键找代驾

近年来&#xff0c;随着我国私家车市场的不断扩大&#xff0c;驾驶员的安全驾驶意识不断提高&#xff0c;以及交通法规对酒后驾驶的严格把握&#xff0c;代驾市场的潜力也在迸发。代驾小程序开发平台成为了代驾人不可或缺的线上接单平台。那么代驾小程序开发需要实现哪些功能呢…...

蓝桥集训之统计子矩阵

统计子矩阵 核心思想&#xff1a;矩阵前缀和 双指针 用i和j双指针 遍历所有子矩阵的列用s和t双指针 遍历所有子矩阵的行求其子矩阵的和 若>k 将s向下移动 矩阵和必定减小(元素个数减少)直到满足<k 因为列一定 行数即为方案数(从t行往上数到s行 共t-s1个区间[t,t][t-1,t]…...

架构师十项全能 你会几个?

架构设计导论 架构师核心能力 架构设计原则 架构设计模式 架构设计核心维度 架构图绘制 企业架构设计 分布式架构理论 微服务架构设计 响应式架构设计 架构设计评估 单元化架构设计 服务网络架构设计 DDD领域驱动设计 技术选型 服务治理设计 安全架构设计 云架构设计 数据库架构…...

数据库(mysql)-新手笔记(主外键,视图)

主外键 主键(唯一性,非空性) 主键是数据库表中的一个或多个字段&#xff0c;其值唯一标识表中的每一行/记录。 唯一性: 主键字段中的每个值都必须是唯一的&#xff0c;不能有两个或更多的记录具有相同的主键值 非空性&#xff1a;主键字段不能包含NULL值。 外键(引用完整 …...

西门子PLC的交互界面怎样设计?

西门子PLC的交互界面设计集中于提供一个直观、多功能且用户友好的环境&#xff0c;旨在使工程师和技术人员能够有效地进行编程、监控和维护。下面是一些设计西门子PLC交互界面时的关键考虑因素&#xff1a; 1. **图形化编程环境**&#xff1a;设计时&#xff0c;重点在于提供直…...

备份 ChatGPT 的聊天纪录

备份 ChatGPT 的聊天纪录 ChatGPT 在前阵子发生了不少次对话纪录消失的情况&#xff0c;让许多用户觉得困扰不已&#xff0c;也担心自己想留存的聊天记录消失不见。 好消息是&#xff0c;OpenAI 在 2023 年 4 月 11 日推出了 ChatGPT 聊天记录备份功能&#xff0c;无论是免费…...

支持向量机 SVM | 线性可分:软间隔模型

目录 一. 软间隔模型1. 松弛因子的解释小节 2. SVM软间隔模型总结 线性可分SVM中&#xff0c;若想找到分类的超平面&#xff0c;数据必须是线性可分的&#xff1b;但在实际情况中&#xff0c;线性数据集存在少量的异常点&#xff0c;导致SVM无法对数据集线性划分 也就是说&…...

基于Java的生活废品回收系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…...

Linux:好用的Linux指令

进程的Linux指令 1.查看进程信息 ​​​​ps ajx | head -1 && ps ajx | grep 进程名创建一个进程后输入上述代码&#xff0c;会打印进程信息&#xff0c;当我们在code.exe中写入打印pid&#xff0c;ppid&#xff0c;这里也和进程信息一致。 while :; do ps ajx | he…...

Python Tkinter GUI 基本概念

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd;如果停止&#xff0c;就是低谷&#xf…...

Python实习生(自动化测试脚本开发) - 面经 - TCL新技术有限公司

JD&#xff1a; 招聘流程&#xff1a; 2024.1.3 Boss直聘 沟通 2024.1.4 约面 2024.1.6 上午面试 面试流程&#xff1a; 上来第一步&#xff0c;直接问Python基础语法&#xff0c;讲一下基础的数据类型 就记得元组和字典 分别具体说一下元组和字典 流程控制语句有哪些&…...

遥遥领先!基于transformer变体的时间序列预测新SOTA!

目前&#xff0c;以CNN、RNN和 Transformer 模型为代表的深度学习算法已经超越了传统机器学习算法&#xff0c;成为了时间序列预测领域一个新的研究趋向。这其中&#xff0c;基于Transformer架构的模型在时间序列预测中取得了丰硕的成果。 Transformer模型因其强大的序列建模能…...

Java实现从本地读取CSV文件数据

一、前言 最近项目中需要实现这样一个功能&#xff0c;就是从本地读取CSV文件&#xff0c;并以指定行作为标题行&#xff0c;指定行开始作为数据读取行&#xff0c;读取数据并返回给前端&#xff0c;下面具体说下是如何通过java实现。 二、如何实现&#xff1f; 1.引入相关mav…...

数据结构(一)——概述

一、绪论 1.1数据结构的基本概念 数据&#xff1a;用来描述客观事物的数、计算机中是字符及所有能输入并被程序识别和处理的符号的集合。 数据元素&#xff1a;数据的基本单位&#xff0c;一个数据元素可由若干数据项组成。 数据结构&#xff1a;指相互之间存在一种或多种特…...

昇腾芯片解析:华为自主研发的人工智能处理器全面分析

在当今科技发展的浪潮中&#xff0c;昇腾芯片作为一种新兴的处理器&#xff0c;正引起广泛的关注和讨论。升腾芯片究竟是由哪家公司生产的&#xff1f;这个问题一直困扰着许多人。下面小编将全面介绍、分析升腾芯片的生产商及各类参数、应用&#xff0c;以便读者对其有更全面的…...

新手做抖音小店怎么快速出体验分?教给大家一个方法!

大家好&#xff0c;我是电商糖果 新店怎么出体验分&#xff1f; 这是不是很多新店商家最苦恼事情&#xff1f; 因为没有体验分的店铺&#xff0c;平台不会给推流&#xff0c;开了精选联盟也没有办法带货。 总之就是运营的时候&#xff0c;比较受限。 那么抖音小店怎么快速出…...

Apollo决策规划 - EM planner

旨在对b站老王所讲的百度Apollo - EM planner算法做浓缩版总结 0 决策规划背景 基于图搜索 优点&#xff1a; 可以得到全局层面最优解&#xff0c;适用于比较低维数的规划问题 缺点&#xff1a; 规划问题维数较高时&#xff0c;面临指数爆炸问题 基于采样 优点&#xff1a;…...

Qt: 事件过滤器的更多用法

不懂事件循环怎么回事的可以看下面的文章 Qt事件循环完整流程 常规使用 定义一个窗口MainWindow &#xff0c;之后在窗口里添加一个事件过滤函数eventFilter&#xff0c;将窗口的某一个或一些字控件安装上事件过滤器。 这种情况下MainWindow 就是pushButton11的时间过滤器&am…...

2026年OPPO迎来“大年”:影像、折叠屏、IoT等多领域突破,高端化版图持续扩张

2026年4月21日&#xff0c;OPPO在成都举办新品发布会&#xff0c;发布Find X9s Pro和Find X9 Ultra。这一年OPPO在多个领域取得重大进展&#xff0c;迎来发展“大年”。旗舰影像&#xff1a;定义下一代移动影像移动影像是OPPO长期投入的领域&#xff0c;2026年收获颇丰。Find X…...

从一次‘网络丢包’故障说起:拆解IPv4的TTL、分片和校验和字段如何影响你的网络体验

从一次‘网络丢包’故障说起&#xff1a;拆解IPv4的TTL、分片和校验和字段如何影响你的网络体验 那天下午&#xff0c;运维团队的告警系统突然亮起红灯——电商平台的支付接口响应成功率从99.9%骤降到85%。用户投诉像雪片般飞来&#xff1a;"页面加载到一半就卡住"、…...

3个实用场景告诉你为什么需要UserAgent-Switcher浏览器扩展

3个实用场景告诉你为什么需要UserAgent-Switcher浏览器扩展 【免费下载链接】UserAgent-Switcher A User-Agent spoofer browser extension that is highly configurable 项目地址: https://gitcode.com/gh_mirrors/us/UserAgent-Switcher 你是否曾经遇到过网站检测到你…...

别再死磕Chrome了!用Python的browser_cookie3库读取Cookie,试试Edge和Firefox更省心

突破Chrome束缚&#xff1a;用Python多浏览器Cookie管理实战指南 浏览器Cookie管理的困境与破局 在自动化测试、数据爬取和网页交互脚本开发中&#xff0c;浏览器Cookie的读取一直是关键环节。许多开发者习惯性地将Chrome作为默认选择&#xff0c;却常常陷入版本兼容、文件锁定…...

MBD_工具箱实战指南_02_从Simulink到AUTOSAR的嵌入式开发工具箱链

1. 从Simulink到AUTOSAR的工具箱链全景图 第一次接触MBD开发时&#xff0c;我被各种工具箱搞得晕头转向——Simulink画模型、Embedded Coder生成代码、AUTOSAR Components配置接口&#xff0c;每个工具单独用都能跑通&#xff0c;但连起来就各种报错。后来在量产项目中踩了无数…...

ENOVIA许可证“心跳”与“会话”机制解析及超时分点

你是不单是也撞见过的情况&#xff1a;项目上线前&#xff0c;系统又报许可不足&#xff0c;可IT查了查&#xff0c;许可数量明明很大&#xff0c;根本不够用&#xff1f;可蹊跷的是&#xff0c;平时没人用的许可&#xff0c;怎地也还未办法回收&#xff1f;这看似是技术问题&a…...

免费3D重建神器Meshroom完全指南:从照片到专业模型的终极教程

免费3D重建神器Meshroom完全指南&#xff1a;从照片到专业模型的终极教程 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 你是否梦想过将手机拍摄的普通照片变成逼真的3D模型&#xff1f;现在…...

手把手教你用CANoe/CANalyzer模拟UDS诊断服务(ISO 14229实战)

实战指南&#xff1a;用CANoe/CANalyzer构建UDS诊断仿真环境 在汽车电子开发领域&#xff0c;诊断功能验证是确保ECU可靠性的关键环节。想象一下&#xff0c;当你面对一个全新的ECU模块&#xff0c;需要快速验证其诊断协议合规性&#xff0c;却苦于没有实车环境或待测硬件尚未就…...

计算机毕业设计:Python农产品销售智能分析与可视化系统 Flask框架 数据分析 可视化 机器学习 数据挖掘 大数据 大模型(建议收藏)✅

博主介绍&#xff1a;✌全网粉丝10W,前互联网大厂软件研发、集结硕博英豪成立工作室。专注于计算机相关专业项目实战6年之久&#xff0c;选择我们就是选择放心、选择安心毕业✌ > &#x1f345;想要获取完整文章或者源码&#xff0c;或者代做&#xff0c;拉到文章底部即可与…...

用Arduino搞定维特JY61P姿态传感器:从串口数据解析到欧拉角获取(附完整代码)

Arduino实战&#xff1a;JY61P姿态传感器数据解析与欧拉角计算全指南 刚拿到JY61P姿态传感器时&#xff0c;最让人头疼的就是如何从那一串串十六进制数据中提取出可用的姿态信息。作为一款性价比极高的六轴传感器模块&#xff0c;JY61P集成了三轴加速度计和三轴陀螺仪&#xff…...