用 MobileNet 教 AI 分垃圾?这个项目很适合练手也很有用!

在这里插入图片描述

网罗开发 (小红书、快手、视频号同名)

  大家好,我是 展菲,目前在上市企业从事人工智能项目研发管理工作,平时热衷于分享各种编程领域的软硬技能知识以及前沿技术,包括iOS、前端、Harmony OS、Java、Python等方向。在移动端开发、鸿蒙开发、物联网、嵌入式、云原生、开源等领域有深厚造诣。

图书作者:《ESP32-C3 物联网工程开发实战》
图书作者:《SwiftUI 入门,进阶与实战》
超级个体:COC上海社区主理人
特约讲师:大学讲师,谷歌亚马逊分享嘉宾
科技博主:华为HDE/HDG

我的博客内容涵盖广泛,主要分享技术教程、Bug解决方案、开发工具使用、前沿科技资讯、产品评测与使用体验。我特别关注云服务产品评测、AI 产品对比、开发板性能测试以及技术报告,同时也会提供产品优缺点分析、横向对比,并分享技术沙龙与行业大会的参会体验。我的目标是为读者提供有深度、有实用价值的技术洞察与分析。

展菲:您的前沿技术领航员
👋 大家好,我是展菲!
📱 全网搜索“展菲”,即可纵览我在各大平台的知识足迹。
📣 公众号“Swift社区”,每周定时推送干货满满的技术长文,从新兴框架的剖析到运维实战的复盘,助您技术进阶之路畅通无阻。
💬 微信端添加好友“fzhanfei”,与我直接交流,不管是项目瓶颈的求助,还是行业趋势的探讨,随时畅所欲言。
📅 最新动态:2025 年 3 月 17 日
快来加入技术社区,一起挖掘技术的无限潜能,携手迈向数字化新征程!


摘要

垃圾分类不是新鲜事儿了,但很多人还是搞不清楚什么是“干的”“湿的”“可回收的”。如果有一个小程序或 Web 工具,拍张照就能告诉你这是什么垃圾,是不是就方便多了?这篇文章就带你从零搭建一个图像识别辅助的垃圾分类系统,覆盖模型选择、训练技巧、部署方式和简单 UI 演示,适合做公益项目或技术实践练手!

引言

我们都知道垃圾分类好,但做起来总是各种疑问:外卖盒到底是湿垃圾还是干垃圾?奶茶杯算可回收吗?这些问题,机器视觉其实可以帮上大忙。

图像识别在 AI 公益场景里最典型的应用就是“看图识物”。对开发者来说,实现一个垃圾识别工具门槛并不高,核心是选好轻量模型 + 搭个界面,让普通用户能快速用起来。

项目拆解:垃圾识别工具怎么做?

项目目标

  • 用户上传垃圾照片

  • 系统识别垃圾种类(可回收、厨余、有害、其他)

  • 返回分类建议

  • 支持本地 or 云端部署

所需组件

  • 前端界面(小程序或 Web)

  • 图像识别模型(建议 MobileNet 或 EfficientNet-lite)

  • 模型训练数据集(可使用垃圾图片公开数据)

  • 推理服务(Flask/FastAPI/Node.js)

  • 可选:本地离线部署 / 云端部署(腾讯云函数、vercel、huggingface space)

模型选型和训练过程

模型推荐:MobileNetV2

  • 优点:轻量、适合移动端、本地部署没压力

  • 训练框架:PyTorch or TensorFlow 都可

  • 输出层:4分类(可回收、湿垃圾、干垃圾、有害垃圾)

数据集推荐

模型训练代码(PyTorch)

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)

Web API 推理接口(FastAPI)

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]}

简单前端 UI 示例

Web 页面上传图片识别

<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>

QA 环节

Q: 没有 GPU 怎么训练模型?
A: 可以用 Google Colab 免费训练,节省成本。

Q: 图片拍得不清楚会影响识别吗?
A: 会,一定程度上可通过数据增强方式提升模型鲁棒性。

Q: 想嵌入到小程序中怎么做?
A: 可将后端 API 部署到云函数,再通过小程序调用识别接口。

总结

这个垃圾识别工具是一个典型的“技术 + 公益”的结合。虽然模型简单、界面也不复杂,但对于帮助普通人养成垃圾分类习惯,还是挺有意义的。如果是公益团队或学生组织,也可以把这个项目作为校园 AI 实践项目落地。

未来展望

  • 加入语音识别功能,辅助视障人群

  • 联动地图或社区管理系统,实现智能投放建议

  • 进一步训练模型识别更复杂的垃圾类型

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

网罗开发

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值