用OpenCV进行年龄和性别检测的实现示例


Posted in Python onJanuary 29, 2021

本文主要介绍了用OpenCV进行年龄和性别检测的实现示例,分享给大家,具体如下:

用OpenCV进行年龄和性别检测的实现示例

在本文中,我将带您完成用 Python 进行机器学习的年龄和性别检测的任务。年龄和性别检测属于计算机视觉的范畴,因此我将在Python中使用OpenCV库。

在开始使用Python进行年龄和性别检测任务之前,我将首先带您了解该概念的含义以及如何处理年龄和性别检测问题。理解这个概念很重要,以便将来您不仅可以使用python,还可以使用任何编程语言轻松地执行年龄和性别检测任务。

年龄和性别检测简介

检测年龄和性别的任务是一个固有的难题,比许多其他计算机视觉任务更为困难。造成这种困难的主要原因在于训练这些类型的系统所需的数据。

尽管一般的对象检测任务通常可以访问成千上万甚至数百万张图像进行训练,但是带有年龄或性别标签的数据集却要小得多,通常只有几千个,或者最好是几万个。

原因是要为此类图像添加标签,我们需要访问图像中主题的个人信息。即,我们将需要他们的出生日期和性别,尤其出生日期是很难获取的信息。

因此必须解决这个问题的本质,我们正在用适应网络体系结构和算法方法来解决这些局限性。

用Python进行年龄和性别检测

按年龄和性别分类的领域已经研究了数十年。多年来,已经采取了各种方法来解决该问题,并且取得了不同程度的成功。现在,我们开始使用 Python 来检测年龄和性别。

我将把性别检测问题作为分类问题,将年龄检测问题作为回归问题。但是,使用回归准确估计年龄是困难的。甚至人类也无法通过注视一个人来准确预测年龄。但是,我们确实知道他们是30多岁还是40多岁。这也是我要使用Python进行的操作。

现在,让我们开始使用 Python 语言进行年龄和性别检测任务。首先,我将开始编写用于检测面部的代码,因为如果没有面部检测,我们将无法继续进行年龄和性别预测任务。

您可以从此处下载在年龄和性别检测任务中所需的必要的OpenCV预训练模型。现在,在您的python文件中导入OpenCV模块后,即可开始使用以下代码。

用于人脸检测的Python代码:

def getFaceBox(net, frame, conf_threshold=0.7):
    frameOpencvDnn = frame.copy()
    frameHeight = frameOpencvDnn.shape[0]
    frameWidth = frameOpencvDnn.shape[1]
    blob = cv.dnn.blobFromImage(frameOpencvDnn, 1.0, (300, 300), [104, 117, 123], True, False)
 
    net.setInput(blob)
    detections = net.forward()
    bboxes = []
    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)
            bboxes.append([x1, y1, x2, y2])
            cv.rectangle(frameOpencvDnn, (x1, y1), (x2, y2), (0, 255, 0), int(round(frameHeight/150)), 8)
    return frameOpencvDnn, bboxes

现在,下一步是预测图像中人的性别。在这里,我将把性别网络加载到内存中,并通过网络将检测到的面部发送给性别检测任务。

性别检测的Python代码:

genderProto = "gender_deploy.prototxt"
genderModel = "gender_net.caffemodel"
ageNet = cv.dnn.readNet(ageModel, ageProto)
 
genderList = ['Male', 'Female']
 
blob = cv.dnn.blobFromImage(face, 1, (227, 227), MODEL_MEAN_VALUES, swapRB=False)
genderNet.setInput(blob)
genderPreds = genderNet.forward()
gender = genderList[genderPreds[0].argmax()]
print("Gender Output : {}".format(genderPreds))
print("Gender : {}".format(gender))

现在的下一个任务是预测图像中人的年龄。在这里,我将使用前向传递来获取输出。由于网络架构类似于性别网络,因此我们可以充分利用所有输出,以获取预期的年龄组,来完成任务以检测年龄。

用于年龄检测的Python代码:

ageProto = "age_deploy.prototxt"
ageModel = "age_net.caffemodel"
ageNet = cv.dnn.readNet(ageModel, ageProto)
 
ageList = ['(0 - 2)', '(4 - 6)', '(8 - 12)', '(15 - 20)', '(25 - 32)', '(38 - 43)', '(48 - 53)', '(60 - 100)']
 
ageNet.setInput(blob)
agePreds = ageNet.forward()
age = ageList[agePreds[0].argmax()]
print("Gender Output : {}".format(agePreds))
print("Gender : {}".format(age))

我们需要编写的最后代码是显示输出:

label = "{}, {}".format(gender, age)
cv.putText(frameFace, label, (bbox[0], bbox[1]-20), cv.FONT_HERSHEY_SIMPLEX, 0.8, (255, 0, 0), 3, cv.LINE_AA)
cv.imshow("Age Gender Demo", frameFace)

因此,从输出中可以看到,我们能够高度准确地预测性别和年龄。

用OpenCV进行年龄和性别检测的实现示例

到此这篇关于用OpenCV进行年龄和性别检测的实现示例的文章就介绍到这了,更多相关OpenCV 年龄和性别检测内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python通过pil模块获得图片exif信息的方法
Mar 16 Python
Python 中Pickle库的使用详解
Feb 24 Python
python3+PyQt5使用数据库窗口视图
Apr 24 Python
linux下安装python3和对应的pip环境教程详解
Jul 01 Python
django中上传图片分页三级联动效果的实现代码
Aug 30 Python
Python实现在Windows平台修改文件属性
Mar 05 Python
pytorch使用horovod多gpu训练的实现
Sep 09 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
Feb 22 Python
详解Python中的进程和线程
Jun 23 Python
python中__slots__节约内存的具体做法
Jul 04 Python
一篇文章弄懂Python关键字、标识符和变量
Jul 15 Python
python基础之类方法和静态方法
Oct 24 Python
python使用numpy中的size()函数实例用法详解
Jan 29 #Python
Python机器学习工具scikit-learn的使用笔记
Jan 28 #Python
K近邻法(KNN)相关知识总结以及如何用python实现
Jan 28 #Python
Python3中对json格式数据的分析处理
Jan 28 #Python
Python实现微信表情包炸群功能
Jan 28 #Python
Python基于opencv的简单图像轮廓形状识别(全网最简单最少代码)
Jan 28 #Python
python如何构建mock接口服务
Jan 28 #Python
You might like
PHP 数组遍历顺序理解
2009/09/09 PHP
PHP 创建标签云函数代码
2010/05/26 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
PHP生成压缩文件实例
2015/02/07 PHP
php中json_encode不兼容JSON_UNESCAPED_UNICODE的解决方案
2016/05/31 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
Gambit vs CL BO3 第三场 2.13
2021/03/10 DOTA
如何实现动态删除javascript函数
2007/05/27 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
MooTools 页面滚动浮动层智能定位实现代码
2011/08/23 Javascript
js弹出层永远居中实现思路及代码
2013/11/29 Javascript
jQuery匹配文档链接并添加class的方法
2015/06/26 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
Angular 2父子组件数据传递之@Input和@Output详解 (上)
2017/07/05 Javascript
JS解决IOS中拍照图片预览旋转90度BUG的问题
2017/09/13 Javascript
vue 子组件向父组件传值方法
2018/02/26 Javascript
vue移动端轻量级的轮播组件实现代码
2018/07/12 Javascript
详解超简单的react服务器渲染(ssr)入坑指南
2019/02/28 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
vue中监听路由参数的变化及方法
2019/12/06 Javascript
js实现拖拽与碰撞检测
2020/09/18 Javascript
JavaScript实现下拉列表
2021/01/20 Javascript
python编程开发之textwrap文本样式处理技巧
2015/11/13 Python
transform python环境快速配置方法
2018/09/27 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
2018/10/11 Python
Keras loss函数剖析
2020/07/06 Python
浅谈优化Django ORM中的性能问题
2020/07/09 Python
matplotlib之属性组合包(cycler)的使用
2021/02/24 Python
详解Html5页面实现下载文件(apk、txt等)的三种方式
2018/10/22 HTML / CSS
Sephora丝芙兰澳洲官方网站:国际知名化妆品购物
2016/10/27 全球购物
伦敦最有品味的百货:Liberty London
2016/11/12 全球购物
英国DIY汽车维修配件网站:DIY Car Service Parts
2019/08/30 全球购物
司机的工作范围及职责
2013/11/13 职场文书
应聘编辑职位自荐信范文
2014/01/05 职场文书
大三学习计划书范文
2014/05/02 职场文书