ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

DeepFace 年龄与性别识别教程:3 步从安装到跑出第一次预测

DeepFace 年龄与性别识别教程:3 步从安装到跑出第一次预测 DeepFace 年龄与性别识别教程3 步从安装到跑出第一次预测【免费下载链接】deepfaceA Lightweight Face Recognition and Facial Attribute Analysis (Age, Gender, Emotion and Race) Library for Python项目地址: https://gitcode.com/GitHub_Trending/de/deepfaceDeepFace 是一个 Python 人脸分析库它的analyze函数一次调用就能返回年龄预测和性别概率。这篇教程带你 3 步跑通第一次年龄与性别识别并附默认参数说明和 4 个可直接对照仓库源码排查的常见坑。能力速览一个analyze调用返回年龄、性别、情绪、种族四项结果——通过actions参数选你要哪些默认四项全算年龄模型平均误差 ±4.65 岁性别模型准确率 97.44%精度 96.29%、召回 95.05%——这些数字写在 README.md 里一张图里有多张脸时逐张返回——返回的是列表每个元素对应一张脸19 种检测后端可切换——默认opencv检测不到脸时可以换retinaface支持批量输入——传一个路径列表一次调用处理整批图片快速上手一条命令安装pip install deepface如果想用源码里的最新功能也可以克隆后安装git clone https://gitcode.com/GitHub_Trending/de/deepface cd deepface pip install -e .第一次 analyze 调用拿仓库自带的双人测试图试一下from deepface import DeepFace # 分析图片里的每张脸预测年龄和性别 results DeepFace.analyze( img_pathtests/unit/dataset/couple.jpg, actions[age, gender], ) print(results)输出长这样一个列表图里有几张脸就有几个字典。每个字典含region脸的位置 x/y/w/h、face_confidence检测置信度、age整数年龄、dominant_genderMan 或 Woman、genderMan/Woman 两个百分比。例如其中一项{ region: {x: 536, y: 173, w: 572, h: 572}, age: 48, face_confidence: 0.99, dominant_gender: Man, gender: {Woman: 3.14, Man: 96.86}, }注意两点actions只传了你需要的项时输出里也只有对应字段age是整数源码里做了 int 转换不是小数。原理整条流水线是输入 → 处理 → 输出三段输入analyze接收路径、BGR 格式的 numpy 数组或 base64 字符串。先做人脸检测默认opencv后端和人脸对齐align默认True把每张脸裁出来。处理裁出的脸被缩放到 224x224送入 VGG-Face 骨干网络。年龄模型在骨干末端挂了一个 101 类的分类头对应 0–100 岁性别模型挂 2 类头都接 softmax。输出年龄模型输出 101 维概率分布后用 0–100 作权重加权求和得到连续年龄再取整性别模型输出两个概率乘以 100 变成百分比再取概率最大的标签作为dominant_gender。关键代码就两小段在 deepface/models/demography/Age.py 和 deepface/models/demography/Gender.py# Age.py把 101 维概率分布折算成连续年龄 output_indexes np.arange(0, 101) # 0-100 岁作为权重 apparent_age np.sum(age_predictions * output_indexes) # Gender.py只有两个标签 labels [Woman, Man]所以你在gender字典里看到的数字是 0–100 的百分比而age是 0–100 之间的整数两个字段的量纲不一样别混用。实际场景场景一批量审查证件照目录一次传路径列表即可批量处理注意批量模式返回的是嵌套结构外层每个元素对应一张图内层是该图里每张脸的结果。paths [tests/unit/dataset/img1.jpg, tests/unit/dataset/img24.jpg] batch DeepFace.analyze(paths, actions[age, gender]) # 批量输入返回 List[List[dict]]需要两层遍历 for per_image in batch: for face in per_image: print(face[age], face[dominant_gender])场景二注册流程的年龄门槛 照片防伪把anti_spoofingTrue打开后DeepFace 会先用防伪模型判断照片真假判定为伪造时直接抛SpoofDetected不会给你返回结果results DeepFace.analyze( img_pathphoto.jpg, actions[age], anti_spoofingTrue, # 假照片会抛 SpoofDetected 异常 ) age results[0][age] if age 18: raise ValueError(用户未满 18 岁)避坑1. 现象FaceNotDetected: Face could not be detected in ...→ 原因默认opencv检测器没找到脸而enforce_detection默认是True找不到就抛异常 → 解决换更强的检测器如detector_backendretinaface或按异常提示设enforce_detectionFalse。源码在 deepface/modules/detection.py 第 159–170 行异常信息本身就给了这两条出路。2. 现象开了anti_spoofingTrue后正常真照也被拒 → 原因防伪模型把图判为 spoofanalyze直接抛SpoofDetected不会返回任何分析结果 → 解决确认输入确实是真实拍摄的照片防伪只在你需要验真的场景开启默认是False。抛异常逻辑在 deepface/modules/demography.py 第 165–166 行。3. 现象拿到age想当浮点数用发现是 int → 原因源码里obj[age] int(apparent_age)是显式转换注释写明是为了让结果可 JSON 序列化 → 解决业务上接受整数粒度即可需要更细粒度时直接调用 Age 模型自己的predict。见 demography.py 第 208–209 行的注释。4. 现象批量调用后face[age]取不到值、报 TypeError → 原因传列表时返回List[List[dict]]嵌套结构单张图时才是List[dict]→ 解决按输入形式区分遍历层级批量结果先按图分组再按脸取值。见 demography.py 第 108–129 行的批处理分支。下一步参数与返回字段的完整定义直接读 deepface/modules/demography.py 的 docstring每个actions对应的输出键都列在里面想接实时摄像头分析参考 tests/unit/stream.py想部署成 REST 服务看 deepface/api/ 目录和 scripts/service.sh各识别模型与检测器的准确率对比在 benchmarks/选检测后端前建议先翻一眼【免费下载链接】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),仅供参考
返回列表