news 2026/6/15 17:21:49

基于 ResNet-50 + 多任务学习 TensorFlow 中实现高效人脸多属性识别 CNN卷积网络的人脸识别 age,gender, race三部分

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于 ResNet-50 + 多任务学习 TensorFlow 中实现高效人脸多属性识别 CNN卷积网络的人脸识别 age,gender, race三部分

CNN卷积网络的人脸识别,自己搭建的深度卷积网络,基于resnet搭建的环境是tensorflow版本,可以实现人脸多属性识别(包括age,gender, race三部分)
可以提供检测单一图片的代码和摄像头实时检测人脸属性
1

1

🧠 基于 ResNet 的自定义 CNN 深度网络实现人脸多属性识别(年龄、性别、种族)

✅ 使用 TensorFlow 2.x 构建
✅ 模型结构:ResNet-50 + 多任务头(Age, Gender, Race)
✅ 支持单张图片检测摄像头实时推理
✅ 输出:Gender,Age Range,Race(如图所示)


📦 一、项目目标

功能描述
✅ 单图预测输入一张人脸图像,输出性别、年龄范围、种族
✅ 实时摄像头检测打开摄像头,实时框出人脸并标注属性
✅ 自定义 ResNet 模型基于 ResNet-50 构建多任务分类器
✅ TensorFlow 实现使用 Keras API 搭建模型

🖼️ 示例输出(如图):

FEMALE Gender Certainty:100.0 Age:20–29 Race:White

🔧 二、环境安装

pipinstalltensorflow opencv-python numpy matplotlib pillow dlib

✅ 推荐使用 Python 3.8+,TensorFlow 2.10+


🏗️ 三、构建自定义 ResNet 多任务模型

脚本:model.py

# model.pyimporttensorflowastffromtensorflow.keras.applicationsimportResNet50fromtensorflow.keras.layersimportDense,GlobalAveragePooling2D,Inputfromtensorflow.keras.modelsimportModelimportnumpyasnpdefcreate_multitask_model(input_shape=(224,224,3)):# 加载预训练 ResNet50(不包含顶层)base_model=ResNet50(weights='imagenet',include_top=False,input_shape=input_shape)base_model.trainable=False# 冻结主干网络# 输入层inputs=Input(shape=input_shape)# 主干网络x=base_model(inputs)x=GlobalAveragePooling2D()(x)# 分支1:性别分类(2类)gender_output=Dense(64,activation='relu')(x)gender_output=Dense(1,activation='sigmoid',name='gender')(gender_output)# 0=Female, 1=Male# 分支2:年龄分类(7类:0-19, 20-29, ..., 60+)age_output=Dense(64,activation='relu')(x)age_output=Dense(7,activation='softmax',name='age')(age_output)# 分支3:种族分类(5类:Asian, Black, White, Indian, Middle Eastern)race_output=Dense(64,activation='relu')(x)race_output=Dense(5,activation='softmax',name='race')(race_output)# 创建多任务模型model=Model(inputs=inputs,outputs=[gender_output,age_output,race_output])returnmodel# 创建模型model=create_multitask_model()# 编译模型(每个分支独立损失)model.compile(optimizer='adam',loss={'gender':'binary_crossentropy','age':'categorical_crossentropy','race':'categorical_crossentropy'},metrics={'gender':'accuracy','age':'accuracy','race':'accuracy'})print("✅ 模型已创建!")

🎯 四、人脸检测(使用 Dlib 或 MTCNN)

安装 Dlib(推荐用于高精度人脸检测)

pipinstalldlib

脚本:face_detector.py

# face_detector.pyimportcv2importdlibimportnumpyasnpfromPILimportImageimportos# 加载 dlib 人脸检测器detector=dlib.get_frontal_face_detector()defdetect_faces(image):gray=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)faces=detector(gray)returnfaces

🖼️ 五、单张图片预测代码

脚本:predict_single_image.py

# predict_single_image.pyimportcv2importnumpyasnpfromPILimportImagefrommodelimportmodel# 导入上面的模型defpreprocess_image(image_path,target_size=(224,224)):"""预处理图像"""img=Image.open(image_path)img=img.resize(target_size)img_array=np.array(img)img_array=img_array.astype(np.float32)/255.0# 归一化img_array=np.expand_dims(img_array,axis=0)# (1, H, W, C)returnimg_arraydefpredict_attributes(model,image_path):# 预处理图像img_array=preprocess_image(image_path)# 预测gender_pred,age_pred,race_pred=model.predict(img_array)# 解码结果gender="FEMALE"ifgender_pred[0][0]<0.5else"MALE"gender_certainty=float(gender_pred[0][0]*100)ifgender=="FEMALE"elsefloat((1-gender_pred[0][0])*100)age_labels=["0-19","20-29","30-39","40-49","50-59","60-69","70+"]age_idx=np.argmax(age_pred[0])age_range=age_labels[age_idx]race_labels=["Asian","Black","White","Indian","Middle Eastern"]race_idx=np.argmax(race_pred[0])race=race_labels[race_idx]return{"gender":gender,"gender_certainty":gender_certainty,"age":age_range,"race":race}# 使用示例if__name__=="__main__":result=predict_attributes(model,"test_face.jpg")print(f"Gender:{result['gender']}")print(f"Gender Certainty:{result['gender_certainty']:.1f}%")print(f"Age:{result['age']}")print(f"Race:{result['race']}")

📹 六、摄像头实时检测人脸属性

脚本:realtime_detection.py

# realtime_detection.pyimportcv2importdlibimportnumpyasnpfromPILimportImagefrommodelimportmodel# 导入模型fromface_detectorimportdetect_faces# 导入人脸检测defpreprocess_image(image,target_size=(224,224)):"""预处理图像"""img=Image.fromarray(image)img=img.resize(target_size)img_array=np.array(img)img_array=img_array.astype(np.float32)/255.0img_array=np.expand_dims(img_array,axis=0)returnimg_arraydefpredict_attributes(model,image):img_array=preprocess_image(image)gender_pred,age_pred,race_pred=model.predict(img_array)gender="FEMALE"ifgender_pred[0][0]<0.5else"MALE"gender_certainty=float(gender_pred[0][0]*100)ifgender=="FEMALE"elsefloat((1-gender_pred[0][0])*100)age_labels=["0-19","20-29","30-39","40-49","50-59","60-69","70+"]age_idx=np.argmax(age_pred[0])age_range=age_labels[age_idx]race_labels=["Asian","Black","White","Indian","Middle Eastern"]race_idx=np.argmax(race_pred[0])race=race_labels[race_idx]returngender,gender_certainty,age_range,race# 主程序cap=cv2.VideoCapture(0)# 打开摄像头whileTrue:ret,frame=cap.read()ifnotret:break# 人脸检测faces=detect_faces(frame)forfaceinfaces:x,y,w,h=face.left(),face.top(),face.width(),face.height()face_roi=frame[y:y+h,x:x+w]# 预测属性try:gender,certainty,age,race=predict_attributes(model,face_roi)# 绘制框和文本cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)text=f"{gender}\nGender Certainty:{certainty:.1f}\nAge:{age}\nRace:{race}"cv2.putText(frame,text,(x,y-10),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,255,0),2)exceptExceptionase:print(f"Prediction error:{e}")# 显示画面cv2.imshow("Face Detector",frame)ifcv2.waitKey(1)&0xFF==ord('q'):breakcap.release()cv2.destroyAllWindows()

🚀总结
本系统基于ResNet-50 + 多任务学习架构,在 TensorFlow 中实现了高效的人脸多属性识别。
可轻松部署为安防监控、智能门禁、用户画像分析等场景的 AI 模块。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/14 17:33:02

Nextcloud插件开发终极指南:从零到部署的10个关键步骤

Nextcloud插件开发终极指南&#xff1a;从零到部署的10个关键步骤 【免费下载链接】server ☁️ Nextcloud server, a safe home for all your data 项目地址: https://gitcode.com/GitHub_Trending/se/server 想要为团队定制专属的Nextcloud功能&#xff1f;厌倦了现有…

作者头像 李华
网站建设 2026/6/15 11:58:46

Python机器学习实战:5个关键算法解决材料科学预测难题

Python机器学习实战&#xff1a;5个关键算法解决材料科学预测难题 【免费下载链接】Python All Algorithms implemented in Python 项目地址: https://gitcode.com/GitHub_Trending/pyt/Python 您是否曾经为材料性能预测的复杂性而困扰&#xff1f;&#x1f914; 面对海…

作者头像 李华
网站建设 2026/6/15 6:47:35

AI助力SVG图形生成:5分钟打造专业矢量图

快速体验 打开 InsCode(快马)平台 https://www.inscode.net输入框内输入如下内容&#xff1a; 创建一个基于AI的SVG图形生成工具&#xff0c;用户可以通过自然语言描述想要的图形&#xff08;如生成一个蓝色的圆形&#xff0c;半径50px&#xff0c;带有红色边框&#xff09;&…

作者头像 李华
网站建设 2026/6/15 12:03:57

Sandboxie Plus实战宝典:网络安全防护的全新体验

Sandboxie Plus实战宝典&#xff1a;网络安全防护的全新体验 【免费下载链接】Sandboxie Sandboxie Plus & Classic 项目地址: https://gitcode.com/gh_mirrors/sa/Sandboxie 上周&#xff0c;我的朋友小李下载了一个看似正常的办公软件&#xff0c;结果整个电脑被勒…

作者头像 李华
网站建设 2026/6/15 12:02:29

SeedVR2视频高清修复:让模糊影像重获新生

SeedVR2视频高清修复&#xff1a;让模糊影像重获新生 【免费下载链接】SeedVR2-3B 项目地址: https://ai.gitcode.com/hf_mirrors/ByteDance-Seed/SeedVR2-3B 您是否曾为模糊的家庭录像而遗憾&#xff1f;是否因监控画面不够清晰而错失重要信息&#xff1f;现在&#x…

作者头像 李华
网站建设 2026/6/15 12:04:07

RipGrep终极指南:掌握高效文本搜索工具的完整教程

RipGrep终极指南&#xff1a;掌握高效文本搜索工具的完整教程 【免费下载链接】ripgrep ripgrep recursively searches directories for a regex pattern while respecting your gitignore 项目地址: https://gitcode.com/GitHub_Trending/ri/ripgrep RipGrep是一款革命…

作者头像 李华