DeepFace 年龄与性别识别:从 pip install 到出结果的最短实践
2026/9/12 6:24:22 网站建设 项目流程

DeepFace 年龄与性别识别:从 pip install 到出结果的最短实践

【免费下载链接】deepfaceA Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python项目地址: https://gitcode.com/GitHub_Trending/de/deepface

DeepFace 是 Python 生态里常用的人脸分析库,其中年龄识别与性别检测模块可以直接吃进一张人脸图片,返回整数年龄和 Woman/Man 两个性别标签及其概率。它不判断"这张脸是谁",只做属性分析,适合年龄验证、内容分级、批量画像统计这类场景。本文给出一条最短可用路径和对应的调参速查。

最短路径:装好并看到第一个结果

仓库里自带测试图片,装好依赖后直接用它跑第一次分析。首次调用会自动下载模型权重,之后走本地缓存,无需再联网。

git clone https://gitcode.com/GitHub_Trending/de/deepface cd deepface pip install -r requirements.txt
from deepface import DeepFace results = DeepFace.analyze("tests/unit/dataset/img1.jpg", actions=["age", "gender"]) print(results[0]["age"], results[0]["dominant_gender"], results[0]["gender"])

输出形如29 Woman {'Woman': 99.3, 'Man': 0.7}:年龄是 0~100 的整数,性别是一个标签加概率字典。一张照片里的多人图,analyze会返回一个列表,每个检测到的脸一项。

一张图讲清它怎么算出结果

年龄和性别两条链路共享同一套流程:输入 → 人脸检测 → 对齐与缩放 → 特征提取 → 分类头 → 输出

DeepFace.analyze先用 detector_backend 指定的检测器(默认 opencv)找到人脸框,按眼睛位置做对齐,再缩放到 224x224 送进模型,这一步的实现在 modules/demography.py。两个模型都以 VGGFace 卷积网络做特征提取,只换分类头:

# Age: 101 个分类单元,输出 0~100 岁的概率分布 age_model_output = Convolution2D(101, (1, 1), name="predictions")(base_model.layers[-4].output) # Gender: 2 个分类单元,softmax 得到概率

年龄头输出 101 个概率后,用"概率 × 岁数"加权求和得到连续年龄,再转成整数,逻辑在 Age.py 的find_apparent_age;性别头输出 2 个概率,取最大者作为标签,标签和加载逻辑在 Gender.py。也就是说,两者是同一个特征提取器 + 不同输出头的结构,这也是它们推理速度接近的原因。

按你的场景调一下

单人注册年龄校验

  • 输入:一张用户自拍照
  • 期望:整数年龄,低于阈值则拦截
  • 核心调用:
age = DeepFace.analyze(photo, actions=["age"])[0]["age"]

actions只传需要的项可以省掉另外两个模型的推理。

批量扫一个目录

多人合影里每个脸都会单独出一项结果,遍历文件即可。

  • 输入:目录路径
  • 期望:每张图每个脸的年龄与性别
  • 核心调用:
import glob for path in glob.glob("photos/*.jpg"): try: for r in DeepFace.analyze(path, actions=["age", "gender"]): print(path, r["age"], r["dominant_gender"]) except Exception: print(path, "no face")

API 服务接入

  • 输入:HTTP 请求里的图片 base64
  • 期望:JSON 形式的年龄、性别概率
  • 仓库自带 Flask 服务,入口在 api/src/app.py,启动方式见 docker/docker-compose.yml,无需自己写路由。

效果不满意时的调参速查

配置项默认值调整方向适用条件
detector_backendopencvretinafacemediapipeopencv 漏检侧脸、远距离人脸时
enforce_detectionTrueFalse低分辨率图找不到人脸时不想抛异常
alignTrueFalse提速对精度要求不高、追求吞吐
expand_percentage0调大如20裁剪人脸区域太紧导致边缘信息丢失
actions全部四项只传需要的减少推理次数,降低耗时

以上参数均为analyze的入参,签名和说明在 modules/demography.py。

已知局限与不适用场景

  • 年龄输出是 0~100 的整数,且 101 个概率类加权求和的结果对端点年龄不敏感,儿童和极高龄人群误差会明显放大。
  • 性别只有 Woman/Man 两个标签,没有置信度门槛,概率接近五五开时结果基本是抛硬币。
  • 一切以人脸检测为前提:检测器找不到脸,整条分析链路直接中止,遮挡、反光、严重侧脸是常见失效点。
  • 该模块无法判断"这张脸是不是某个人",身份比对需要用库里另外的识别模型。

需要更多细节可查阅仓库内的 README 和 tests/unit/test_analyze.py,接口行为以源码为准。

【免费下载链接】deepfaceA Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python项目地址: https://gitcode.com/GitHub_Trending/de/deepface

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询