前言
昨天,公司一個程式員過生日,一大幫子單身老爺們兒聚餐,可憐!

所以大家呼朋喚友,有女朋友的帶著閨蜜、朋友,好說歹說,準備一起聚聚,順便給大家互相介紹
下,說不定,哎嘿有互相看對眼的呢!
結果——人家小姐姐問你猜她多大?
給程式員猜小姐姐年齡的血淚忠告:這話記得斟酌下!
猜猜看這位小姐姐多大呢?
↓↓↓

那么, 問題來了,和小姐姐聊天猜年齡,說多少合適?
實在不知道,看看我下面寫的內容👇
今天小編教大家寫一篇關于如何使用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)
最上面的就是展示效果的圖!你也想試試嘛?

小結
其實,很多時候機器檢測結果只是相近或者會超出范圍不準確也是正常的哈!
大家猜女伴的年齡的時候,教你一招,比實際年齡要小幾歲,小姐姐都是喜歡聽的!只要不是很離譜撒~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/376933.html
標籤:AI
上一篇:python使用np.linspace函式生成均勻的浮點數串列實戰:生成浮點數串列、生成浮點數串列(指定是否包含末尾值)
