相关项目:
- SwanLab:训练人像抠图模型全程用它来分析和监控,以及和实验室同学协作交流,大幅提升了训练效率。
-
2024.09.07: 增加人脸检测API选项 Face++,实现更高精度的人脸检测
-
2024.09.06: 增加新的抠图模型 modnet_photographic_portrait_matting.onnx
-
2024.09.05: 更新 Restful API 文档
-
2024.09.02: 更新调整照片 KB 大小,DockerHub
-
2023.12.01: 更新API 部署(基于 fastapi)
-
2023.06.20: 更新预设尺寸菜单
🚀 谢谢你对我们的工作感兴趣。您可能还想查看我们在图像领域的其他成果,欢迎来信:zeyi.lin@swanhub.co.
HivisionIDPhoto 旨在开发一种实用、系统性的证件照智能制作算法。
它利用一套完善的AI模型工作流程,实现对多种用户拍照场景的识别、抠图与证件照生成。
HivisionIDPhoto 可以做到:
- 轻量级抠图(纯离线,仅需 CPU 即可快速推理)
- 根据不同尺寸规格生成不同的标准证件照、六寸排版照
- 支持 纯离线 或 端云 推理
- 美颜(waiting)
- 智能换正装(waiting)
如果 HivisionIDPhoto 对你有帮助,请 star 这个 repo 或推荐给你的朋友,解决证件照应急制作问题!
环境安装与依赖:
- Python >= 3.7(项目主要测试在 python 3.10)
- OS: Linux, Windows, MacOS
git clone https://github.com/Zeyi-Lin/HivisionIDPhotos.git
cd HivisionIDPhotos
建议 conda 创建一个 python3.10 虚拟环境后,执行以下命令
pip install -r requirements.txt
pip install -r requirements-app.txt
方式一:脚本下载
python scripts/download_model.py
方式二:直接下载
存到项目的hivision/creator/weights
目录下:
modnet_photographic_portrait_matting.onnx
(24.7MB): MODNet官方权重,下载hivision_modnet.onnx
(24.7MB):对纯色换底适配性更好的抠图模型,下载
这是一个可选项
拓展人脸检测模型 | 介绍 | 使用文档 |
---|---|---|
MTCNN | 离线人脸检测模型,高性能CPU推理,为默认模型,检测精度较低 | Clone此项目后直接使用 |
Face++ | 旷视推出的在线人脸检测API,检测精度较高,官方文档 | 使用文档 |
python app.py
运行程序将生成一个本地 Web 页面,在页面中可完成证件照的操作与交互。
核心参数:
-i
: 输入图像路径-o
: 保存图像路径-t
: 推理类型,有idphoto、human_matting、add_background、generate_layout_photos可选--matting_model
: 人像抠图模型权重选择,可选hivision_modnet
、modnet_photographic_portrait_matting
更多参数可通过python inference.py --help
查看
输入 1 张照片,获得 1 张标准证件照和 1 张高清证件照的 4 通道透明 png
python inference.py -i demo/images/test.jpg -o ./idphoto.png --height 413 --width 295
python inference.py -t human_matting -i demo/images/test.jpg -o ./idphoto_matting.png --matting_model hivision_modnet
输入 1 张 4 通道透明 png,获得 1 张增加了底色的图像)
python inference.py -t add_background -i ./idphoto.png -o ./idhoto_ab.jpg -c 4f83ce -k 30 -r 1
输入 1 张 3 通道照片,获得 1 张六寸排版照
python inference.py -t generate_layout_photos -i ./idhoto_ab.jpg -o ./idhoto_layout.jpg --height 413 --width 295 -k 200
python deploy_api.py
请求方式请参考 API 文档,含 cURL、Python、Java、Javascript 请求示例。
输入 1 张照片,获得 1 张标准证件照和 1 张高清证件照的 4 通道透明 png
import requests
url = "http://127.0.0.1:8080/idphoto"
input_image_path = "demo/images/test.jpg"
files = {"input_image": open(input_image_path, "rb")}
data = {"height": 413, "width": 295}
response = requests.post(url, files=files, data=data).json()
# response为一个json格式字典,包含status、image_base64_standard和image_base64_hd三项
print(response)
输入 1 张 4 通道透明 png,获得 1 张增加了底色的图像
import requests
url = "http://127.0.0.1:8080/add_background"
input_image_path = "test.png"
files = {"input_image": open(input_image_path, "rb")}
data = {"color": '638cce', 'kb': None}
response = requests.post(url, files=files, data=data).json()
# response为一个json格式字典,包含status和image_base64
print(response)
输入 1 张 3 通道照片,获得 1 张六寸排版照
import requests
url = "http://127.0.0.1:8080/generate_layout_photos"
input_image_path = "test.jpg"
files = {"input_image": open(input_image_path, "rb")}
data = {"height": 413, "width": 295, "kb": 200}
response = requests.post(url, files=files, data=data).json()
# response为一个json格式字典,包含status和image_base64
print(response)
以下方式三选一
方式一:拉取最新镜像:
docker pull linzeyi/hivision_idphotos
方式二:Dockrfile 直接构建镜像:
在确保将模型权重文件hivision_modnet.onnx放到hivision/creator/weights
下后,在项目根目录执行:
docker build -t linzeyi/hivision_idphotos .
方式三:Docker compose 构建:
确保将模型权重文件 hivision_modnet.onnx 放在hivision/creator/weights
下后,在项目根目录下执行:
docker compose build
启动 Gradio Demo 服务
运行下面的命令,在你的本地访问 http://127.0.0.1:7860 即可使用。
docker run -d -p 7860:7860 linzeyi/hivision_idphotos
启动 API 后端服务
docker run -d -p 8080:8080 linzeyi/hivision_idphotos python3 deploy_api.py
两个服务同时启动
docker compose up -d
本项目提供了一些额外的配置项,使用环境变量进行设置:
环境变量 | 类型 | 描述 | 示例 |
---|---|---|---|
FACE_PLUS_API_KEY | 可选 | 这是你在 Face++ 控制台申请的 API 密钥 | 7-fZStDJ···· |
FACE_PLUS_API_SECRET | 可选 | Face++ API密钥对应的Secret | VTee824E···· |
docker使用环境变量示例:
docker run linzeyi/hivision_idphotos \
-e FACE_PLUS_API_KEY=7-fZStDJ····
- MTCNN:
@software{ipazc_mtcnn_2021,
author = {ipazc},
title = {{MTCNN}},
url = {https://github.com/ipazc/mtcnn},
year = {2021},
publisher = {GitHub}
}
- ModNet:
@software{zhkkke_modnet_2021,
author = {ZHKKKe},
title = {{ModNet}},
url = {https://github.com/ZHKKKe/MODNet},
year = {2021},
publisher = {GitHub}
}
1. 如何修改预设尺寸?
修改size_list_CN.csv后再次运行 app.py 即可,其中第一列为尺寸名,第二列为高度,第三列为宽度。
如果您有任何问题,请发邮件至 zeyi.lin@swanhub.co
Zeyi-Lin、SAKURA-CAT、Feudalman、swpfY、Kaikaikaifang、ShaohonChen、KashiwaByte