Spaces:
Running
Running
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 类型,请检查输入参数。") | |