HivisionIDPhotos / requests_api.py
TheEeeeLin's picture
refactor
ca46a75
raw
history blame
4.55 kB
import requests
import base64
import argparse
import os
def base64_save(_base64_image_data, save_path):
# 解码 Base64 数据并保存为 PNG 文件
img_data = base64.b64decode(_base64_image_data)
with open(save_path, "wb") as file:
file.write(img_data)
# 读取本地图像文件并转换为Base64编码
def file_2_base64(file_path):
with open(file_path, "rb") as file:
encoded_string = base64.b64encode(file.read()).decode("utf-8")
return encoded_string
# 发送请求到 /idphoto 接口
def request_idphoto(file_path, height, width):
files = {"input_image": open(file_path, "rb")}
data = {"height": int(height), "width": int(width)}
response = requests.post(url, files=files, data=data)
return response.json()
# 发送请求到 /add_background 接口
def request_add_background(file_path, color, kb=None):
files = {"input_image": open(file_path, "rb")}
data = {"color": str(color), "kb": kb}
response = requests.post(url, files=files, data=data)
return response.json()
# 发送请求到 /generate_layout_photos 接口
def request_generate_layout_photos(file_path, height, width, kb=None):
files = {"input_image": open(file_path, "rb")}
data = {"height": height, "width": width, "kb": kb}
response = requests.post(url, files=files, data=data)
return response.json()
# 示例调用
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="HivisionIDPhotos 证件照制作推理程序。"
)
parser.add_argument(
"-u", "--url", help="API 服务的 URL", default="http://localhost:8080"
)
parser.add_argument(
"-t",
"--type",
help="请求 API 的种类,有 idphoto、add_background 和 generate_layout_photos 可选",
default="idphoto",
)
parser.add_argument("-i", "--input_image_dir", help="输入图像路径", required=True)
parser.add_argument("-o", "--output_image_dir", help="保存图像路径", required=True)
parser.add_argument("--height", help="证件照尺寸-高", default=413)
parser.add_argument("--width", help="证件照尺寸-宽", default=295)
parser.add_argument("-c", "--color", help="证件照背景色", default="638cce")
parser.add_argument(
"-k", "--kb", help="输出照片的 KB 值,仅对换底和制作排版照生效", default=None
)
args = parser.parse_args()
url = f"{args.url}/{args.type}" # 替换为实际的接口 URL
# color = hex_to_rgb(args.color)
# color = (color[2], color[1], color[0])
if args.type == "idphoto":
# 调用 /idphoto 接口
idphoto_response = request_idphoto(
args.input_image_dir, int(args.height), int(args.width)
)
if idphoto_response["status"]:
# 解码 Base64 数据并保存为 PNG 文件
base64_image_data_standard = idphoto_response["image_base64_standard"]
base64_image_data_standard_hd = idphoto_response["image_base64_hd"]
file_name, file_extension = os.path.splitext(args.output_image_dir)
# 定义新的文件路径(在原有的文件名后添加"_hd")
new_file_name = file_name + "_hd" + file_extension
# 解码 Base64 数据并保存为 PNG 文件
base64_save(base64_image_data_standard, args.output_image_dir)
base64_save(base64_image_data_standard_hd, new_file_name)
print(f"请求{args.type}接口成功,已保存图像。")
else:
print("人脸数量不等于 1,请上传单张人脸的图像。")
elif args.type == "add_background":
# 调用 /add_background 接口
add_background_response = request_add_background(
args.input_image_dir, args.color, kb=args.kb
)
base64_image_data = add_background_response["image_base64"]
base64_save(base64_image_data, args.output_image_dir)
print(f"请求{args.type}接口成功,已保存图像。")
elif args.type == "generate_layout_photos":
# 调用 /generate_layout_photos 接口
generate_layout_response = request_generate_layout_photos(
args.input_image_dir, int(args.height), int(args.width), args.kb
)
base64_image_data = generate_layout_response["image_base64"]
base64_save(base64_image_data, args.output_image_dir)
print(f"请求{args.type}接口成功,已保存图像。")
else:
print("不支持的 API 类型,请检查输入参数。")