介绍
我使用的工具就是HivisionIDPhoto。
HivisionIDPhoto是一套完善的模型工作流程,实现对多种用户拍照场景的识别、抠图与证件照生成。
HivisionIDPhoto特色:
轻量级抠图
根据不同尺寸规格生成不同的标准证件照、六寸排版照
能美颜,可调节美颜参数
易于集成,官方提供了清晰的 API 文档和示例代码,方便开发者快速集成到自己的项目中
跨平台支持:无论是 Windows、macOS 还是 Linux 用户都能轻松使用
生成结果直接下载打印,方便快捷
使用案例
可调参数等等
支持多种尺寸
Window安装(不推荐)
Window安装总是有莫名其妙的错误,推荐建个虚拟机使用Docker安装
安装前提:
有python环境,版本大于3.10,但不建议使用最新版本,建议使用稳定版
1.克隆或者下载HivisionIDPhoto代码(文末附网盘地址)
git clone https://github.com/Zeyi-Lin/HivisionIDPhotos.git
2.进入代码所在目录打开CMD
执行命令安装依赖
pip install -r requirements.txt
pip install -r requirements-app.txt
安装慢的话指定一个镜像源
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/
pip install -r requirements-app.txt -i https://mirrors.aliyun.com/pypi/simple/
两个命令都执行成功就可以往下了
3.下载权重文件并放到权重文件夹
下载地址(网盘里也有),文件名hivision_modnet.onnx
https://github.com/Zeyi-Lin/HivisionIDPhotos/releases/tag/pretrained-model
liangg
4.运行demo
python app.py
启动成功后,浏览器访问:http://localhost:7860
搞定
5.运行 API 后端服务
接口访问示例及接口文档往下看
python deploy_api.py
docker安装(强烈推荐)
- 拉取镜像
docker pull linzeyi/hivision_idphotos
- 运行官方Demo
docker run -d \
-p 7860:7860 \
--name hivision-idphotos \
linzeyi/hivision_idphotos
搞定,直接访问,本地访问 http://127.0.0.1:7860 即可,其他的ip+端口即可。
3.启动API后端服务(如果需要)
docker run -d \
-p 8080:8080 \
-name hivision-idphotos-api \
linzeyi/hivision_idphotos python3 deploy_api.py
官方API接口文档
1.生成证件照(底透明)
接口名:idphoto
生成证件照
接口的逻辑是发送一张 RGB 图像,输出一张标准证件照和一张高清证件照:
- 高清证件照:根据
size
的宽高比例制作的证件照,文件名为output_image_dir
增加_hd
后缀 - 标准证件照:尺寸等于
size
,由高清证件照缩放而来,文件名为output_image_dir
需要注意的是,生成的两张照片都是透明的(RGBA 四通道图像),要生成完整的证件照,还需要下面的添加背景色
接口。
问:为什么这么设计?
答:因为在实际产品中,经常用户会频繁切换底色预览效果,直接给透明底图像,由前端 js 代码合成颜色是更好体验的做法。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGB三通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGB三通道图像。 |
height | int | 否 | 标准证件照高度,默认为413 |
width | int | 否 | 标准证件照宽度,默认为295 |
human_matting_model | str | 否 | 人像分割模型,默认为modnet_photographic_portrait_matting 。可选值为modnet_photographic_portrait_matting 、hivision_modnet 、rmbg-1.4 、birefnet-v1-lite |
face_detect_model | str | 否 | 人脸检测模型,默认为mtcnn 。可选值为mtcnn 、face_plusplus 、retinaface-resnet50 |
hd | bool | 否 | 是否生成高清证件照,默认为true |
dpi | int | 否 | 图像分辨率,默认为300 |
face_alignment | bool | 否 | 是否进行人脸对齐,默认为true |
head_measure_ratio | float | 否 | 面部面积与照片面积的比例,默认为0.2 |
head_height_ratio | float | 否 | 面部中心与照片顶部的高度比例,默认为0.45 |
top_distance_max | float | 否 | 头部与照片顶部距离的比例最大值,默认为0.12 |
top_distance_min | float | 否 | 头部与照片顶部距离的比例最小值,默认为0.1 |
brightness_strength | float | 否 | 亮度调整强度,默认为0 |
contrast_strength | float | 否 | 对比度调整强度,默认为0 |
sharpen_strength | float | 否 | 锐化调整强度,默认为0 |
saturation_strength | float | 否 | 饱和度调整强度,默认为0 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64_standard | str | 标准证件照的base64编码 |
image_base64_hd | str | 高清证件照的base64编码。如hd 参数为false ,则不返回该参数 |
2.添加背景色
接口名:add_background
添加背景色
接口的逻辑是接收一张 RGBA 图像(透明图),根据color
添加背景色,合成一张 JPG 图像。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGBA四通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGBA四通道图像。 |
color | str | 否 | 背景色HEX值,默认为000000 |
kb | int | 否 | 输出照片的 KB 值,默认为None ,即不对图像进行KB调整。 |
render | int | 否 | 渲染模式,默认为0 。可选值为0 、1 、2 ,分别对应纯色 、上下渐变 、中心渐变 。 |
dpi | int | 否 | 图像分辨率,默认为300 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 添加背景色之后的图像的base64编码 |
3.生成六寸排版照
接口名:generate_layout_photos
生成六寸排版照
接口的逻辑是接收一张 RGB 图像(一般为添加背景色之后的证件照),根据size
进行照片排布,然后生成一张六寸排版照。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGB三通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGB三通道图像。 |
height | int | 否 | 输入图像的高度,默认为413 |
width | int | 否 | 输入图像的宽度,默认为295 |
kb | int | 否 | 输出照片的 KB 值,默认为None ,即不对图像进行KB调整。 |
dpi | int | 否 | 图像分辨率,默认为300 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 六寸排版照的base64编码 |
4.人像抠图
接口名:human_matting
人像抠图
接口的逻辑是接收一张 RGB 图像,输出一张标准抠图人像照和高清抠图人像照(无任何背景填充)。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 是 | 传入的图像文件,图像文件为需为RGB三通道图像。 |
human_matting_model | str | 否 | 人像分割模型,默认为modnet_photographic_portrait_matting 。可选值为modnet_photographic_portrait_matting 、hivision_modnet 、rmbg-1.4 、birefnet-v1-lite |
dpi | int | 否 | 图像分辨率,默认为300 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 抠图人像照的base64编码 |
5.图像加水印
接口名:watermark
图像加水印
接口的功能是接收一个水印文本,然后在原图上添加指定的水印。用户可以指定水印的位置、透明度和大小等属性,以便将水印无缝地融合到原图中。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGB三通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGB三通道图像。 |
text | str | 否 | 水印文本,默认为Hello |
size | int | 否 | 水印字体大小,默认为20 |
opacity | float | 否 | 水印透明度,默认为0.5 |
angle | int | 否 | 水印旋转角度,默认为30 |
color | str | 否 | 水印颜色,默认为#000000 |
space | int | 否 | 水印间距,默认为25 |
dpi | int | 否 | 图像分辨率,默认为300 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 添加水印之后的图像的base64编码 |
6.设置图像KB大小
接口名:set_kb
设置图像KB大小
接口的功能是接收一张图像和目标文件大小(以KB为单位),如果设置的KB值小于原文件,则调整压缩率;如果设置的KB值大于源文件,则通过给文件头添加信息的方式调大KB值,目标是让图像的最终大小与设置的KB值一致。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGB三通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGB三通道图像。 |
kb | int | 否 | 输出照片的 KB 值,默认为None ,即不对图像进行KB调整。 |
dpi | int | 否 | 图像分辨率,默认为300 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 设置KB大小之后的图像的base64编码 |
7.证件照裁切
接口名:idphoto_crop
证件照裁切
接口的功能是接收一张 RBGA 图像(透明图),输出一张标准证件照和一张高清证件照。
请求参数:
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
input_image | file | 和input_image_base64 二选一 | 传入的图像文件,图像文件为需为RGBA四通道图像。 |
input_image_base64 | str | 和input_image 二选一 | 传入的图像文件的base64编码,图像文件为需为RGBA四通道图像。 |
height | int | 否 | 标准证件照高度,默认为413 |
width | int | 否 | 标准证件照宽度,默认为295 |
face_detect_model | str | 否 | 人脸检测模型,默认为mtcnn 。可选值为mtcnn 、face_plusplus 、retinaface-resnet50 |
hd | bool | 否 | 是否生成高清证件照,默认为true |
dpi | int | 否 | 图像分辨率,默认为300 |
head_measure_ratio | float | 否 | 面部面积与照片面积的比例,默认为0.2 |
head_height_ratio | float | 否 | 面部中心与照片顶部的高度比例,默认为0.45 |
top_distance_max | float | 否 | 头部与照片顶部距离的比例最大值,默认为0.12 |
top_distance_min | float | 否 | 头部与照片顶部距离的比例最小值,默认为0.1 |
返回参数:
参数名 | 类型 | 说明 |
---|---|---|
status | int | 状态码,true 表示成功 |
image_base64 | str | 证件照裁切之后的图像的base64编码 |
image_base64_hd | str | 高清证件照裁切之后的图像的base64编码,如hd 参数为false ,则不返回该参数 |
请求示例
使用apifox请求==》生成证件照(底透明)示例
// 将接口返回数据封装成所需的结构
var resp = {
image_base64_standard: pm.response.json().image_base64_standard
}
// HTML 模板字符串
var template = `
<html>
<img src="{{image_base64_standard}}" />
</html>
`;
// 设置可视化数据,传入模板和解析对象
pm.visualizer.set(template, resp);
点击请求结果中的Visualize即可查看
云盘资料
链接: https://pan.baidu.com/s/17Z2vf1RrLlvvVO7zsL45Bg?pwd=ng66 提取码: ng66