图像修复API

一、请求信息

      请求URL:https://api.shiliuai.com/api/inpaint/v1

      请求方式:POST

      请求参数-请求头(Header):

参数 类型 说明
Content-Type string application/json
APIKEY string 您的API KEY

      请求参数-请求内容(Body):

参数 类型 说明
image_base64 string, optional base64编码的图片文件,必须提供image_base64或image_id其中一个, 图片文件要小于20M,图片的长边不能超过4096像素
image_id string, optional 图片id,对于已经请求过的图片,如果需要改变蒙版,可以使用id而无需再上传image_base64
mask_base64 string, optional base64编码的蒙版文件,必须提供mask_base64或rectangles其中一个, 蒙版图片为灰度图,黑色区域表示不需要修复,白色区域表示需要修复
rectangles list, optional 矩形区域,可以是多个,格式为[{"x1":x1, "y1":y1, "x2":x2, "y2"y2}]

二、返回信息

参数 说明
code 错误码
msg 错误信息(英文)
msg_cn 错误信息(中文)
result_base64 修复后的图片的base64编码,jpg格式,(当code==0时会有该返回值)
image_id 图片id,(当code==0时会有该返回值)

      错误码说明:

错误码 说明
0 成功
1 图片错误
2 处理错误
3 服务器繁忙
4 参数错误,具体错误看msg或msg_cn
5 未知错误
101 API-KEY不正确
102 未知用户
103 积分已用完
104 扣除积分失败

三、示例代码

Python 代码示例:

import requests
import base64
import cv2
import json
import numpy as np


api_key = '******'  # 你的API KEY
image_path = '...'  # 图片路径
mask_path = '...'  # 蒙版路径

"""
第一次用image_base64请求,用mask_base64
"""
with open(image_path, 'rb') as fp:
    image_base64 = base64.b64encode(fp.read()).decode('utf8')

with open(mask_path, 'rb') as fp:
    mask_base64 = base64.b64encode(fp.read()).decode('utf8')

url = 'https://api.shiliuai.com/api/inpaint/v1'
headers = {'APIKEY': api_key, "Content-Type": "application/json"}
data = {
    "image_base64": image_base64,
    "mask_base64": mask_base64
    }

response = requests.post(url=url, headers=headers, json=data)
response = json.loads(response.content)
"""
成功:{'code': 0, 'msg': 'OK', 'msg_cn': '成功', 'result_base64': result_base64, 'image_id': image_id}
or
失败:{'code': error_code, 'msg': error_msg, 'msg_cn': 错误信息}
"""
image_id = response['image_id']
result_base64 = response['result_base64']
file_bytes = base64.b64decode(result_base64)
f = open('result.jpg', 'wb')
f.write(file_bytes)
f.close()

image = np.asarray(bytearray(file_bytes), dtype=np.uint8)
image = cv2.imdecode(image, cv2.IMREAD_UNCHANGED)
cv2.imshow('result', image)
cv2.waitKey(0)

"""
第二次用image_id请求,用rectangles参数
"""
rectangles = [{'x1': 298, 'y1': 250, 'x2': 450, 'y2': 306}, {'x1': 616, 'y1': 519, 'x2': 732, 'y2': 560}]

data = {
    "image_id": image_id,
    "rectangles": rectangles
    }

response = requests.post(url=url, headers=headers, json=data)
                            

PHP 代码示例:

$url = "https://api.shiliuai.com/api/inpaint/v1";
$method = "POST";
$apikey = "******";
$header = array();
array_push($header, "APIKEY:" . $apikey);
array_push($header, "Content-Type:application/json");

$image_path = "...";
$handle = fopen($image_path, "r");
$image = fread($handle, filesize($image_path));
fclose($handle);
$image_base64 = base64_encode($image);

$mask_path = "...";
$handle = fopen($mask_path, "r");
$mask = fread($handle, filesize($mask_path));
fclose($handle);
$mask_base64 = base64_encode($mask);

$data = array(
  "image_base64"=> $image_base64,
  "mask_base64"=> $mask_base64
);
$post_data = json_encode($data);

$curl = curl_init();
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, $method);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);

$response = curl_exec($curl);
var_dump($response);