File size: 3,482 Bytes
d5d20be
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import requests
import base64
from PIL import Image
from io import BytesIO
import argparse
import os

def base64_save(base64_image_data, save_path):
    # 解码Base64数据并保存为PNG文件
    img_data = base64.b64decode(base64_image_data)
    img = Image.open(BytesIO(img_data))
    # 保存为本地PNG文件
    img.save(save_path, "PNG")


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="HivisionIDPhotos证件照制作推理程序。")

    parser.add_argument("-u", "--url", help="API服务的URL", default="http://127.0.0.1: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("-s", "--size", help="证件照尺寸", default="(413,295)")
    parser.add_argument("-c", "--color", help="证件照背景色", default="(255,255,255)")

    args = parser.parse_args()

    url = f"{args.url}/{args.type}"  # 替换为实际的接口URL
    files = {'input_image': (open(args.input_image_dir, 'rb'))}  # 替换为实际的文件路径和文件名
    data = {"size": args.size, "color": args.color}

    response = requests.post(url, data=data, files=files)

    if response.status_code == 200:
        # 获取Base64编码的图像数据
        if args.type == "idphoto":
            response_json = response.json()

            status = response_json["status"]
            if status:

                base64_image_data_standard = response_json["img_output_standard"]
                base64_image_data_standard_hd = response_json["img_output_standard_hd"]

                # 解码Base64数据并保存为PNG文件
                base64_save(base64_image_data_standard, args.output_image_dir)

                file_name, file_extension = os.path.splitext(args.output_image_dir)
                # 定义新的文件路径(在原有的文件名后添加"_hd")
                new_file_name = file_name + "_hd" + file_extension

                base64_save(base64_image_data_standard_hd, new_file_name)


                print(f"标准照保存至'{args.output_image_dir}',高清照保存至'{new_file_name}'")

            else:
                print('人脸数量不等于1,请上传单张人脸的图像。')

        elif args.type == "add_background":
            response_json = response.json()

            status = response_json["status"]

            if status:
                base64_image_data = response_json["image"]
                base64_save(base64_image_data, args.output_image_dir)
                print(f"增加背景后的照片保存至'{args.output_image_dir}'。")
            else:
                print(f'遇到了一些问题,报错为{response_json["error"]}')

        elif args.type == "generate_layout_photos":
            response_json = response.json()

            status = response_json["status"]

            if status:
                base64_image_data = response_json["image"]
                base64_save(base64_image_data, args.output_image_dir)
                print(f"排版照保存至'{args.output_image_dir}'。")
            else:
                print(f'遇到了一些问题,报错为{response_json["error"]}')

    else:
        print("请求失败")