Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

1 #15

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open

1 #15

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
160 changes: 0 additions & 160 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,161 +1 @@
# MT Photos人脸识别API

- 基于[serengil/deepface](https://github.com/serengil/deepface)实现的人脸识别API

## 模型选择

### 人脸检测模型

默认的人脸检测模型为retinaface,虽然计算耗时较长,但是最准确;

可通过环境变量 `DETECTOR_BACKEND`来自定义检测模型;

```python
backends = [
'opencv',
'ssd',
'dlib',
'mtcnn',
'retinaface',
'mediapipe',
'yolov8',
'yunet',
'fastmtcnn',
]
detector_backend = os.getenv("DETECTOR_BACKEND", "retinaface")
```

### 人脸特征提取模型

默认的人脸检测模型为Facenet512

可通过环境变量 `RECOGNITION_MODEL`来自定义特征提取模型;

```python
models = [
"VGG-Face",
"Facenet",
"Facenet512",
"OpenFace",
"DeepFace",
"DeepID",
"ArcFace",
"Dlib",
"SFace",
"GhostFaceNet",
]
recognition_model = os.getenv("RECOGNITION_MODEL", "Facenet512")
```

## 预训练模型

如果容器内下载模型很慢,可以增加 /models 目录映射
```
-v /host_path:/models
```

然后将对应的预训练模型放到容器内的`/models/.deepface/weights/`下;比如`/models/.deepface/weights/retinaface.h5`

### 预训练模型下载地址

https://github.com/serengil/deepface_models/releases/tag/v1.0


## 安装方法

- 下载镜像

```
docker pull mtphotos/mt-photos-deepface:latest
```

- 创建容器

```
docker run -i -p 8066:8066 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-deepface --restart="unless-stopped" mtphotos/mt-photos-deepface:latest
```



## 打包docker镜像

```bash
docker build . -t mt-photos-deepface:latest
```

### 运行docker容器

```bash
docker run -i -p 8066:8066 -e API_AUTH_KEY=mt_photos_ai_extra --name mt-photos-deepface --restart="unless-stopped" mt-photos-deepface:latest
```

### 下载源码本地运行

- 安装python **3.8版本**
- 在文件夹下执行`pip install -r requirements.txt`
- 复制`.env.example`生成`.env`文件,然后修改`.env`文件内的API_AUTH_KEY
- 执行 `python server.py` ,启动服务

看到以下日志,则说明服务已经启动成功
```bash
INFO: Started server process [27336]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on http://0.0.0.0:8066 (Press CTRL+C to quit)
```


## API

### /check

检测服务是否可用,及api-key是否正确

```bash
curl --location --request POST 'http://127.0.0.1:8000/check' \
--header 'api-key: api_key'
```

**response:**

```json
{
"result": "pass"
}
```

### /represent

```bash
curl --location --request POST 'http://127.0.0.1:8000/represent' \
--header 'api-key: api_key' \
--form 'file=@"/path_to_file/test.jpg"'
```

**response:**

- detector_backend : 人脸检测模型
- recognition_model : 人脸特征提取模型
- result : 识别到的结果

### 返回数据示例
```json
{
"detector_backend": "retinaface",
"recognition_model": "Facenet512",
"result": [
{
"embedding": [ 0.5760641694068909,... 512位向量 ],
"facial_area": {
"x": 212,
"y": 112,
"w": 179,
"h": 250,
"left_eye": [ 271, 201 ],
"right_eye": [ 354, 205 ]
},
"face_confidence": 1.0
}
]
}
```
7 changes: 7 additions & 0 deletions server.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,13 @@
api_auth_key = os.getenv("API_AUTH_KEY", "mt_photos_ai_extra")
http_port = int(os.getenv("HTTP_PORT", "8066"))

# 获取级联分类器文件路径
cascade_path = os.getenv("CASCADE_PATH", "models/haarcascade_frontalface_default.xml")
# 加载级联分类器
face_cascade = cv2.CascadeClassifier(cascade_path)
# 确保face_cascade已正确加载
if face_cascade.empty():
raise FileNotFoundError(f"未找到级联分类器文件,请检查CASCADE_PATH环境变量: {cascade_path}")

inactive_task = None

Expand Down