# API Docs [English](api_EN.md) / 中文 ## 目录 - [开始之前:开启后端服务](#开始之前开启后端服务) - [接口功能说明](#接口功能说明) - [1.生成证件照(底透明)](#1生成证件照底透明) - [2.添加背景色](#2添加背景色) - [3.生成六寸排版照](#3生成六寸排版照) - [4.人像抠图](#4人像抠图) - [5.图像加水印](#5图像加水印) - [6.设置图像KB大小](#6设置图像KB大小) - [7.证件照裁切](#7证件照裁切) - [cURL 请求示例](#curl-请求示例) - [Python 请求示例](#python-请求示例) ## 开始之前:开启后端服务 在请求 API 之前,请先运行后端服务 ```bash python deploy_api.py ```
## 接口功能说明 ### 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`,则不返回该参数 |
## cURL 请求示例 cURL 是一个命令行工具,用于使用各种网络协议传输数据。以下是使用 cURL 调用这些 API 的示例。 ### 1. 生成证件照(底透明) ```bash curl -X POST "http://127.0.0.1:8080/idphoto" \ -F "input_image=@demo/images/test0.jpg" \ -F "height=413" \ -F "width=295" \ -F "human_matting_model=modnet_photographic_portrait_matting" \ -F "face_detect_model=mtcnn" \ -F "hd=true" \ -F "dpi=300" \ -F "face_alignment=true" \ -F 'head_height_ratio=0.45' \ -F 'head_measure_ratio=0.2' \ -F 'top_distance_min=0.1' \ -F 'top_distance_max=0.12' \ -F 'sharpen_strength=0' \ -F 'saturation_strength=0' \ -F 'brightness_strength=10' \ -F 'contrast_strength=0' ``` ### 2. 添加背景色 ```bash curl -X POST "http://127.0.0.1:8080/add_background" \ -F "input_image=@test.png" \ -F "color=638cce" \ -F "kb=200" \ -F "render=0" \ -F "dpi=300" ``` ### 3. 生成六寸排版照 ```bash curl -X POST "http://127.0.0.1:8080/generate_layout_photos" \ -F "input_image=@test.jpg" \ -F "height=413" \ -F "width=295" \ -F "kb=200" \ -F "dpi=300" ``` ### 4. 人像抠图 ```bash curl -X POST "http://127.0.0.1:8080/human_matting" \ -F "input_image=@demo/images/test0.jpg" \ -F "human_matting_model=modnet_photographic_portrait_matting" \ -F "dpi=300" ``` ### 5. 图片加水印 ```bash curl -X 'POST' \ 'http://127.0.0.1:8080/watermark?size=20&opacity=0.5&angle=30&color=%23000000&space=25' \ -H 'accept: application/json' \ -H 'Content-Type: multipart/form-data' \ -F 'input_image=@demo/images/test0.jpg;type=image/jpeg' \ -F 'text=Hello' \ -F 'dpi=300' ``` ### 6. 设置图像KB大小 ```bash curl -X 'POST' \ 'http://127.0.0.1:8080/set_kb' \ -H 'accept: application/json' \ -H 'Content-Type: multipart/form-data' \ -F 'input_image=@demo/images/test0.jpg;type=image/jpeg' \ -F 'kb=50' \ -F 'dpi=300' ``` ### 7. 证件照裁切 ```bash curl -X 'POST' 'http://127.0.0.1:8080/idphoto_crop' \ -H 'accept: application/json' \ -H 'Content-Type: multipart/form-data' \ -F 'input_image=@idphoto_matting.png;type=image/png' \ -F 'height=413' \ -F 'width=295' \ -F 'face_detect_model=mtcnn' \ -F 'hd=true' \ -F 'dpi=300' \ -F 'head_height_ratio=0.45' \ -F 'head_measure_ratio=0.2' \ -F 'top_distance_min=0.1' \ -F 'top_distance_max=0.12' ```
## Python 请求示例 #### 1.生成证件照(底透明) ```python import requests url = "http://127.0.0.1:8080/idphoto" input_image_path = "demo/images/test0.jpg" files = {"input_image": open(input_image_path, "rb")} data = { "height": 413, "width": 295, "human_matting_model": "modnet_photographic_portrait_matting", "face_detect_model": "mtcnn", "hd": True, "dpi": 300, "face_alignment": True, "head_measure_ratio": 0.2, "head_height_ratio": 0.45, "top_distance_max": 0.12, "top_distance_min": 0.1, "brightness_strength": 0, "contrast_strength": 0, "sharpen_strength": 0, "saturation_strength": 0, } response = requests.post(url, params=params, files=files, data=data).json() # response为一个json格式字典,包含status、image_base64_standard和image_base64_hd三项 print(response) ``` #### 2.添加背景色 ```python 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, "render": 0, "dpi": 300, } response = requests.post(url, files=files, data=data).json() # response为一个json格式字典,包含status和image_base64 print(response) ``` #### 3.生成六寸排版照 ```python 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, "dpi": 300, } response = requests.post(url, files=files, data=data).json() # response为一个json格式字典,包含status和image_base64 print(response) ``` #### 4.人像抠图 ```python import requests url = "http://127.0.0.1:8080/human_matting" input_image_path = "test.jpg" files = {"input_image": open(input_image_path, "rb")} data = { "human_matting_model": "modnet_photographic_portrait_matting", "dpi": 300, } response = requests.post(url, files=files, data=data).json() # response为一个json格式字典,包含status和image_base64 print(response) ``` #### 5.图片加水印 ```python import requests # 设置请求的 URL 和参数 url = "http://127.0.0.1:8080/watermark" params = { "size": 20, "opacity": 0.5, "angle": 30, "color": "#000000", "space": 25, } # 设置文件和其他表单数据 input_image_path = "demo/images/test0.jpg" files = {"input_image": open(input_image_path, "rb")} data = {"text": "Hello", "dpi": 300} # 发送 POST 请求 response = requests.post(url, params=params, files=files, data=data) # 检查响应 if response.ok: # 输出响应内容 print(response.json()) else: # 输出错误信息 print(f"Request failed with status code {response.status_code}: {response.text}") ``` ### 6. 设置图像KB大小 ```python import requests # 设置请求的 URL url = "http://127.0.0.1:8080/set_kb" # 设置文件和其他表单数据 input_image_path = "demo/images/test0.jpg" files = {"input_image": open(input_image_path, "rb")} data = {"kb": 50, "dpi": 300} # 发送 POST 请求 response = requests.post(url, files=files, data=data) # 检查响应 if response.ok: # 输出响应内容 print(response.json()) else: # 输出错误信息 print(f"Request failed with status code {response.status_code}: {response.text}") ``` ### 7. 证件照裁切 ```python import requests # 设置请求的 URL url = "http://127.0.0.1:8080/idphoto_crop" # 设置文件和其他表单数据 input_image_path = "idphoto_matting.png" files = {"input_image": ("idphoto_matting.png", open(input_image_path, "rb"), "image/png")} data = { "height": 413, "width": 295, "face_detect_model": "mtcnn", "hd": "true", "dpi": 300, "head_measure_ratio": 0.2, "head_height_ratio": 0.45, "top_distance_max": 0.12, "top_distance_min": 0.1, } # 发送 POST 请求 response = requests.post(url, files=files, data=data) # 检查响应 if response.ok: # 输出响应内容 print(response.json()) else: # 输出错误信息 print(f"Request failed with status code {response.status_code}: {response.text}") ```