写在前面

语言大模型是通往AGI的必经之路,并且初步具备了AGI的特征,所以我们从这里开始。 --梁文锋

调用云端的qwen3vl实现物体检测

本次代码需要的包

1
2
3
4
5
6
openai
pillow
torch
torchvision
requests
packaging

为了实现物体检测,需要实现几个步骤,首先就是得有通义百炼 OpenAI 兼容接口(注册通义百炼账号),这样才能通过使用 OpenAI SDK 调用百炼的 Qwen-VL 模型,OK啊,那我们就来注册一个账户通义百炼网址,为什么要用通义百炼呢,因为他会送“免费百万token”(真香!),注册完后进入模型管理–>密钥生成,生成一个自己的密钥APIkey,到这一步已经完成一半了。

img

有了自己的KPIkey后就可以用OpenAI SDK(软件开发工具包,代码和OpenAI等强大模型之间的“桥梁”)调用百炼的 Qwen-VL 模型

1
2
3
4
5
# === 配置你的通义百炼 OpenAI 兼容接口 ===
BAIAN_API_BASE = "https://dashscope.aliyuncs.com/compatible-mode/v1" # ← 替换为你的 /v1 地址
BAIAN_API_KEY = "******************************" # ← 替换为你的 API Key
# MODEL_NAME = "qwen2.5-vl-72b-instruct" # ← 替换为百炼中模型的实际名称(或服务绑定的模型名)
MODEL_NAME = "qwen3-vl-plus"

随后就是一些参数和初始化 OpenAI 客户端以及调用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
target_obj = ["垃圾桶"]  # ← 你想检测的目标类别, 比如 "car", "person", "dog" 等等
min_pixels = 512*28*28
max_pixels = 2000*28*28

# 初始化 OpenAI 客户端(指向百炼)
client = OpenAI(
base_url=BAIAN_API_BASE,
api_key=BAIAN_API_KEY
)

def call_qwen_vl_with_openai(image_b64, prompt):
"""
使用 OpenAI SDK 调用百炼的 Qwen-VL 模型
"""
try:
response = client.chat.completions.create(
model=MODEL_NAME,
messages=[
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{
"type": "image_url",
"min_pixels": min_pixels,
"max_pixels": max_pixels,
"image_url": {
"url": f"data:image/jpeg;base64,{image_b64}"
}
}
]
}
],
temperature=0.01,
max_tokens=1000
)
return response.choices[0].message.content
except Exception as e:
print(f"❌ 调用失败: {e}")
return None

接下来就是主函数模块,这部分主要是把各个模块组合在一起,对了,忘记介绍了一个物体检测框框标记的模块plot_bounding_boxes_qwen3该模块示例代码都是参考Qwen3-VL使用说明来实现的,主函数及调用代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def main(image_path, output_path="output_with_bbox.jpg"):
# Step 1: 缩放图片
image = Image.open(image_path).convert("RGB")
width, height = image.size
print(f"📷 原始图片尺寸: {width}x{height}")
input_height, input_width = smart_resize(height, width, min_pixels=min_pixels, max_pixels=max_pixels)
print(f"✅ 图片已缩放至: {input_width}x{input_height}")

# Step 2: 转 base64
img_b64 = image_to_base64(image)

# Step 3: 调用模型
prompt = (
f"检测图中所有{target_obj}, 并以JSON格式输出其bbox的坐标以及可信度, 标注信息为英文."
)
raw_response = call_qwen_vl_with_openai(img_b64, prompt)

print("💬 模型原始返回:", raw_response)

# Step 4: draw bounding boxes
if MODEL_NAME.startswith("qwen3"):
output_img = plot_bounding_boxes_qwen3(image, raw_response, vizualize=True)
else:
output_img = plot_bounding_boxes(image, raw_response, input_width, input_height, vizualize=True)
output_img.save(output_path)
print(f"✅ 结果已保存至: {output_path}")


if __name__ == "__main__":
# get input image path from command line

if len(sys.argv) < 2:
print("请提供输入图片路径")
sys.exit(1)
input_image = sys.argv[1]

# 安装依赖: pip install openai pillow
main(input_image, "result_remote.jpg")

对了注意代码参数的输入形式是sys.argv,需要通过终端来输入参数(图片的路径)

img

ollama本地部署检测

Ollama是一个专为在本地计算机上运行大型语言模型(LLM)而设计的开源工具。它极大地简化了下载、运行和管理各种AI模型的过程,让你无需依赖云端服务,就能在自己的设备上体验AI能力。(BUT,本地部署需要一定算力和存储资源才能实现)

虽然说ollama是一个很方便的工具,但是也不能一上来就开始用,需要配置环境,需要CUDA,CUDA toolkit,cuDNN,这部分我就直接post个CSDN的教程在这里教程

有了环境准备,那就可以开始下载ollama了,Ollama官方网址

下载完就可以开始使用了,因为我们不再用云端了,所以BAIAN_API_BASE,BAIAN_API_KEY,MODEL_NAME都要改一下

1
2
3
4
# === 配置本地 Ollama 服务 ===
OLLAMA_API_BASE = "http://localhost:11434/v1" # Ollama 默认本地地址
OLLAMA_API_KEY = "ollama" # Ollama 通常不需要认证,但可以设为任意值
MODEL_NAME = "qwen2.5vl:7b" # 本地安装的模型名称

写在最后

本次工作稍微地玩一下大模型调用,云端和本地调用,但是对比最后的效果来说,云端还是方便又牛逼啊!

(如有错误和不好的地方,请多担待,另外对程序有问题请提出噢!)