用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 相关文章推荐
pycharm 使用心得(六)进行简单的数据库管理
Jun 06 Python
python实现从一组颜色中找出与给定颜色最接近颜色的方法
Mar 19 Python
Python快速从注释生成文档的方法
Dec 26 Python
Python随机生成均匀分布在单位圆内的点代码示例
Nov 13 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
Aug 09 Python
用python3 urllib破解有道翻译反爬虫机制详解
Aug 14 Python
Python生成词云的实现代码
Jan 14 Python
python小程序基于Jupyter实现天气查询的方法
Mar 27 Python
使用python计算三角形的斜边例子
Apr 15 Python
离线状态下在jupyter notebook中使用plotly实例
Apr 24 Python
基于Python爬取搜狐证券股票过程解析
Nov 18 Python
python数字图像处理:图像简单滤波
Jun 28 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
IIS6.0+PHP5.x+MySQL5.x+Zend3.0x+GD+phpMyAdmin2.8x通用安装实例(已经完成)
2006/12/06 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
解析CodeIgniter自定义配置文件
2013/06/18 PHP
wordpress安装过程中遇到中文乱码的处理方法
2015/04/21 PHP
用JAVASCRIPT如何给<textarea></textarea>赋值
2007/04/20 Javascript
jQuery计算textarea中文字数(剩余个数)的小程序
2013/11/28 Javascript
javascript 实现子父窗体互相传值的简单实例
2014/02/17 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
浅谈Node.js ORM框架Sequlize之表间关系
2017/07/24 Javascript
JavaScript实现移动端页面按手机屏幕分辨率自动缩放的最强代码
2017/08/18 Javascript
使用node.js对音视频文件加密的实例代码
2017/08/30 Javascript
Vue实现动态添加或者删除对象和对象数组的操作方法
2018/09/21 Javascript
postman自定义函数实现 时间函数的思路详解
2019/04/17 Javascript
解析原来浏览器原生支持JS Base64编码解码
2019/08/12 Javascript
Vue实现Layui的集成方法步骤
2020/04/10 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
Windows系统配置python脚本开机启动的3种方法分享
2015/03/10 Python
在Python中使用判断语句和循环的教程
2015/04/25 Python
Python中用sleep()方法操作时间的教程
2015/05/22 Python
详解使用Python处理文件目录的相关方法
2015/10/16 Python
详解Python中的文件操作
2016/08/28 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
2017/12/08 Python
python实现word 2007文档转换为pdf文件
2018/03/15 Python
Python基础学习之基本数据结构详解【数字、字符串、列表、元组、集合、字典】
2019/06/18 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
Python如何避免文件同名产生覆盖
2020/06/09 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
2020/12/21 Python
详解CSS3 Media Queries中媒体属性的使用
2016/02/29 HTML / CSS
CSS3制作气泡对话框的实例教程
2016/05/10 HTML / CSS
个人批评与自我批评
2014/10/15 职场文书
教师教育教学随笔
2015/08/15 职场文书
Python time库的时间时钟处理
2021/05/02 Python
Python 中数组和数字相乘时的注意事项说明
2021/05/10 Python
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript