基於Python進行年齡和性別檢測

前 言

在本文中,將使用 Python 程式語言帶您完成使用機器學習進行年齡和性別檢測的任務。年齡和性別檢測是計算機視覺的任務,因此我將使用Python 中的 OpenCV 庫。

在開始使用 Python 進行年齡和性別檢測的任務之前,將首先帶大家瞭解這個概念的含義以及如何處理年齡和性別檢測的問題。理解這個概念很重要,這樣以後你就可以輕鬆地使用 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進行年齡和性別檢測