Files
HivisionIDPhotos/scripts/api/requests_api.py
T
2024-09-05 18:19:20 +08:00

120 lines
4.4 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 类型,请检查输入参数。")