人脸年龄识别python
时间: 2023-09-24 19:07:29 浏览: 45
人脸年龄识别是一种计算机视觉技术,主要利用机器学习模型对输入的人脸图像进行分析,从而预测出人脸的年龄。在Python中,可以使用OpenCV、Dlib、TensorFlow等库来实现人脸年龄识别。
以下是使用OpenCV和Dlib库实现人脸年龄识别的简单示例代码:
```python
import cv2
import dlib
# 加载人脸检测器
detector = dlib.get_frontal_face_detector()
# 加载人脸关键点检测器
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 加载年龄预测模型
age_net = cv2.dnn.readNetFromCaffe('deploy_age.prototxt', 'age_net.caffemodel')
# 加载性别预测模型
gender_net = cv2.dnn.readNetFromCaffe('deploy_gender.prototxt', 'gender_net.caffemodel')
# 读取图片
img = cv2.imread('test.jpg')
# 缩放图片
img = cv2.resize(img, (500, 500))
# 转换为灰度图像
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# 检测人脸
faces = detector(gray)
# 循环遍历每个人脸
for face in faces:
# 检测人脸关键点
landmarks = predictor(gray, face)
# 提取人脸区域
x1, y1, x2, y2 = face.left(), face.top(), face.right(), face.bottom()
face_img = img[y1:y2, x1:x2]
# 年龄预测
blob = cv2.dnn.blobFromImage(face_img, scalefactor=1.0, size=(227, 227), mean=(78.4263377603, 87.7689143744, 114.895847746), swapRB=False)
age_net.setInput(blob)
age_preds = age_net.forward()
age = age_preds[0][0] * 100
# 性别预测
blob = cv2.dnn.blobFromImage(face_img, scalefactor=1.0, size=(227, 227), mean=(78.4263377603, 87.7689143744, 114.895847746), swapRB=False)
gender_net.setInput(blob)
gender_preds = gender_net.forward()
gender = 'Female' if gender_preds[0][0] < 0.5 else 'Male'
# 在图片上绘制年龄和性别
cv2.putText(img, "Age: {:.2f}".format(age), (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
cv2.putText(img, "Gender: {}".format(gender), (x1, y1-30), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 2)
# 显示图片
cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
需要注意的是,上述示例代码需要预先下载年龄和性别预测模型文件(deploy_age.prototxt、age_net.caffemodel、deploy_gender.prototxt、gender_net.caffemodel)以及人脸关键点检测器模型文件(shape_predictor_68_face_landmarks.dat)。另外,需要将这些文件放在同一个目录下。