目标检测工具返回的是图片中的目标及其位置。把它接到智能体时,先明确图片尺寸、类别、分数和框坐标的输出契约,后续才可能裁图、提醒或请求复核。这里用 YOLO11n 生成 JSON,适合先做一个只读图片工具的开发者。
先核对模型能检测什么
YOLO11 的检测权重与姿态、分割权重用途不同,本例使用 yolo11n.pt。准备一张包含清晰行人、车辆或日常物品的 photo.jpg;预训练类别不包括你随意提出的所有物体。先打印模型类别表,再检查目标是否在范围内。

python -m pip install ultralytics pillow
python -c "from ultralytics import YOLO; print(YOLO('yolo11n.pt').names)"
建议用独立 Python 3.11 环境,安装后记录 ultralytics 与 torch 版本。首次运行会下载权重;本例固定 CPU,便于避免先处理 CUDA 兼容问题。本文未运行该模型推理,未提供实测速度或识别率。
导出原图像素坐标
把下面内容保存为 detect_json.py,放在 photo.jpg 同一目录,运行 python detect_json.py。
import json
from PIL import Image
from ultralytics import YOLO
model = YOLO("yolo11n.pt")
def detect_objects(path):
with Image.open(path) as source:
image = source.convert("RGB")
result = model.predict(image, conf=0.25, device="cpu", verbose=False)[0]
h, w = result.orig_shape
objects = []
for box in result.boxes:
cls = int(box.cls[0].item())
objects.append({"label": result.names[cls],
"score": float(box.conf[0].item()),
"xyxy": box.xyxy[0].cpu().tolist()})
return {"width": w, "height": h, "objects": objects,
"status": "detected" if objects else "no_detection"}
print(json.dumps(detect_objects("photo.jpg"), ensure_ascii=False, indent=2))
xyxy 按左上角 x、y、右下角 x、y 的顺序返回,单位是原图像素;不是 0–1 归一化坐标。conf=0.25 是示例过滤门槛,降低它会引入更多候选,也可能增加误检。
从一张图验证输出契约
先检查 width 和 height 是否等于原图尺寸,再抽查每个框满足 0≤x1≤x2≤width、0≤y1≤y2≤height。把框画回原图,确认框住的物体与 label 相符。仅有一个非空 JSON 不能证明识别正确。
no_detection 表示模型没返回符合门槛的候选,不等于图片没有目标。对于遮挡、小目标或类别表之外的对象,应返回待复核说明,不据此自动关闭业务问题。
给智能体接工具前的边界
- 调用方只传允许读取的本地文件路径;接收上传文件时另做格式、尺寸和路径校验。
- 不把图片中的文字当成系统指令,工具结果只按预定 JSON 字段使用。
- 先保存原图、候选框和人工修正,后续才能判断门槛是否合适。
这里只实现检测工具,没有实现多轮规划和平台工具注册。商业接入前核对 Ultralytics 的 AGPL-3.0 与 Enterprise 授权说明,并按自己的软件分发和使用方式确定许可要求。
资料与适用范围
本文依据 2026 年 10 月 1 日读取的项目资料编写。安装后请记录实际依赖版本;版本升级时先用小样本核对接口和输出。
- Ultralytics Predict:Results 的类别、置信度及 xyxy 字段
- YOLO11:检测权重名称及任务差异
- Ultralytics 许可:AGPL-3.0 与 Enterprise 选项
Ai菜鸟网。发布者:AI小管家,转载请注明出处:https://www.alyyhw.com/30635.html