【python】OpenCV—Age and Gender Classification

在这里插入图片描述

文章目录

  • 1、任务描述
  • 2、网络结构
    • 2.1 人脸检测
    • 2.2 性别分类
    • 2.3 年龄分类
  • 3、代码实现
  • 4、结果展示
  • 5、参考

1、任务描述

性别分类和年龄分类预测

2、网络结构

2.1 人脸检测

在这里插入图片描述

在这里插入图片描述

输出最高的 200 个 RoI,每个 RoI 7 个值,(xx,xx,score,x0,y0,x1,y1)

2.2 性别分类

二分类

在这里插入图片描述

在这里插入图片描述

2.3 年龄分类

按年龄区间分类 ageList = ['(0-2)', '(4-6)', '(8-12)', '(15-20)', '(25-32)', '(38-43)', '(48-53)', '(60-100)']

在这里插入图片描述

在这里插入图片描述

3、代码实现

先检测人脸,人脸外扩,再性别检测,再年龄检测,最后结果绘制输出

# Import required modules
import cv2 as cv
import math
import time
import argparsedef getFaceBox(net, frame, conf_threshold=0.7):frameOpencvDnn = frame.copy()frameHeight = frameOpencvDnn.shape[0]  # 333frameWidth = frameOpencvDnn.shape[1]  # 500blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)net.setInput(blob)detections = net.forward()  # (1, 1, 200, 7), (xxx, xxx, confidence, x0, y0, x1, y1)bboxes = []for i in range(detections.shape[2]):  # 遍历 top 200 RoIconfidence = 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, bboxesparser = argparse.ArgumentParser(description='Use this script to run age and gender recognition using OpenCV.')
parser.add_argument('--input', help='Path to input image or video file. ''Skip this argument to capture frames from a camera.',default="jolie.jpg")
parser.add_argument("--device", default="cpu", help="Device to inference on")args = parser.parse_args()args = parser.parse_args()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']# Load network
ageNet = cv.dnn.readNet(ageModel, ageProto)
genderNet = cv.dnn.readNet(genderModel, genderProto)
faceNet = cv.dnn.readNet(faceModel, faceProto)if args.device == "cpu":ageNet.setPreferableBackend(cv.dnn.DNN_TARGET_CPU)genderNet.setPreferableBackend(cv.dnn.DNN_TARGET_CPU)faceNet.setPreferableBackend(cv.dnn.DNN_TARGET_CPU)print("Using CPU device")elif args.device == "gpu":ageNet.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)ageNet.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)genderNet.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)genderNet.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)genderNet.setPreferableBackend(cv.dnn.DNN_BACKEND_CUDA)genderNet.setPreferableTarget(cv.dnn.DNN_TARGET_CUDA)print("Using GPU device")# Open a video file or an image file or a camera stream
cap = cv.VideoCapture(args.input if args.input else 0)
padding = 20
while cv.waitKey(1) < 0:# Read framet = time.time()hasFrame, frame = cap.read()if not hasFrame:cv.waitKey()breakframeFace, bboxes = getFaceBox(faceNet, frame)  # (333, 500, 3), 4 bboxif not bboxes:print("No face Detected, Checking next frame")continuefor bbox in bboxes:  # 遍历检测出来的人脸# print(bbox)face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame.shape[0]-1),max(0,bbox[0]-padding):min(bbox[2]+padding, frame.shape[1]-1)] # 人脸外扩blob = cv.dnn.blobFromImage(face, 1.0, (227, 227), MODEL_MEAN_VALUES, swapRB=False)genderNet.setInput(blob)genderPreds = genderNet.forward()gender = genderList[genderPreds[0].argmax()]# array([[9.9999559e-01, 4.4012304e-06]], dtype=float32), 'Male'# print("Gender Output : {}".format(genderPreds))print("Gender : {}, conf = {:.3f}".format(gender, genderPreds[0].max()))ageNet.setInput(blob)agePreds = ageNet.forward()"""array([[5.3957672e-05, 5.3967893e-02, 9.4579268e-01, 1.0875276e-04, 5.0436443e-05, 1.2142612e-05, 1.0151542e-05, 3.9845672e-06]],dtype=float32)"""age = ageList[agePreds[0].argmax()]  # '(8-12)'# print("Age Output : {}".format(agePreds))# print("Age : {}, conf = {:.3f}".format(age, agePreds[0].max()))label = "{},{}".format(gender, age)  # Out[15]: 'Male,(8-12)'cv.putText(frameFace, label, (bbox[0], bbox[1]-5), cv.FONT_HERSHEY_SIMPLEX,0.6, (0, 0, 255), 2, cv.LINE_AA)# cv.imshow("Age Gender Demo", frameFace)cv.imwrite("age-gender-out-{}".format(args.input), frameFace)print("time : {:.3f}".format(time.time() - t))

4、结果展示

输入图片

在这里插入图片描述

人脸检测结果

在这里插入图片描述

人脸外扩

在这里插入图片描述

输出结果

在这里插入图片描述

性别还是比较准的

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

输入图片

在这里插入图片描述

输出结果

在这里插入图片描述

5、参考

OpenCV进阶(8)性别和年龄识别

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

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

相关文章

chapter14-集合——(List-HashSet)——day18

目录 519-HashSet全面说明 520-数组链表模拟 521-HashSet扩容机制 重要 522-HashSet源码解读1 526-HashSet最佳实践 527-hashSet思考题 519-HashSet全面说明 题一、 两个tom都可以添加成功是因为这是两个对象 看源码做分析&#xff1a;不是直接指向常量池的吗&#xff1f;…

【Python篇】matplotlib超详细教程-由入门到精通(下篇)

文章目录 前言第六部分&#xff1a;保存与导出图表6.1 保存为图片文件示例&#xff1a;保存图表为 PNG 文件解释&#xff1a;关键点&#xff1a; 6.2 保存为高分辨率图片示例&#xff1a;保存为高分辨率图片解释&#xff1a; 6.3 保存为不同文件格式示例&#xff1a;保存为不同…

程序员问题社区

CSDN有问必答 – 程序员问题社区 ★★★★★ 点击我进入程序员问题社区 ★★★★★

OrionX GPU算力池助力AI OCR场景应用

01 AI OCR的历史及概念 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件&#xff0c;通过检测暗、亮的模式确定其形状&#xff0c;然后用字符识别方法将形状翻译成计算机文…

ARM 工业计算机搭载 FUXA 组态软件:开启智能制造新时代

工业自动化已经成为提高生产效率、保证产品质量以及提升企业竞争力的关键因素。而在工业自动化的舞台上&#xff0c;FUXA 组态软件与 ARM 工业计算机的组合正发挥着越来越重要的作用&#xff0c;以其高效稳定、数据可视化、实时监控等优势&#xff0c;在复杂场景应用中展现出卓…

JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级

这里写目录标题 JavaScript高级第03天1.函数的定义和调用1.1函数的定义方式1.2函数的调用 2.this2.1函数内部的this指向2.2改变函数内部 this 指向2.2.1 call方法2.2.2 apply方法2.2.3 bind方法2.2.4 call、apply、bind三者的异同 3.严格模式3.1什么是严格模式3.2开启严格模式3…

opencv图像透视处理

引言 在图像处理与计算机视觉领域&#xff0c;透视变换&#xff08;Perspective Transformation&#xff09;是一种重要的图像校正技术&#xff0c;它允许我们根据图像中已知的四个点&#xff08;通常是矩形的四个角&#xff09;和目标位置的四个点&#xff0c;将图像从一个视…

【鸿蒙开发从0到1 day09】

鸿蒙开发基础-ArkUI基本布局 一 .设计资源-图标库1.阿里矢量图图标库2.HarmonyOS图标库 二.布局属性1.内边距2.外边距3.边框线4.边框圆角 三.背景属性1.背景颜色2.背景图片(1)背景图的缩放(2)背景图的显示位置 四.颜色渐变1.线性渐变2.径向渐变 五.阴影六.可选择链操作符(?)七…

如何更改磁盘卷标名称?

磁盘卷标&#xff08;Volume Label&#xff09;是用来标识和管理磁盘驱动器的名称&#xff0c;通常在文件资源管理器中显示。卷标有助于用户快速识别和区分不同的磁盘或分区。 为什么要更改磁盘卷标名称&#xff1f; 磁盘卷标作为磁盘的名字&#xff0c;可以帮助用户更容易地识…

通过C# 裁剪PDF页面

在处理PDF文档时&#xff0c;有时需要精确地裁剪页面以适应特定需求&#xff0c;比如去除广告、背景信息或者仅仅是为了简化文档内容。 本文将指导如何使用免费.NET控件通过C#实现裁剪PDF页面。 免费库 Free Spire.PDF for .NET 支持在 .NET (C#, VB.NET, ASP.NET, .NET Core)…

【特点】浅谈大模型的特点

在人工智能(AI)的发展历程中&#xff0c;大模型无疑是一个重要的里程碑。大模型是指利用海量数据&#xff0c;通过先进的算法和技术&#xff0c;训练得到的具有强大预测和决策能力的模型&#xff0c;这类模型具备了强大的语言理解和生成能力&#xff0c;能够完成各种复杂的自然…

搬运5款冷门但值得下载的PC软件

​ 分享5款冷门但值得下载的Windows软件&#xff0c;个个都很实用&#xff0c;你可能一个都没见过&#xff0c;但是我觉得你用过之后可能就再也离不开了。 1. 图片管理——Picasa ​ Picasa 是一款由谷歌开发的图片管理和编辑软件&#xff0c;能够帮助用户轻松地组织、编辑和…

电子邮件加密软件哪个好用?分享这五款加密工具,防范邮件泄密!2024企业必备!

"密语藏锋刃&#xff0c;安全重于山。" 在数字洪流中&#xff0c;电子邮件是企业沟通的重要桥梁&#xff0c;其安全性不容忽视。 因此&#xff0c;选择一款高效可靠的电子邮件加密软件&#xff0c;是企业保障信息安全的关键。 本文将为您推荐五款2024年企业必备的电…

基于SpringBoot+Vue+MySQL的垃圾分类回收管理系统

系统展示 用户前台界面 管理员后台界面 系统背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的…

Uniapp + Vite + Vue3 + uView + Pinia 实现自定义底部 Tabbar(最新保姆级教程)

Uniapp Vite Vue3 uView Pinia 实现自定义底部 Tabbar&#xff08;最新保姆级教程&#xff09; 1、效果展示2、环境准备2.1 新建 uniapp 项目2.2. 安装 uView2.3 安装 pinia 3. 配置环境4. 创建目录结构5、编写 pages.json 页面路由6、编写 tabbar.js 状态数据7、编写 tabb…

软件测试之压力测试

&#x1f345; 点击文末小卡片&#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 压力测试 压力测试是一种软件测试&#xff0c;用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…

日本IT工作内容---一篇梗概

日本IT工作现场是一个充满活力、技术导向且多元化的工作环境。以下是对日本IT工作内容的详细概述&#xff1a; 1. 软件开发&#xff08;Software Engineering, SE&#xff09; 主要任务&#xff1a;编写、测试和维护软件&#xff0c;以满足客户需求。这包括使用多种编程语言和…

HCIP--<OSPF2>

目录 一&#xff0c;OSPF的不规则区域 1&#xff09;远离骨干区域的非骨干区域 2&#xff09;不连续骨干区域(和上面一样) 二&#xff0c;OSPF数据库表 三。优化OSPF的LSA&#xff08;缺少LSA的更新量&#xff09; [1]手工汇总&#xff1a;减少骨干区域的LSA [2]特殊区域&…

编程新纪元:AI如何成为你的编程伙伴

随着人工智能技术的不断进步&#xff0c;我们正步入一个编程的新纪元。在这个时代&#xff0c;AI不仅仅是一个工具&#xff0c;更是程序员的伙伴。它通过提供智能辅助、自动化编码和增强开发效率&#xff0c;正在改变我们编写和理解代码的方式。本文将探讨AI如何成为程序员的得…

【关爱多系统萎缩患者】必知!这些维生素是健康守护神

亲爱的朋友们&#xff0c;今天我们来聊聊一个需要更多社会关爱与理解的群体——多系统萎缩&#xff08;MSA&#xff09;患者。面对这一复杂而罕见的疾病&#xff0c;科学合理的饮食调整&#xff0c;尤其是维生素的补充&#xff0c;显得尤为重要。让我们一起成为他们健康路上的温…