Files
dzy1128-ComfyUI-Vector-Engine/test.py
T
2025-12-01 15:50:54 +08:00

138 lines
4.4 KiB
Python

import http.client
import json
import base64
import time
conn = http.client.HTTPSConnection("api.vectorengine.ai")
with open("./assets/girl.png", "rb") as f:
girl_data = base64.b64encode(f.read()).decode('utf-8')
with open("./assets/boy.jpg", "rb") as f:
boy_data = base64.b64encode(f.read()).decode('utf-8')
payload = json.dumps({
"contents": [
{
"role": "user",
"parts": [
{
"text": "'Picture 1 shows a girl, and Picture 2 shows a boy. Generate a photo of them hugging."
},
{
"inline_data": {
"mime_type": "image/png",
"data": girl_data
}
},
{
"inline_data": {
"mime_type": "image/jpeg",
"data": boy_data
}
}
]
}
],
"generationConfig": {
"responseModalities": [
"TEXT",
"IMAGE"
],
"imageConfig": {
"aspectRatio": "2:3",
"imageSize": "1K"
}
}
})
headers = {
'Authorization': 'Bearer sk-RZBLe4v8MolmD3fwOd6vdRTCaj7PohDhf4f44UNgWHEAA4zF',
'Content-Type': 'application/json'
}
# 记录开始时间
print("开始生成图片...")
start_time = time.time()
conn.request("POST", "/v1beta/models/gemini-3-pro-image-preview:generateContent?key=sk-RZBLe4v8MolmD3fwOd6vdRTCaj7PohDhf4f44UNgWHEAA4zF", payload, headers)
res = conn.getresponse()
data = res.read()
# 记录结束时间并计算耗时
end_time = time.time()
generation_time = end_time - start_time
print(f"✓ 图片生成完成!")
print(f"⏱️ 总耗时: {generation_time:.2f} 秒 ({generation_time:.3f}s)")
# 解析响应
response_json = json.loads(data.decode("utf-8"))
#print("响应内容:", json.dumps(response_json, indent=2, ensure_ascii=False))
# 提取并保存图片
saved_images = 0
try:
# 根据 API 响应结构提取图片数据(可能需要根据实际响应调整路径)
candidates = response_json.get("candidates", [])
print(f"\n候选数量: {len(candidates)}")
for i, candidate in enumerate(candidates):
print(f"\n处理候选 {i}:")
print(f"候选结构: {list(candidate.keys())}")
content = candidate.get("content", {})
print(f"内容结构: {list(content.keys())}")
parts = content.get("parts", [])
print(f"Parts 数量: {len(parts)}")
for j, part in enumerate(parts):
print(f"\nPart {j} 的键: {list(part.keys())}")
# 检查不同的可能字段名
if "inline_data" in part:
print("找到 inline_data!")
img_base64 = part["inline_data"]["data"]
mime_type = part["inline_data"].get("mime_type", "image/jpeg")
elif "inlineData" in part:
print("找到 inlineData!")
img_base64 = part["inlineData"]["data"]
mime_type = part["inlineData"].get("mimeType", "image/jpeg")
elif "data" in part:
print("找到 data 字段!")
img_base64 = part["data"]
mime_type = part.get("mimeType", part.get("mime_type", "image/jpeg"))
else:
print(f"未找到图片数据,part 内容: {part}")
continue
# 解码 base64 并保存图片
img_bytes = base64.b64decode(img_base64)
# 根据 mime_type 确定文件扩展名
ext = "jpg" if "jpeg" in mime_type.lower() else mime_type.split("/")[-1]
output_path = f"./assets/output_image_{i}_{j}.{ext}"
with open(output_path, "wb") as f:
f.write(img_bytes)
# 计算图片大小
img_size_kb = len(img_bytes) / 1024
print(f"✓ 图片已保存到: {output_path}")
print(f" 文件大小: {img_size_kb:.2f} KB")
saved_images += 1
# 显示总结信息
print(f"\n{'='*50}")
print(f"📊 生成总结:")
print(f" - 成功生成并保存: {saved_images} 张图片")
print(f" - 总耗时: {generation_time:.2f} 秒")
if saved_images > 0:
print(f" - 平均每张耗时: {generation_time/saved_images:.2f} 秒")
print(f"{'='*50}")
except Exception as e:
print(f"\n❌ 提取图片时出错: {e}")
import traceback
traceback.print_exc()