為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

導語

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

一入Python深似海,不會還要繼續堅持學!歡迎閱讀往期文章哦!

一入Python深似海,不會還要繼續堅持學!歡迎閱讀往期文章哦!

哈嘍!大家好,我是木子,今天又到了一週週末,到了看劇刷抖音的好時間,可憐的我還在公司加班趕稿子。

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

想著今天都週末了,給大家送一波福利!不清楚大家刷抖音的時候是不是經常看到這個畫面,檢測人臉識別的小程式,一開啟程式,現場拍一張圖片就可以識別你適合的髮型、顏值打分、識別年齡……。等等~

週末公司上班的話比較放鬆除了工作也會聊點兒額外的話題,某某多大、畢業多久。大概是這些話題。很多小姐姐問到年齡這個問題都比較“害羞”,咳咳咳……。

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

所以我想著你們不好意思說自己多大了,肯定是想作為技術員的我給你們做一款年齡檢測機器!

好心的我給公司的一大批小姐姐偷偷做了年齡檢測!

噓噓噓!這話我只告訴你們不要往外說~

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

正文

原理簡介:

(1)預先載入三個網路模型

(2)開啟攝像頭影片流/載入影象;

(3)對每一幀進行人臉檢測;對檢測到的人臉進行性別與年齡預測;解析預測結果;顯示結果。

程式碼實現詳解

載入模型:

MODEL_MEAN_VALUES = (78。4263377603, 87。7689143744, 114。895847746)ageList = [‘(0-2)’, ‘(4-6)’, ‘(8-12)’, ‘(15-20)’, ‘(25-32)’, ‘(38-43)’, ‘(48-53)’, ‘(60-100)’]genderList = [‘Male’, ‘Female’]# Load networkageNet = cv。dnn。readNet(ageModel, ageProto)genderNet = cv。dnn。readNet(genderModel, genderProto)faceNet = cv。dnn。readNet(faceModel, faceProto)

人臉檢測:

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)

性別與年齡預測:

for bbox in bboxes: # print(bbox) face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame。shape[0]-1),max(0,bbox[0]-padding):min(bbox[2]+padding, frame。shape[1]-1)] blob = cv。dnn。blobFromImage(face, 1。0, (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 : {}, conf = {:。3f}”。format(gender, genderPreds[0]。max())) ageNet。setInput(blob) agePreds = ageNet。forward() age = ageList[agePreds[0]。argmax()] print(“Age Output : {}”。format(agePreds)) print(“Age : {}, conf = {:。3f}”。format(age, agePreds[0]。max())) label = “{},{}”。format(gender, age) cv。putText(frameFace, label, (bbox[0], bbox[1]-10), cv。FONT_HERSHEY_SIMPLEX, 0。8, (0, 255, 255), 2, cv。LINE_AA) cv。imshow(“Age Gender Demo”, frameFace) print(“time : {:。3f} ms”。format(time。time() - t))

效果圖:

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

附:

import cv2 as cvimport timedef 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, bboxesfaceProto = “D:/projects/opencv_tutorial/data/models/face_detector/opencv_face_detector。pbtxt”faceModel = “D:/projects/opencv_tutorial/data/models/face_detector/opencv_face_detector_uint8。pb”ageProto = “D:/projects/opencv_tutorial/data/models/cnn_age_gender_models/age_deploy。prototxt”ageModel = “D:/projects/opencv_tutorial/data/models/cnn_age_gender_models/age_net。caffemodel”genderProto = “D:/projects/opencv_tutorial/data/models/cnn_age_gender_models/gender_deploy。prototxt”genderModel = “D:/projects/opencv_tutorial/data/models/cnn_age_gender_models/gender_net。caffemodel”MODEL_MEAN_VALUES = (78。4263377603, 87。7689143744, 114。895847746)ageList = [‘(0-2)’, ‘(4-6)’, ‘(8-12)’, ‘(15-20)’, ‘(25-32)’, ‘(38-43)’, ‘(48-53)’, ‘(60-100)’]genderList = [‘Male’, ‘Female’]# Load networkageNet = cv。dnn。readNet(ageModel, ageProto)genderNet = cv。dnn。readNet(genderModel, genderProto)faceNet = cv。dnn。readNet(faceModel, faceProto)# Open a video file or an image file or a camera streamcap = cv。VideoCapture(0)padding = 20while cv。waitKey(1) < 0: # Read frame t = time。time() hasFrame, frame = cap。read() frame = cv。flip(frame, 1) if not hasFrame: cv。waitKey() break frameFace, bboxes = getFaceBox(faceNet, frame) if not bboxes: print(“No face Detected, Checking next frame”) continue for bbox in bboxes: # print(bbox) face = frame[max(0,bbox[1]-padding):min(bbox[3]+padding,frame。shape[0]-1),max(0,bbox[0]-padding):min(bbox[2]+padding, frame。shape[1]-1)] blob = cv。dnn。blobFromImage(face, 1。0, (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 : {}, conf = {:。3f}”。format(gender, genderPreds[0]。max())) ageNet。setInput(blob) agePreds = ageNet。forward() age = ageList[agePreds[0]。argmax()] print(“Age Output : {}”。format(agePreds)) print(“Age : {}, conf = {:。3f}”。format(age, agePreds[0]。max())) label = “{},{}”。format(gender, age) cv。putText(frameFace, label, (bbox[0], bbox[1]-10), cv。FONT_HERSHEY_SIMPLEX, 0。8, (0, 255, 255), 2, cv。LINE_AA) cv。imshow(“Age Gender Demo”, frameFace) print(“time : {:。3f} ms”。format(time。time() - t))

總結

公司小姐姐聽說我給她們偷偷做了檢測年齡的機器,過來扣了我奶茶!

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器

需要完整的專案原始碼:#原始碼基地:#私信小編即可#免費領取!

記得三連哈~下面這個是我希望的亞子:指望你們了~~~~

為什麼女生都避諱別人問年齡問題?於是我偷偷寫了一款年齡檢測器