当前位置: 首页 > 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…...

解决:ModuleNotFoundError: No module named ‘paddle‘

错误显示&#xff1a; 原因&#xff1a; 环境中没有‘paddle’的python模块&#xff0c;但是您在尝试导入 解决方法&#xff1a; 1.普通方式安装&#xff1a; pip install paddlepaddle #安装命令 2.镜像源安装 pip install paddlepaddle -i https://pypi.tuna.tsinghua.e…...

上海雷卯可以解决YPbPr/ YCbCr接口 ESD/EOS静电浪涌问题

YPbPr /YCbCr 接口传输的是视频信号&#xff0c;不传输音频信号。YPbPr 和 YCbCr 都是视频信号的颜色编码格式&#xff0c;多应用于机顶盒&#xff08;Set-top box&#xff09;,TV电视&#xff0c;投影仪&#xff0c;游戏机和DVD播放器。 YPbPr&#xff1a;是一种模拟视频接口…...

【FPGA/IC】CRC电路的Verilog实现

前言 在通信过程中由于存在各种各样的干扰因素&#xff0c;可能会导致发送的信息与接收的信息不一致&#xff0c;比如发送数据为 1010_1010&#xff0c;传输过程中由于某些干扰&#xff0c;导致接收方接收的数据却成了0110_1010。为了保证数据传输的正确性&#xff0c;工程师们…...

go语言添加代理

LiteIDE 工具->管理 https://mirrors.aliyun.com/goproxy/或https://goproxy.cn,direct 命令行 go env -w GOPROXYhttps://goproxy.cn,direct...

kafka 可视化工具

kafka可视化工具 随着科技发展&#xff0c;中间件也百花齐放。平时我们用的redis&#xff0c;我就会通过redisInsight-v2 来查询数据&#xff0c;mysql就会使用goland-ide插件来查询&#xff0c;都挺方便。但是kafka可视化工具就找了半天&#xff0c;最后还是觉得redpandadata…...

安康杯安全知识竞赛上的讲话稿

各位领导、同志们&#xff1a; 经过近半个月时间的准备&#xff0c;南五十家子镇平泉首届安康杯安全生产知识竞赛初赛在今天圆满落下帏幕&#xff0c;经过紧张激烈的角逐&#xff0c; 代表队、 代表队和 代表队分别获得本次竞赛的第一、二、三名让我们以热烈的掌声表示祝…...

python 基础知识点(蓝桥杯python科目个人复习计划59)

今日复习内容&#xff1a;做题 例题1&#xff1a;建造房屋 问题描述&#xff1a; 小蓝和小桥是两位年轻的建筑师&#xff0c;他们正在设计一座新的城市。 在这个城市中&#xff0c;有N条街道&#xff0c;每条街道上有M个位置可以建造房屋&#xff08;一个位置只能建造一个房…...

LCR 179. 查找总价格为目标值的两个商品 - 力扣

1. 题目 购物车内的商品价格按照升序记录于数组 price。请在购物车中找到两个商品的价格总和刚好是 target。若存在多种情况&#xff0c;返回任一结果即可。 2. 示例 3. 分析 题目有说明为递增数组&#xff0c;所以可以利用单调性双指针解决。跟611. 有效的三角形个数为一类题…...

《汇编语言》- 读书笔记 - 第16章-直接定址表

《汇编语言》- 读书笔记 - 第16章-直接定址表 16.1 描述了单元长度的标号&#xff08;数据标号&#xff09;检测点 16.1 16.2 在其他段中使用数据标号assume通过标号取地址检测点 16.2 16.3 直接定址表&#xff08;Direct Addressing Table&#xff09;例1分析代码效果 例2分析…...

ChatGPT 新增朗读功能,支持 37 种语言

3 月 5 日消息&#xff0c;OpenAI 为其广受欢迎的聊天机器人 ChatGPT 推出了名为「朗读」(Read Aloud) 的新功能。该功能可以让 ChatGPT 用五种不同的声音朗读其回复&#xff0c;旨在为用户提供更加便捷的交互体验。目前&#xff0c;「朗读」功能已上线 ChatGPT 的网页端、iOS …...