【API】免费调用Qwen-vl2对图像打标

首次调用通义千问API_大模型服务平台百炼(Model Studio)-阿里云帮助中心icon-default.png?t=O83Ahttps://help.aliyun.com/zh/model-studio/getting-started/first-api-call-to-qwen?spm=a2c4g.11186623.help-menu-2400256.d_0_1_0.8c693048HxtUzZ&scm=20140722.H_2840915._.OR_help-T_cn~zh-V_1

一、开通账号

  1. 注册账号:如果没有阿里云账号,您需要先注册阿里云账号。

  2. 开通百炼:前往百炼控制台,如果页面顶部显示以下消息,您需要开通百炼的模型服务,以获得免费额度。如果未显示该消息,则表示您已经开通。

    image

  3. 获取API Key:在控制台的右上角选择API-KEY,然后创建API Key用于通过API调用大模型。

    image

二、配置环境

2.1 linux系统配置API Key到环境变量

(也可跳过,直接输入,复制代码过程中不安全)

echo "export DASHSCOPE_API_KEY='YOUR_DASHSCOPE_API_KEY'" >> ~/.bashrc

执行以下命令,使变更生效。

source ~/.bashrc

重新打开一个终端窗口,运行以下命令检查环境变量是否生效。

echo $DASHSCOPE_API_KEY

2.2 windows系统cmd添加

添加永久性环境变量

如果您希望API Key环境变量在当前用户的所有新会话中生效,可以按如下操作。

  1. 在CMD中运行以下命令。

    # 用您的 DashScope API Key 代替 YOUR_DASHSCOPE_API_KEY
    setx DASHSCOPE_API_KEY "YOUR_DASHSCOPE_API_KEY"
  2. 打开一个新的CMD窗口。

  3. 在新的CMD窗口运行以下命令,检查环境变量是否生效。

    echo %DASHSCOPE_API_KEY%

2.3  安装 依赖 (之前需要安装python)

pip3 install -U openai
# pip3 install -U dashscope

三、测试代码 (可对一个文件夹图片打标)

3.1 文字智能助手 (官方hello-world)

import os
from openai import OpenAI

try:
    client = OpenAI(
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx",
        # api_key="sk-xxx"
        api_key=os.getenv("DASHSCOPE_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)
except Exception as e:
    print(f"错误信息:{e}")
    print("请参考文档:https://help.aliyun.com/zh/model-studio/developer-reference/error-code")

3.2  上传本地图片并进行打标 (记得改文件类型)

from openai import OpenAI
import os
import base64


#  base 64 编码格式
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")


input_image_path = r"C:\Users\admin\Downloads\anytext.png"
base64_image = encode_image(input_image_path)
client = OpenAI(
    # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
    api_key=os.getenv('DASHSCOPE_API_KEY'),
    base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
)
completion = client.chat.completions.create(
    model="qwen-vl-max-latest",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    # 需要注意,传入BASE64,图像格式(即image/{format})需要与支持的图片列表中的Content Type保持一致。"f"是字符串格式化的方法。
                    # PNG图像:  f"data:image/png;base64,{base64_image}"
                    # JPEG图像: f"data:image/jpeg;base64,{base64_image}"
                    # WEBP图像: f"data:image/webp;base64,{base64_image}"
                    "image_url": {"url": f"data:image/jpeg;base64,{base64_image}"}, 
                },
                {"type": "text", "text": "描述这张图片,分别用中文,英文2种方式"},
            ],
        }
    ],
)
print(completion.choices[0].message.content)

3.2.1 本地的图片与运行结果结果

3.3  上传一张图片or 对一个文件夹打标,将图片打标后保存到txt

    one_img_qwenvl_2_txt(input_image_path)    # 单张图片
    dir_img_qwenvl_2_txt(r"D:\code\test")           # 处理文件夹

其中,下面代码可有针对性指导打标结果,可以输出制定格式

 {"type": "text", "text": "详细描述这张图片。分别用中文,英文2种方式描述,中文和英文间,用\n隔开"},

from openai import OpenAI
import os
import base64
import time

#  base 64 编码格式
def encode_image(image_path):
    with open(image_path, "rb") as image_file:
        return base64.b64encode(image_file.read()).decode("utf-8")



def img2text(input_image_path):
    img_type=input_image_path.rsplit('.')[1]  # 从右边的第一个‘.’分割一次, “xxxx/xx.png”=["xxxx/xx/xx.","png" ],所以取第2个元素
    print('img_type:',img_type)
    base64_image = encode_image(input_image_path)
    client = OpenAI(
        # 若没有配置环境变量,请用百炼API Key将下行替换为:api_key="sk-xxx"
        api_key=os.getenv('DASHSCOPE_API_KEY'),
        base_url="https://dashscope.aliyuncs.com/compatible-mode/v1",
    )
    completion = client.chat.completions.create(
        model="qwen-vl-max-latest",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "image_url",
                        # 需要注意,传入BASE64,图像格式(即image/{format})需要与支持的图片列表中的Content Type保持一致。"f"是字符串格式化的方法。
                        # PNG图像:  f"data:image/png;base64,{base64_image}"
                        # JPEG图像: f"data:image/jpeg;base64,{base64_image}"
                        # WEBP图像: f"data:image/webp;base64,{base64_image}"
                        "image_url": {"url": f"data:image/{img_type};base64,{base64_image}"}, 
                    },
                    {"type": "text", "text": "详细描述这张图片。分别用中文,英文2种方式描述,中文和英文间,用\n隔开"},
                ],
            }
        ],
    )
    content=completion.choices[0].message.content
    print(content)
    return content



def write_txt(content,name,out_dir='./'):
    with open(f'{out_dir}/{name}.txt', 'w') as f:
        f.write(content)


def one_img_qwenvl_2_txt(input_image_path):
    t1=time.time()
    img_dir=os.path.dirname(input_image_path)
    content=img2text(input_image_path)
    name=os.path.basename(input_image_path).rsplit('.')[0]  # 取文件名,去掉后缀
    # print('img_dir:file_name',img_dir,name)
    cn_text,en_text=content.split('\n') # 根据输出结果进行解析
    write_txt(en_text,name,img_dir)
    print(f'img {name} cost time:',round(time.time()-t1,2),"秒")
    return cn_text,en_text


def dir_img_qwenvl_2_txt(img_dir):
    img_list=[  file for file in os.listdir(img_dir)  if  file.endswith((".jpg", ".png", ".jpeg", ".webp"))]
    t0=time.time()
    for img_file in img_list:
        
        # print('img_file',img_file)
        input_image_path=os.path.join(img_dir,img_file)
        cn_text,en_text=one_img_qwenvl_2_txt(input_image_path)  
        
    print('Dir cost time:',round(time.time()-t0,2),"秒")



if __name__ == '__main__':
    input_image_path = r"D:\code\0train\feij.png"
    one_img_qwenvl_2_txt(input_image_path)  # 单张图片
    dir_img_qwenvl_2_txt(r"D:\code\test")  # 处理文件夹
        
    


    

3.3.1  对文件夹打标结果

log

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曾小蛙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值