如何用Python编程人像图片检测年龄性别的功能
Admin 2022-06-24 群英技术资讯 550 次浏览
在开始使用 Python 进行年龄和性别检测的任务之前,我将首先带您了解这个概念的含义以及如何处理年龄和性别检测的问题。理解这个概念很重要,这样以后你就可以轻松地使用 Python 和任何编程语言来执行年龄和性别检测的任务。
然而,检测年龄和性别的任务是一个固有的难题,比许多其他计算机视觉任务更是如此。这种难度差距的主要原因在于训练这些类型的系统所需的数据。
虽然一般的对象检测任务通常可以访问数十万甚至数百万张图像进行训练,但带有年龄和/或性别标签的数据集要小得多,通常为数千个,最多为数万个。
原因是为了给这样的图像添加标签,我们需要访问图像中主体的个人信息。也就是说,我们需要他们的出生日期和性别,特别是出生日期是很少公开的信息。
也就是说,我们需要他们的出生日期和性别,特别是出生日期是很少公开的信息。因此,我们必须解决这个问题的性质,我们正在解决和调整网络架构和算法方法来处理这些限制。
现在让我们开始使用 Python 编程语言进行年龄和性别检测任务。我将首先编写用于检测人脸的代码,因为如果没有人脸检测,我们将无法进一步完成年龄和性别预测的任务。
您可以从此处下载在年龄和性别检测任务中所需的必要 OpenCV 预训练模型。现在在你的 python 文件中导入 OpenCV 模块后,你可以开始使用下面的代码。
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
现在下一步是预测图像中人类的性别。在这里,我将性别网络加载到内存中,并将检测到的人脸通过网络传输,用于性别检测任务。
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))
现在下一个任务是预测图像中人类的年龄。这里我将加载老化网络并使用前向传递来获取输出。由于网络架构与性别网络相似,我们可以充分利用所有输出来获得任务的预期年龄组来检测年龄。
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)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
一些朋友想要知道怎样提取视频中的音频,其实我们能使用Python来实现。本文就给大家分享Python提取视频中的音频的操作流程,供大家参考,感兴趣的朋友可以了解看看。
python中none与null有啥区别?很多新手在python时,对于none与null容易混淆,因此,这篇文章就主要给大家讲讲none与null用法的不同,感兴趣的朋友就继续往下看吧,希望大家阅读完这篇文章能有所收获。
本文详细讲解了Python制作基础学生信息管理系统的实现,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
这篇文章主要介绍了python中的被动信息搜集的相关资料,帮助大家更好的理解和学习使用python,感兴趣的朋友可以了解下
这篇文章主要介绍了如何通过Python实现带GUI界面的手写数字识别,文中的示例代码讲解详细,对我们学习Python有一定的帮助,感兴趣的可以了解一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008