AI垃圾分类配置:用Python脚本调用模型接口识别垃圾类型
把AI垃圾分类配置跑起来,最直接的方式是用Python写一个脚本:先让图片转成文字描述,再把描述和分类提示词一起发给大模型接口,最后解析返回结果。
整个过程不依赖专用硬件,一台能联网的Linux服务器或本地电脑就能测试。
下面按准备、操作、避坑、验证的顺序讲清楚。
先确认你手里有什么
这套配置需要三个条件:
- 一个可用的模型API,支持文本对话或图文理解,具体以服务商文档为准
- Python 3.8以上环境,能安装
requests库 - 待分类的垃圾图片,或者能描述垃圾外观的文字
如果只有文字,比如“沾了油的塑料外卖盒”,也可以跳过图片转文字,直接把描述拼进提示词。
图片识别需要模型支持视觉输入,纯文本模型只能处理文字描述。
配置脚本和请求体
在服务器上新建目录并安装依赖:
mkdir -p ~/ai-garbage && cd ~/ai-garbage
python3 -m venv venv
source venv/bin/activate
pip install requests
新建classify.py,核心逻辑分三步。
第一步,把图片转成文字描述。
如果模型支持直接传图片,可以按文档把图片转成base64放进请求;
如果只支持文本,先用本地OCR或人工描述替代。
第二步,构造提示词,明确要求返回可回收物、有害垃圾、厨余垃圾、其他垃圾四类中的一类,并给出理由。
第三步,发送POST请求并解析JSON。
一个可参考的请求体结构如下,具体字段名和接口地址以你使用的服务商文档为准:
import requests, json
API_URL = "https://你的接口地址/v1/chat/completions"
API_KEY = "你的密钥"
def classify(description):
prompt = f"请判断以下垃圾属于哪一类:可回收物、有害垃圾、厨余垃圾、其他垃圾。只返回类别和一句理由。垃圾描述:{description}"
headers = {
"Authorization": f"Bearer {API_KEY}",
"Content-Type": "application/json"
}
data = {
"model": "你的模型名",
"messages": [{"role": "user", "content": prompt}],
"temperature": 0.2
}
resp = requests.post(API_URL, headers=headers, json=data, timeout=15)
resp.raise_for_status()
return resp.json()["choices"][0]["message"]["content"]
print(classify("沾了油的塑料外卖盒"))
把API_URL、API_KEY和model换成实际值后,执行python classify.py。
如果返回类似“其他垃圾:外卖盒被油污染后回收价值低”的内容,说明链路通了。
容易踩的坑
密钥不要写死在代码里。 建议用环境变量读取,例如API_KEY = os.environ.get("API_KEY"),避免提交到代码仓库。
超时和重试要设置。 模型接口偶尔会慢,timeout=15是合理起点。
遇到超时先检查网络和接口状态,不要无脑重试,否则可能触发频率限制。
图片大小和格式有限制。 多数接口对图片有尺寸和体积上限,传图前先压缩到合理范围,否则会返回413或400错误。
分类结果不能直接当法规依据。 不同城市垃圾分类标准有差异,模型输出只作为参考,正式场景需要按当地规则做二次校验。
验证配置是否生效
用三条不同描述做快速验证:
- “废电池”应返回有害垃圾
- “剩饭剩菜”应返回厨余垃圾
- “干净纸箱”应返回可回收物
如果结果明显偏离,先检查提示词是否明确限定了类别范围,再确认模型是否支持中文。
还可以在脚本里打印原始返回内容,观察是模型回答偏了,还是解析字段写错了。
常见疑问是“没有图片能不能用”。
可以,纯文字描述同样能触发分类,只是准确率依赖描述质量。
另一个问题是“接口返回乱码或截断”,优先检查temperature是否过高、返回字段是否完整,以及是否触发了最大token限制。
按上面的步骤执行完,AI垃圾分类配置就算完成了一个可运行的最小版本。
后续可以把脚本包成HTTP服务,或者接入摄像头定时抓图,但第一步先确保单次调用稳定返回结果。