添加人脸识别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指令集时,请替换上方的 latestnoavx-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指令集时,请替换上方的 latestnoavx-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指令集时,请替换上方的 latestnoavx-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

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;;

添加人脸识别api

使用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同时部署 mtphotosmtphotos_aimtphotos_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

2、下载后,双击MT_Photos_Deepface_V1.0.0_Setup.exe,等待安装完成

3、打开MT Photos Deepface,等待显示 Uvicorn running on http://0.0.0.0:8066

MT Photos Deepface 启动

如果无法访问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'
  • -e RECOGNITION_MODEL=Facenet512 自定义人脸特征提取模型
    • RECOGNITION_MODEL 可以是这些:"VGG-Face", "Facenet", "Facenet512", "OpenFace", "DeepFace", "DeepID", "ArcFace", "Dlib", "SFace", "GhostFaceNet"

模型目录映射

镜像已内置 retinaface.h5facenet512_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

Copyright © 2025 杭州相册家科技有限公司 All Rights Reserved

隐私协议软件许可及服务协议

浙公网安备 33019202000625号浙ICP备2022014580号