如何不冒昧的问妹子年龄又能清楚的知道她多大呢?Python来告诉你。

 前言

昨天,公司一个程序员过生日,一大帮子单身老爷们儿聚餐,可怜!

所以大家呼朋唤友,有女朋友的带着闺蜜、朋友,好说歹说,准备一起聚聚,顺便给大家互相介绍

下,说不定,哎嘿有互相看对眼的呢!

结果——人家小姐姐问你猜她多大?

给程序员猜小姐姐年龄的血泪忠告:这话记得斟酌下!

猜猜看这位小姐姐多大呢?

↓↓↓

那么, 问题来了,和小姐姐聊天猜年龄,说多少合适?

实在不知道,看看我下面写的内容?

今天小编教大家写一篇关于如何使用OpenCV、深度学习和Python算出小姐姐年龄的自动识别/预测~(以及性别识别)

一、效果展示

第一组小姐姐:

 第二组男生:

 第三组情侣照片:

用Python进行年龄和性别检测!

我将开始编写用于检测面部的代码,因为如果没有面部检测,我们将无法继续进行年龄和性

别预测任务。

首先:下载在年龄和性别检测任务中所需的必要的OpenCV预训练模型。

代码演示:

01    人脸检测的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

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

02    性别检测的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))

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

03    用于年龄检测的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)

最上面的就是展示效果的图!你也想试试嘛?

小结

其实,很多时候机器检测结果只是相近或者会超出范围不准确也是正常的哈!

大家猜女伴的年龄的时候,教你一招,比实际年龄要小几岁,小姐姐都是喜欢听的!只要不是很离谱撒~

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>