'commit'
This commit is contained in:
Binary file not shown.
155
dsLightRag/Test/QWenImage/QwenImageKit.py
Normal file
155
dsLightRag/Test/QWenImage/QwenImageKit.py
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
from http import HTTPStatus
|
||||||
|
from urllib.parse import urlparse, unquote
|
||||||
|
from pathlib import PurePosixPath
|
||||||
|
import requests
|
||||||
|
# pip install -U dashscope
|
||||||
|
from dashscope import ImageSynthesis
|
||||||
|
from Config.Config import ALY_LLM_API_KEY
|
||||||
|
|
||||||
|
class QwenImageGenerator:
|
||||||
|
|
||||||
|
def __init__(self, api_key=None):
|
||||||
|
"""初始化生成器
|
||||||
|
|
||||||
|
Args:
|
||||||
|
api_key: 阿里云API密钥,如果为None则使用配置文件中的密钥
|
||||||
|
"""
|
||||||
|
self.api_key = api_key or ALY_LLM_API_KEY
|
||||||
|
self.model = "qwen-image"
|
||||||
|
|
||||||
|
def generate_image(self, prompt, n=1, size='1328*1328'):
|
||||||
|
"""生成图片
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prompt: 图片描述提示词
|
||||||
|
n: 生成图片数量
|
||||||
|
size: 图片尺寸
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 包含生成结果的字典,格式如下:
|
||||||
|
{
|
||||||
|
'success': bool, # 操作是否成功
|
||||||
|
'images': list, # 图片URL列表
|
||||||
|
'error_msg': str # 错误信息,如果成功则为None
|
||||||
|
}
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 调用文心一言图片生成API
|
||||||
|
rsp = ImageSynthesis.call(
|
||||||
|
api_key=self.api_key,
|
||||||
|
model=self.model,
|
||||||
|
prompt=prompt,
|
||||||
|
n=n,
|
||||||
|
size=size
|
||||||
|
)
|
||||||
|
|
||||||
|
# 处理响应结果
|
||||||
|
if rsp.status_code == HTTPStatus.OK:
|
||||||
|
# 提取图片URL
|
||||||
|
image_urls = [result.url for result in rsp.output.results]
|
||||||
|
return {
|
||||||
|
'success': True,
|
||||||
|
'images': image_urls,
|
||||||
|
'error_msg': None
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
error_msg = f'API调用失败: status_code={rsp.status_code}, code={rsp.code}, message={rsp.message}'
|
||||||
|
return {
|
||||||
|
'success': False,
|
||||||
|
'images': [],
|
||||||
|
'error_msg': error_msg
|
||||||
|
}
|
||||||
|
except Exception as e:
|
||||||
|
return {
|
||||||
|
'success': False,
|
||||||
|
'images': [],
|
||||||
|
'error_msg': f'发生异常: {str(e)}'
|
||||||
|
}
|
||||||
|
|
||||||
|
def save_image_from_url(self, image_url, save_dir='./'):
|
||||||
|
"""从URL保存图片到本地
|
||||||
|
|
||||||
|
Args:
|
||||||
|
image_url: 图片URL
|
||||||
|
save_dir: 保存目录
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 包含保存结果的字典
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
# 从URL解析文件名
|
||||||
|
file_name = PurePosixPath(unquote(urlparse(image_url).path)).parts[-1]
|
||||||
|
save_path = f'{save_dir}{file_name}'
|
||||||
|
|
||||||
|
# 下载并保存图片
|
||||||
|
with open(save_path, 'wb+') as f:
|
||||||
|
f.write(requests.get(image_url).content)
|
||||||
|
|
||||||
|
return {
|
||||||
|
'success': True,
|
||||||
|
'file_path': save_path,
|
||||||
|
'error_msg': None
|
||||||
|
}
|
||||||
|
except Exception as e:
|
||||||
|
return {
|
||||||
|
'success': False,
|
||||||
|
'file_path': None,
|
||||||
|
'error_msg': f'保存图片失败: {str(e)}'
|
||||||
|
}
|
||||||
|
|
||||||
|
def generate_and_save_images(self, prompt, n=1, size='1328*1328', save_dir='./'):
|
||||||
|
"""生成图片并保存到本地
|
||||||
|
|
||||||
|
Args:
|
||||||
|
prompt: 图片描述提示词
|
||||||
|
n: 生成图片数量
|
||||||
|
size: 图片尺寸
|
||||||
|
save_dir: 保存目录
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
dict: 包含生成和保存结果的字典
|
||||||
|
"""
|
||||||
|
# 生成图片
|
||||||
|
generate_result = self.generate_image(prompt, n, size)
|
||||||
|
|
||||||
|
if not generate_result['success']:
|
||||||
|
return generate_result
|
||||||
|
|
||||||
|
# 保存所有生成的图片
|
||||||
|
saved_files = []
|
||||||
|
for image_url in generate_result['images']:
|
||||||
|
save_result = self.save_image_from_url(image_url, save_dir)
|
||||||
|
if save_result['success']:
|
||||||
|
saved_files.append(save_result['file_path'])
|
||||||
|
else:
|
||||||
|
return {
|
||||||
|
'success': False,
|
||||||
|
'images': generate_result['images'],
|
||||||
|
'saved_files': saved_files,
|
||||||
|
'error_msg': save_result['error_msg']
|
||||||
|
}
|
||||||
|
|
||||||
|
return {
|
||||||
|
'success': True,
|
||||||
|
'images': generate_result['images'],
|
||||||
|
'saved_files': saved_files,
|
||||||
|
'error_msg': None
|
||||||
|
}
|
||||||
|
|
||||||
|
# 示例使用
|
||||||
|
if __name__ == "__main__":
|
||||||
|
# 创建生成器实例
|
||||||
|
generator = QwenImageGenerator()
|
||||||
|
|
||||||
|
# 示例提示词
|
||||||
|
prompt = """一副典雅庄重的对联悬挂于厅堂之中,房间是个安静古典的中式布置,桌子上放着一些青花瓷,对联上左书"云端书声琅琅跨山海",右书"智脉笔影翩翩启星辰", 横批"东师理想",字体飘逸,中间挂在一着一副中国风的画作,内容是岳阳楼。"""
|
||||||
|
|
||||||
|
print('----生成图片,请等待任务执行----')
|
||||||
|
result = generator.generate_and_save_images(prompt)
|
||||||
|
|
||||||
|
if result['success']:
|
||||||
|
print(f'生成成功,图片URL: {result["images"]}')
|
||||||
|
print(f'保存成功,文件路径: {result["saved_files"]}')
|
||||||
|
else:
|
||||||
|
print(f'生成失败: {result["error_msg"]}')
|
||||||
|
|
@@ -1,30 +0,0 @@
|
|||||||
from http import HTTPStatus
|
|
||||||
from urllib.parse import urlparse, unquote
|
|
||||||
from pathlib import PurePosixPath
|
|
||||||
import requests
|
|
||||||
# pip install -U dashscope
|
|
||||||
from dashscope import ImageSynthesis
|
|
||||||
import os
|
|
||||||
|
|
||||||
prompt = "一副典雅庄重的对联悬挂于厅堂之中,房间是个安静古典的中式布置,桌子上放着一些青花瓷,对联上左书“义本生知人机同道善思新”,右书“通云赋智乾坤启数高志远”, 横批“智启通义”,字体飘逸,中间挂在一着一副中国风的画作,内容是岳阳楼。"
|
|
||||||
|
|
||||||
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
|
|
||||||
api_key = os.getenv("DASHSCOPE_API_KEY")
|
|
||||||
|
|
||||||
print('----同步调用,请等待任务执行----')
|
|
||||||
rsp = ImageSynthesis.call(api_key=api_key,
|
|
||||||
model="qwen-image",
|
|
||||||
prompt=prompt,
|
|
||||||
n=1,
|
|
||||||
size='1328*1328')
|
|
||||||
print('response: %s' % rsp)
|
|
||||||
if rsp.status_code == HTTPStatus.OK:
|
|
||||||
# 在当前目录下保存图片
|
|
||||||
for result in rsp.output.results:
|
|
||||||
file_name = PurePosixPath(unquote(urlparse(result.url).path)).parts[-1]
|
|
||||||
with open('./%s' % file_name, 'wb+') as f:
|
|
||||||
f.write(requests.get(result.url).content)
|
|
||||||
else:
|
|
||||||
print('同步调用失败, status_code: %s, code: %s, message: %s' %
|
|
||||||
(rsp.status_code, rsp.code, rsp.message))
|
|
||||||
|
|
@@ -5,10 +5,11 @@ import requests
|
|||||||
from dashscope import ImageSynthesis
|
from dashscope import ImageSynthesis
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
from Config.Config import ALY_LLM_API_KEY
|
||||||
|
|
||||||
prompt = "一副典雅庄重的对联悬挂于厅堂之中,房间是个安静古典的中式布置,桌子上放着一些青花瓷,对联上左书“义本生知人机同道善思新”,右书“通云赋智乾坤启数高志远”, 横批“智启通义”,字体飘逸,中间挂在一着一副中国风的画作,内容是岳阳楼。"
|
prompt = "一副典雅庄重的对联悬挂于厅堂之中,房间是个安静古典的中式布置,桌子上放着一些青花瓷,对联上左书“义本生知人机同道善思新”,右书“通云赋智乾坤启数高志远”, 横批“智启通义”,字体飘逸,中间挂在一着一副中国风的画作,内容是岳阳楼。"
|
||||||
|
|
||||||
# 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
|
api_key = ALY_LLM_API_KEY
|
||||||
api_key = os.getenv("DASHSCOPE_API_KEY")
|
|
||||||
|
|
||||||
def async_call():
|
def async_call():
|
||||||
print('----创建任务----')
|
print('----创建任务----')
|
||||||
|
Binary file not shown.
After Width: | Height: | Size: 1.9 MiB |
Binary file not shown.
After Width: | Height: | Size: 1.9 MiB |
Reference in New Issue
Block a user