用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 除法小技巧
Sep 06 Python
Python实现的摇骰子猜大小功能小游戏示例
Dec 18 Python
python实现linux下抓包并存库功能
Jul 18 Python
django项目搭建与Session使用详解
Oct 10 Python
浅谈Python脚本开头及导包注释自动添加方法
Oct 27 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
解决django的template中如果无法引用MEDIA_URL问题
Apr 07 Python
Django中文件上传和文件访问微项目的方法
Apr 27 Python
Python调用OpenCV实现图像平滑代码实例
Jun 19 Python
Python爬虫抓取指定网页图片代码实例
Jul 24 Python
python 决策树算法的实现
Oct 09 Python
golang中的空接口使用详解
Mar 30 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获取表单所有复选框的值的方法
2014/08/28 PHP
PHP闭包函数详解
2016/02/13 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
laravel框架邮箱认证实现方法详解
2019/11/22 PHP
javascript下string.format函数补充
2010/08/24 Javascript
JS实现网页上随滚动条滚动的层效果代码
2015/11/04 Javascript
JS把内容动态插入到DIV的实现方法
2016/07/19 Javascript
使用bootstrapValidator插件进行动态添加表单元素并校验
2016/09/28 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
jQuery源码分析之init的详细介绍
2017/02/13 Javascript
JS判断两个对象内容是否相等的方法示例
2017/04/10 Javascript
js实现京东轮播图效果
2017/06/30 Javascript
vuejs使用FormData实现ajax上传图片文件
2017/08/08 Javascript
nodejs读取并去重excel文件
2018/04/22 NodeJs
vue项目中添加单元测试的方法
2018/07/21 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
2018/11/26 Javascript
nodejs实现获取本地文件夹下图片信息功能示例
2019/06/22 NodeJs
解决layui的使用以及针对select、radio等表单组件不显示的问题
2019/09/05 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
js实现随机点名器精简版
2020/06/29 Javascript
[00:32]2018DOTA2亚洲邀请赛VGJ.T出场
2018/04/03 DOTA
[05:20]2018DOTA2亚洲邀请赛主赛事第三日战况回顾 LGD率先挺进胜者组决赛
2018/04/06 DOTA
[38:54]完美世界DOTA2联赛PWL S2 Rebirth vs LBZS 第一场 11.28
2020/12/01 DOTA
Python random模块(获取随机数)常用方法和使用例子
2014/05/13 Python
Python中使用item()方法遍历字典的例子
2014/08/26 Python
Django多层嵌套ManyToMany字段ORM操作详解
2020/05/19 Python
python开发入门——set的使用
2020/09/03 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
微信小程序“圣诞帽”的实现思路详解
2017/12/28 HTML / CSS
银行开业庆典方案
2014/02/06 职场文书
爱国主义演讲稿
2014/05/07 职场文书
淘宝客服工作职责
2014/07/11 职场文书
企业领导班子四风对照检查材料
2014/09/27 职场文书
党的群众路线教育实践活动自我剖析材料
2014/10/08 职场文书
公司行政主管岗位职责
2015/04/09 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android