Python 示例
完整的 Python 代码示例,实现从上传到获取 3D 结果的完整流程。
安装依赖
bash
pip install requests完整代码
python
import requests
import hashlib
import time
# 配置
API_KEY = "YOUR_API_KEY"
BASE_URL = "https://openapi.kujiale.com"
APP_UID = "user123"
def get_upload_token():
"""获取上传 Token"""
url = f"{BASE_URL}/v2/aholo/upload/token"
params = {"appuid": APP_UID}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.post(url, params=params, headers=headers)
data = resp.json()
if data["c"] != "0":
raise Exception(f"获取 Token 失败: {data}")
return data["d"]["globalDomain"], data["d"]["ousToken"]
def upload_file(global_domain, ous_token, file_path):
"""上传文件并返回 URL"""
# 计算 MD5
with open(file_path, "rb") as f:
file_data = f.read()
md5 = hashlib.md5(file_data).hexdigest()
# 上传
url = f"https://{global_domain}/ous/api/v2/single/upload"
headers = {"ous-token-v2": ous_token}
with open(file_path, "rb") as f:
files = {"file": f}
data = {"md5": md5}
resp = requests.post(url, headers=headers, files=files, data=data)
result = resp.json()
if result["c"] != "0":
raise Exception(f"上传失败: {result}")
# 轮询状态
status_url = f"https://{global_domain}/ous/api/v2/upload/status"
for _ in range(50): # 最多等待 10秒
resp = requests.get(status_url, headers=headers)
data = resp.json()["d"]
if data["status"] == 5: # 成功
return data["url"]
elif data["status"] in [6, 8]: # 失败
raise Exception(f"上传失败: status={data['status']}")
time.sleep(0.2)
raise Exception("上传超时")
def create_3d_gen_project(image_url, prompt):
"""创建 3D 生成项目"""
url = f"{BASE_URL}/v2/aholo/project/create-3d-gen"
params = {"appuid": APP_UID}
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
payload = {
"projectName": "AI Generated 3D",
"prompt": prompt,
"resources": [{
"name": "input.jpg",
"type": 0,
"url": image_url,
"meta": {"width": 1920, "height": 1080}
}]
}
resp = requests.post(url, params=params, headers=headers, json=payload)
data = resp.json()
if data["c"] != "0":
raise Exception(f"创建项目失败: {data}")
return data["d"] # project_id
def get_project_info(project_id):
"""获取项目信息"""
url = f"{BASE_URL}/v2/aholo/project/info"
params = {"appuid": APP_UID, "projectId": project_id}
headers = {"Authorization": f"Bearer {API_KEY}"}
resp = requests.get(url, params=params, headers=headers)
return resp.json()["d"]
def wait_for_result(project_id, timeout=120):
"""等待项目完成"""
for _ in range(timeout // 3):
info = get_project_info(project_id)
status = info["task"]["status"]
if status == 3: # 完成
return info["task"]["result"]
elif status == 4: # 失败
raise Exception("项目处理失败")
time.sleep(3)
raise Exception("等待超时")
def main():
"""完整流程"""
print("1. 获取上传 Token...")
global_domain, ous_token = get_upload_token()
print("2. 上传图片...")
image_url = upload_file(global_domain, ous_token, "input.jpg")
print(f" 图片 URL: {image_url}")
print("3. 创建 3D 生成项目...")
project_id = create_3d_gen_project(image_url, "生成客厅空间")
print(f" 项目 ID: {project_id}")
print("4. 等待处理完成...")
result = wait_for_result(project_id)
print("5. 结果文件:")
print(f" PLY: {result['plyPath']}")
print(f" SPZ: {result['spzPath']}")
print(f" SOG: {result['sogPath']}")
if __name__ == "__main__":
main()运行
bash
python aholo_example.py输出示例:
1. 获取上传 Token...
2. 上传图片...
图片 URL: https://cdn.aholo.ai/path/to/file.jpg
3. 创建 3D 生成项目...
项目 ID: 3FO4K4WF1A22
4. 等待处理完成...
5. 结果文件:
PLY: https://holo-cos.aholo3d.cn/.../point_cloud.ply
SPZ: https://holo-cos.aholo3d.cn/.../point_cloud_compressed.spz
SOG: https://holo-cos.aholo3d.cn/.../point_cloud.sog