【菜鸟飞】AI多模态:vsCode下python访问阿里云通义文生图API

目标

有很多多模态的AI工具,用的少就用在线图形化的,需要批量,就尝试代码生成,本文尝试代码调用多模态AI,阿里通义有免费额度,作为练手应该挺好,如果以后选其他的,技术也是相通的。

准备

需要vsCode并按照python,参考之前的文档。

开始

1、注册并生成api-key

阿里云注册后,需要实名认证,才能开通阿里云百炼服务,才能配置api-可以。

  • 个人实名认证:

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

参考指导文档:

个人实名认证_账号中心(Account)-阿里云帮助中心

  • 开启服务

认证成功后,到阿里的百炼控制台:

阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

开通服务,在180天内,有100万tockens的免费额度。

  •  生成api-key

在右侧账号下点击“API-KEY”,可以设置你的key:

创建key:

创建后,点击“查看”,可以看到key的内容,并复制:

复制key,保存备用。 

2、python调用测试

  • api-key设置环境变量(可选)

可以将API Key配置到环境变量,以后直接从环境变量里取,当然也可以在代码里直接用api-key,所以这步是可选的,参考下图步骤

  • 安装openai

在vs中的终端,执行命令,安装openai包:

pip install -U openai
  • 测试代码

创建.py结尾的文件,文件代码为:

import os
from openai import OpenAI

client = OpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
    #api_key=os.getenv("DASHSCOPE_API_KEY"), 
    api_key="你自己的api-key", 
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)

completion = client.chat.completions.create(
    model="qwen-plus", # 模型列表:https://help.aliyun.com/zh/model-studio/getting-started/models
    messages=[
        {'role': 'system', 'content': 'You are a helpful assistant.'},
        {'role': 'user', 'content': '你是谁?'}
        ]
)
print(completion.choices[0].message.content)

如果前面设置了DASHSCOPE_API_KEY环境变量,就用这句代码,如同提示没找到环境变量,就是设置后当前终端没有生效,重启一下vs就可以了:

api_key=os.getenv("DASHSCOPE_API_KEY"),

没设置,就直接写入自己的api-key就行了:

api_key="你自己的api-key",

 运行代码,返回信息,如下图所示,就表示环境搭建好了:

3、文生图

多模态的api免费额度

安装包

本示例里用到的包,模型管理包,安装命令如下

pip install dashscope

 requests包安装

pip install requests
  • 文生图代码

创建一个新.py文件,代码为:

from http import HTTPStatus
from urllib.parse import urlparse, unquote
from pathlib import PurePosixPath
import requests
from dashscope import ImageSynthesis
import os

prompt = "一间有着精致窗户的花店,漂亮的木质门,摆放着花朵"

print('----sync call, please wait a moment----')
rsp = ImageSynthesis.call(api_key=os.getenv("DASHSCOPE_API_KEY"),
                          model="wanx2.1-t2i-turbo",
                          prompt=prompt,
                          n=1,
                          size='1124*800')
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('sync_call Failed, status_code: %s, code: %s, message: %s' %
          (rsp.status_code, rsp.code, rsp.message))

在vs编辑器里看看,有没有引入的包,包名是灰色的,如果有就是环境里缺这个包,用pip install 包名,加载包就行了。

执行后,会在当前目录下多一个图片文件,整个执行效果是这样:

我这次生成的图片是这样的:

通过改变prompt提示词,以及图画参数,可以生成自己想要的图。

4、其他-创意海报生成

大家可以参考官方文档,有很多其他模型可以选择:

图像生成-通义万相_大模型服务平台百炼(Model Studio)-阿里云帮助中心

 我看了一下创意海报生成,其中没有python的代码示例,然后,我就问了DeepSeek-r1:

“python调用wanx-poster-generation-v1 示例代码”

DeepSeek-r1分析之后,就返回了代码:

拷贝到我的vs里,替换api-key,就运行出来了,感觉AI还是有点用,共享一下海报的代码:

import requests
import time

# 替换为你的阿里云API Key(从百炼控制台获取)
API_KEY = "你自己的aip-key"
HEADERS = {
    "Authorization": f"Bearer {API_KEY}",
    "X-DashScope-Async": "enable",
    "Content-Type": "application/json"
}

def create_poster_task():
    """创建海报生成任务"""
    url = "https://dashscope.aliyuncs.com/api/v1/services/aigc/text2image/image-synthesis"
    payload = {
        "model": "wanx-poster-generation-v1",
        "input": {
            "title": "呼家将",  # 主标题(必填,30字符内)
            "sub_title": "—刘兰芳播讲",  # 副标题(可选)
            #"body_text": "春节是中国最重要的传统节日之一,象征新的开始与希望",  # 正文(可选,50字符内)
            "prompt_text_zh": "山川,沙场,将军",  # 中文提示词(与英文至少选其一)
            "wh_ratios": "横版",  # 版式:横版/竖版
            "lora_name": "中国水墨",  # 海报风格(可选,见风格枚举)
            "lora_weight": 0.8,  # 风格权重 [0,1]
            "generate_mode": "generate",  # 生成模式:generate/sr/hrf
            "generate_num": 1  # 生成数量 [1,4]
        },
        "parameters": {}
    }
    response = requests.post(url, headers=HEADERS, json=payload)
    if response.status_code == 200:
        return response.json()["output"]["task_id"]
    else:
        raise Exception(f"任务创建失败: {response.text}")

def check_task_status(task_id):
    """轮询任务状态并获取结果"""
    url = f"https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}"
    while True:
        response = requests.get(url, headers={"Authorization": f"Bearer {API_KEY}"})
        data = response.json()
        status = data["output"]["task_status"]
        
        if status == "SUCCEEDED":
            render_urls = data["output"].get("render_urls", [])
            if render_urls:
                print("生成的海报URL(24小时内有效):")
                for url in render_urls:
                    print(url)
            else:
                print("检测到敏感内容,图片被拦截")
            break
        elif status in ["PENDING", "RUNNING"]:
            print("任务处理中,等待5秒后重试...")
            time.sleep(5)
        elif status == "FAILED":
            error_code = data["output"].get("code", "Unknown")
            error_msg = data["output"].get("message", "无错误详情")
            raise Exception(f"任务失败: {error_code} - {error_msg}")
        else:
            raise Exception(f"未知状态: {status}")

if __name__ == "__main__":
    try:
        task_id = create_poster_task()
        print(f"任务ID: {task_id}")
        check_task_status(task_id)
    except Exception as e:
        print(f"错误: {str(e)}")

执行后,提示并返回结果:

点击上面的url,就下载了生成的图片,我这次生成是这样的:

 

 本文就到这里,就到这里~~~~~~~

官方参考文档

首次调用通义千问API_大模型服务平台百炼(Model Studio)-阿里云帮助中心

猜你喜欢

转载自blog.csdn.net/2501_90561511/article/details/146395980
今日推荐