File size: 3,231 Bytes
5d607a9
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import requests
import base64
import time


class VirtualTryOnAPI:
    def __init__(self, auth_token):
        self.base_url = "https://api.klingai.com"
        self.auth_token = auth_token

    def create_task(self, human_image_path_or_base64, cloth_image_path_or_base64,

                    model_name="kolors - virtual - try - on - v1", callback_url=None):
        headers = {
            "Content-Type": "application/json",
            "Authorization": self.auth_token
        }
        data = {
            "model_name": model_name
        }
        if "http" in human_image_path_or_base64:
            data["human_image"] = human_image_path_or_base64
        else:
            if isinstance(human_image_path_or_base64, str) and human_image_path_or_base64.startswith("data:image"):
                data["human_image"] = human_image_path_or_base64
            else:
                with open(human_image_path_or_base64, "rb") as f:
                    img_data = f.read()
                img_base64 = base64.b64encode(img_data).decode()
                data["human_image"] = "data:image/png;base64," + img_base64
        if "http" in cloth_image_path_or_base64:
            data["cloth_image"] = cloth_image_path_or_base64
        else:
            if isinstance(cloth_image_path_or_base64, str) and cloth_image_path_or_base64.startswith("data:image"):
                data["cloth_image"] = cloth_image_path_or_base64
            else:
                with open(cloth_image_path_or_base64, "rb") as f:
                    img_data = f.read()
                img_base64 = base64.b64encode(img_data).decode()
                data["cloth_image"] = "data:image/png;base64," + img_base64
        if callback_url:
            data["callback_url"] = callback_url
        response = requests.post(self.base_url + "/v1/images/kolors - virtual - try - on", headers=headers, json=data)
        return response.json()

    def query_task(self, task_id):
        headers = {
            "Content-Type": "application/json",
            "Authorization": self.auth_token
        }
        url = self.base_url + "/v1/images/kolors - virtual - try - on/" + task_id
        response = requests.get(url, headers=headers)
        return response.json()


if __name__ == "__main__":
    # 假设你的鉴权信息
    auth_token = "c1748494bc5d42ed8db2b2d24ceb1a2b"
    api = VirtualTryOnAPI(auth_token)
    # 创建任务
    human_image_path = "model.jpg"
    cloth_image_path = "cloth.jpeg"
    task_result = api.create_task(human_image_path, cloth_image_path)
    print("创建任务结果:", task_result)
    task_id = task_result["data"]["task_id"]
    # 查询任务直到完成
    while True:
        query_result = api.query_task(task_id)
        status = query_result["data"]["task_status"]
        print("任务状态:", status)
        if status == "succeed":
            for image in query_result["data"]["task_result"]["images"]:
                print("生成图片URL:", image["url"])
            break
        elif status == "failed":
            print("任务失败原因:", query_result["data"]["task_status_msg"])
            break
        time.sleep(5)