AI+环保应用教程:用Python脚本自动识别垃圾分类并查询处理建议
想用AI做环保应用,不一定从训练模型开始。
一个可运行的起点是:让用户上传垃圾图片,程序调用大模型接口识别物品并给出分类建议。
本文用Python脚本串起图片压缩、文字描述生成和分类结果校验,最终输出可回收、有害、厨余、其他四类标签和投放提示。
先明确适用条件和准备清单
这个方案适合个人开发者或小团队做原型验证,不依赖本地GPU。
你需要准备:
- 一台能运行Python 3.8以上版本的电脑或云服务器
- 一个大模型API账号,支持图像输入或文字对话均可(本文按文字对话接口示例,图片先转成文字描述)
- 已安装
requests库,可用pip install requests安装 - 一组测试垃圾图片,建议覆盖塑料瓶、废电池、菜叶、纸巾等类别
如果使用宝塔面板管理服务器,在“网站”中新建Python项目即可,也可以直接SSH登录执行脚本。
编写分类脚本:从图片到分类结果
核心思路是分两步:第一步把图片压缩后转成文字描述(可用本地图像识别库或大模型多模态接口),第二步把描述和分类规则发给对话模型。
下面给出可调用的请求示例,替换API_KEY和接口地址即可。
import base64, requests, json
API_KEY = "你的API密钥"
API_URL = "https://api.example.com/v1/chat/completions" # 替换为真实接口地址
def image_to_text(image_path):
# 简化处理:实际可调用多模态接口,这里用本地描述代替
return "一个透明塑料饮料瓶,瓶身有标签"
def classify(description):
prompt = f"""根据以下垃圾描述,判断它属于可回收物、有害垃圾、厨余垃圾还是其他垃圾,并给出一句投放提示。只输出JSON,格式:{{"category":"","tip":""}}。描述:{description}"""
headers = {"Authorization": f"Bearer {API_KEY}", "Content-Type": "application/json"}
data = {"model": "gpt-3.5-turbo", "messages": [{"role": "user", "content": prompt}], "temperature": 0}
resp = requests.post(API_URL, headers=headers, json=data, timeout=30)
resp.raise_for_status()
content = resp.json()["choices"][0]["message"]["content"]
return json.loads(content)
if __name__ == "__main__":
desc = image_to_text("bottle.jpg")
result = classify(desc)
print(result)
运行后应输出类似{"category": "可回收物", "tip": "清空液体后压扁投放"}的JSON。
如果返回内容不是JSON,说明模型没有严格按格式输出,可在提示词中增加“只输出JSON,不要解释”并降低temperature。
三个容易踩的坑
图片太大导致接口超时。
手机照片通常3MB以上,直接base64编码会撑大请求体。
建议先用PIL压缩到宽度800像素、质量70再上传,命令示例:from PIL import Image; img = Image.open("a.jpg"); img.thumbnail((800,800)); img.save("small.jpg", quality=70)。
分类结果与本地规则冲突。
不同城市垃圾分类标准有差异,比如有些地方将大骨头归为其他垃圾。
建议在提示词中附上你所在城市的分类简表,或对模型输出做二次校验:如果category不在四个固定值内,直接返回“需人工确认”。
API密钥硬编码在脚本里。
不要把密钥写进代码提交到Git。
用环境变量读取:API_KEY = os.environ.get("API_KEY"),并在服务器上通过export API_KEY=xxx设置,或写入.env文件后加载。
验证结果是否可靠
准备20张已知分类的垃圾图片,批量运行脚本,统计分类准确率。
如果准确率低于70%,优先检查图片描述是否准确——很多错误来自第一步描述偏差,而不是分类模型本身。
另外记录每次请求的耗时和返回码,便于排查限流或超时问题。
可以在脚本中加入日志:logging.info(f"desc={desc}, result={result}")。
常见疑问
没有多模态API怎么办? 可以先用文字输入代替图片,让用户手动输入垃圾名称,同样能跑通分类逻辑,后续再替换为图像接口。
这个方案能直接上线吗? 建议作为辅助提示工具,最终投放以当地环卫部门规定为准。
涉及有害垃圾(如电池、灯管)时,提示用户送至专门回收点,不要仅依赖模型判断。
需要自己训练模型吗? 不需要。
调用通用大模型即可完成大部分常见垃圾的分类,成本低且迭代快。
如果对准确率要求高,再考虑收集本地数据微调。