添加人脸识别API
基于serengil/deepface 实现的人脸识别API
通过添加人脸识别-API,可以替代MT Photos服务端内置的人脸识别程序来进行人脸特征识别任务;
代码仓库
相关代码已开源在 https://github.com/MT-Photos/mt-photos-deepface
安装
Windows可以使用Windows 一键安装包
镜像说明 DockerHub镜像仓库地址: https://hub.docker.com/r/mtphotos/mt-photos-deepface
镜像Tags说明:
- latest:适用于支持avx指令集cpu,比如:Intel酷睿、至强处理器,以及AMD大多数的处理器;
- noavx-latest: 适用于不支持avx指令集的cpu,比如:大多数的Intel赛扬、奔腾处理器;
以上镜像仅支持X86架构机型运行,不支持ARM架构机型
1.下载镜像
docker pull mtphotos/mt-photos-deepface:latest
当CPU不支持avx指令集时,请替换上方的 latest 为 noavx-latest
看不懂命令行?
5分钟了解Docker:https://mtmt.tech/docs/example/intro
镜像加速
提示:当无法访问DockerHub时,请使用以下命令拉取镜像
docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-deepface:latest docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-deepface:latest mtphotos/mt-photos-deepface:latest
当CPU不支持avx指令集时,请替换上方的 latest 为 noavx-latest
第1条命令为拉取镜像
第2条命令为将镜像标记为Docker hub源,这样可以在图形化创建容器时使用
CUDA版本镜像
docker pull mtphotos/mt-photos-deepface:cuda-latest
CUDA 版本 12.3.0 以上,显卡驱动版本 >=545.23.06
提示:当无法访问DockerHub时,请使用以下命令拉取镜像
#下载镜像:
docker pull registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-deepface:cuda-latest
docker tag registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-deepface:cuda-latest mtphotos/mt-photos-deepface:cuda-latest
#启动容器:
docker run --gpus all -i -p 8066:8066 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-deepface mtphotos/mt-photos-deepface:cuda-latest
2. 创建容器
docker run -i -p 8066:8066 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-deepface mtphotos/mt-photos-deepface:latest
当CPU不支持avx指令集时,请替换上方的 latest 为 noavx-latest
如果识别速度很慢,可以使用环境变量:
-e DETECTOR_BACKEND=mtcnn
来指定人脸检测模型为mtcnn,mtcnn识别速度会快一些,不过识别的准确度会低一些;
说明:
-p 8066:8066
端口映射,访问容器的端口-e API_AUTH_KEY=mt_photos_ai_extra
环境变量API_AUTH_KEY是容器内部用来验证请求来源的,请记得修改api_key- API_AUTH_KEY的值可以是一段字符串,比如
051C78C4D217DB28
- 在MT Photos后台添加API时需要填入这个API_AUTH_KEY
- API_AUTH_KEY的值可以是一段字符串,比如
3、返回MT Photos添加人脸识别api
接口地址 填写 http://[nas的ip]:8066
API_AUTH_KEY 填写 mt_photos_ai_extra (这是默认值,如果上一步有修改过,用修改过的值)
API并发数 控制同时识别的任务数,填写1
人脸置信度阈值 如果人脸检测模型用的是默认的
retinaface
,建议填写0.99 ;如果是其他模式建议填写0.9;人物匹配差异值阈值 如果人脸特征提取模型用的是默认的
Facenet512
,建议填写0.15;;
使用docker-compose创建MT Photos 和 AI、人脸识别API容器
docker-compose.yaml 模板文件:
version: "3"
services:
mtphotos:
image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos:latest
container_name: mtphotos
restart: always
ports:
- 8063:8063
volumes:
- /volume1/docker/mt_photos/config:/config
- /volume1/photos/mt_photos_upload:/upload
- /volume1/xxx/其他需要映射的目录:/photos #提示:这一行是其他需要映射给容器的文件夹,如果没有可以删除这一行
environment:
- TZ=Asia/Shanghai
- LANG=C.UTF-8
depends_on:
- mtphotos_ai
- mtphotos_face_api
mtphotos_ai:
image: registry.cn-hangzhou.aliyuncs.com/mtphotos/mt-photos-ai:onnx-latest
container_name: mtphotos_ai
restart: always
ports:
- 8060:8060
environment:
- API_AUTH_KEY=mt_photos_ai_extra
mtphotos_face_api:
image: mtphotos/mt-photos-deepface:noavx-latest
container_name: mtphotos_face_api
restart: always
ports:
- 8066:8066
environment:
- API_AUTH_KEY=mt_photos_ai_extra
如果使用yaml同时部署
mtphotos
、mtphotos_ai
和mtphotos_face_api
,在MT Photos后台添加人脸识别API时, 接口地址可以填写 http://mtphotos_face_api:8066
yaml语法三大规则
规则一:缩进
yaml使用一个固定的缩进风格表示数据层结构关系,需要每个缩进级别由两个空格组成。一定不能使用tab键
规则二:冒号
services: image: mtphotos/mt-photos:latest
每个冒号后面一定要有一个空格(以冒号结尾不需要空格)
规则三:短横线
想要表示列表项,使用一个短横杠加一个空格。多个项使用同样的缩进级别作为同一个列表的一部分
environment: - TZ=Asia/Shanghai - LANG=C.UTF-8 - PUID=1000 - PGID=100
Windows安装包
仅支持Win 10及以上系统
1、从下方网盘分享链接中下载 MT_Photos_Deepface_V1.0.0_Setup.exe
- 「阿里云盘」 https://www.aliyundrive.com/s/BisLTt6emaz
- 「百度网盘」 https://pan.baidu.com/s/1r77cbxNOngL07Oh2S7-umA?pwd=0101 提取码:0101
- 「GitHub」 https://github.com/MT-Photos/mt-photos-deepface/releases/tag/windows_exe_1.0.0
2、下载后,双击MT_Photos_Deepface_V1.0.0_Setup.exe,等待安装完成
3、打开MT Photos Deepface,等待显示 Uvicorn running on http://0.0.0.0:8066
如果无法访问http://127.0.0.1:8066, 那么有可能是8066端口被占用了
请修改程序文件夹下 .env 文件中的 HTTP_PORT;比如 HTTP_PORT = 8067
如果需要修改api_key,请修改 .env 文件中的API_AUTH_KEY
.env文件修改之后,请关闭 mt-photos-deepface-server.exe,然后再重新打开
如果局域网内其他客户端无法访问,请在Windows防火墙中找到【允许应用通过防火墙】,在底部【允许其他应用】中添加mt-photos-deepface-server.exe
自定义
自定义向量长度
如果人脸特征提取模型用的不是Facenet512
,可以在API配置中点击 自定义向量长度 设置数据库中存储人脸特征字段的长度
自定义模型
-e DETECTOR_BACKEND=retinaface
自定义人脸检测模型- DETECTOR_BACKEND 可以是这些
'opencv', 'ssd', 'dlib', 'mtcnn', 'retinaface', 'mediapipe', 'yolov8', 'yunet', 'fastmtcnn'
- DETECTOR_BACKEND 可以是这些
-e RECOGNITION_MODEL=Facenet512
自定义人脸特征提取模型- RECOGNITION_MODEL 可以是这些:
"VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib", "SFace", "GhostFaceNet"
- RECOGNITION_MODEL 可以是这些:
模型目录映射
镜像已内置 retinaface.h5
和 facenet512_weights.h5
,如果不修改识别模型,不需要添加目录映射;
当指定了别的模型,容器内下载模型很慢,可以增加 /models 目录映射
-v /host_path:/models
然后将对应的预训练模型放到容器内的 /models/.deepface/weights/
下;
比如 /models/.deepface/weights/retinaface.h5
预训练模型下载地址:https://github.com/serengil/deepface_models/releases/tag/v1.0