使用 Python 进行年龄和性别检测,这个结果搞笑了

在本文中,我将使用 Python 编程语言带您完成使用机器学习进行年龄和性别检测的任务。年龄和性别检测是计算机视觉的任务,因此我将使用

Python 中的 OpenCV 库。

在开始使用 Python 进行年龄和性别检测的任务之前,我将首先带您了解这个概念的含义以及如何处理年龄和性别检测的问题。理解这个概念很重要,这样以后你就可以轻松地使用 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)

在这里插入图片描述
关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。

二、学习软件

工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。

三、入门学习视频

我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。

四、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

五、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。


这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

Python资料、技术、课程、解答、咨询也可以直接点击下面名片,添加官方客服斯琪

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值