垃圾分类不是新鲜事儿了,但很多人还是搞不清楚什么是“干的”“湿的”“可回收的”。如果有一个小程序或 Web 工具,拍张照就能告诉你这是什么垃圾,是不是就方便多了?这篇文章就带你从零搭建一个图像识别辅助的垃圾分类系统,覆盖模型选择、训练技巧、部署方式和简单 UI 演示,适合做公益项目或技术实践练手!
我们都知道垃圾分类好,但做起来总是各种疑问:外卖盒到底是湿垃圾还是干垃圾?奶茶杯算可回收吗?这些问题,机器视觉其实可以帮上大忙。
图像识别在 AI 公益场景里最典型的应用就是“看图识物”。对开发者来说,实现一个垃圾识别工具门槛并不高,核心是选好轻量模型 + 搭个界面,让普通用户能快速用起来。
import torchvision.transforms as transforms
from torchvision.datasets import ImageFolder
from torch.utils.data import DataLoader
import torch.nn as nn
import torch.optim as optim
from torchvision.models import mobilenet_v2
# 数据预处理
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor()
])
dataset = ImageFolder(root='data/train', transform=transform)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True)
# 模型准备
model = mobilenet_v2(pretrained=True)
model.classifier[1] = nn.Linear(model.last_channel, 4)
# 训练配置
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=1e-4)
# 简单训练过程
for epoch in range(5):
for inputs, labels in dataloader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
可保存为 .pt
模型,用 PyTorch 加载推理
model.eval()
img = Image.open("test.jpg").convert("RGB")
input_tensor = transform(img).unsqueeze(0)
output = model(input_tensor)
pred = torch.argmax(output, dim=1)
from fastapi import FastAPI, File, UploadFile
from PIL import Image
import io
app = FastAPI()
@app.post("/predict/")
async def predict(file: UploadFile = File(...)):
image = Image.open(io.BytesIO(await file.read())).convert("RGB")
input_tensor = transform(image).unsqueeze(0)
with torch.no_grad():
output = model(input_tensor)
pred = torch.argmax(output, dim=1).item()
return {"class": label_map[pred]}
<input type="file" id="fileInput" />
<button onclick="upload()">识别垃圾类别</button>
<script>
async function upload() {
const file = document.getElementById('fileInput').files[0]
const formData = new FormData()
formData.append('file', file)
const res = await fetch('/predict/', {
method: 'POST',
body: formData
})
const result = await res.json()
alert("识别结果:" + result.class)
}
</script>
Q: 没有 GPU 怎么训练模型?
A: 可以用 Google Colab 免费训练,节省成本。
Q: 图片拍得不清楚会影响识别吗?
A: 会,一定程度上可通过数据增强方式提升模型鲁棒性。
Q: 想嵌入到小程序中怎么做?
A: 可将后端 API 部署到云函数,再通过小程序调用识别接口。
这个垃圾识别工具是一个典型的“技术 + 公益”的结合。虽然模型简单、界面也不复杂,但对于帮助普通人养成垃圾分类习惯,还是挺有意义的。如果是公益团队或学生组织,也可以把这个项目作为校园 AI 实践项目落地。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。