Qwen-Image 参考图url如何解决?

import requests
import time
import json
from PIL import Image
from io import BytesIO

class mcQwenImage:
def init(self, api_key, base_url='https://api-inference.modelscope.cn/'):
self.base_url = base_url
self.api_key = api_key
self.common_headers = {
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
}

def generate_image(self, prompt, image_url, model='Qwen/Qwen-Image-Edit-2511', loras=None):
    """
    调用图像生成 API
    
    参数:
    - prompt: 图像生成提示词
    - image_url: 输入图像 URL 列表
    - model: 使用的模型 ID,默认为 'Qwen/Qwen-Image-Edit-2511'
    - loras: LoRA 配置,可选
    
    返回:
    - task_id: 生成任务 ID
    """
    payload = {
        "model": model,
        "prompt": prompt,
        "image_url": image_url
    }
    
    if loras:
        payload["loras"] = loras
    
    response = requests.post(
        f"{self.base_url}v1/images/generations",
        headers={**self.common_headers, "X-ModelScope-Async-Mode": "true"},
        data=json.dumps(payload, ensure_ascii=False).encode('utf-8')
    )
    response.raise_for_status()
    return response.json()["task_id"]

def get_task_status(self, task_id):
    """
    查询任务状态
    
    参数:
    - task_id: 任务 ID
    
    返回:
    - 完整的任务状态响应
    """
    result = requests.get(
        f"{self.base_url}v1/tasks/{task_id}",
        headers={**self.common_headers, "X-ModelScope-Task-Type": "image_generation"},
    )
    result.raise_for_status()
    return result.json()

def wait_for_result(self, task_id, poll_interval=5):
    """
    等待任务完成并返回结果
    
    参数:
    - task_id: 任务 ID
    - poll_interval: 查询间隔(秒),默认为 5 秒
    
    返回:
    - 生成的图像对象(PIL.Image)
    """
    while True:
        data = self.get_task_status(task_id)
        
        if data["task_status"] == "SUCCEED":
            image_response = requests.get(data["output_images"][0])
            image = Image.open(BytesIO(image_response.content))
            return image
        elif data["task_status"] == "FAILED":
            raise Exception("Image Generation Failed.")
        
        time.sleep(poll_interval)

def generate_and_get_image(self, prompt, image_url, model='Qwen/Qwen-Image-Edit-2511', loras=None, poll_interval=5):
    """
    完整的图像生成流程:调用 API -> 等待结果 -> 返回图像
    
    参数:
    - prompt: 图像生成提示词
    - image_url: 输入图像 URL 列表
    - model: 使用的模型 ID
    - loras: LoRA 配置,可选
    - poll_interval: 查询间隔(秒)
    
    返回:
    - 生成的图像对象(PIL.Image)
    """
    task_id = self.generate_image(prompt, image_url, model, loras)
    return self.wait_for_result(task_id, poll_interval)

示例用法

if name == "main":
# 替换为你的 ModelScope Token
api_key = '换成你自己的 apikey'

# 创建实例
qwen_image = mcQwenImage(api_key)

picform = "十二宫格组成"
pictile = "3x4"
style = "二次元动漫风格"
picsize = "1024x1024"
description = f"""
第一张图,
"""

# 生成图像
prompt = f"""
这是一幅由{picform}的{pictile}的{sytle}风格作品,图片尺寸为{picsize},
{description}
"""
image_url = ["https://modelscope.oss-cn-beijing.aliyuncs.com/Dog.png"] # 找可以上传图像的url

try:
    image = qwen_image.generate_and_get_image(prompt, image_url)
    image.save("result_image.jpg")
    print("图像生成成功,已保存为 result_image.jpg")
except Exception as e:
    print(f"图像生成失败: {e}")

upload1
sample3

posted @ 2026-01-19 12:22  haker1023  阅读(2)  评论(0)    收藏  举报