教你开发图像识别垃圾分类app

本文介绍了一个基于TensorFlow.js和coco-ssd模型的垃圾分类识别应用。该应用能够通过图像识别技术,自动判断垃圾种类并进行分类,为解决上海垃圾分类难题提供了一种创新解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

朋友们,如需转载请标明出处:人工智能AI技术的博客_优快云博客-python系列教程,人工智能,程序人生领域博主

随着6月结束,7月开始,最近上海最火的话题是垃圾分类无疑了。。上海人民是每天早晚俩小时定时定点扔垃圾。

干湿垃圾要分开,把湿垃圾从垃圾袋里倒进桶里,再把垃圾袋扔进干垃圾桶 😂

龙虾🦞壳是干垃圾,龙虾🦞肉是湿垃圾,请你分开扔,谢谢😂

猪🐷能吃的是湿垃圾,不能吃的是干垃圾,吃了会死的是有毒垃圾,卖了能买猪🐷的是可回收垃圾

看完是不是要崩溃了?!别担心,本人周末花一下午精心制作的看图识垃圾app,主要依赖 tensorflow coco-ssd 来识别照片中的多物体,然后找了个不知名的api,返回垃圾的分类。例如:

制作过程简述

首先,网上已经有很多可以输入文字查询垃圾分类的网站了,我灵光一闪:要是可以直接通过图像垃圾分类岂不更好。然后找到了tensorflow.js 的官方指南:

<!-- Load TensorFlow.js. This is required to use coco-ssd model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"> </script>
<!-- Load the coco-ssd model. -->
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/coco-ssd"> </script>
<img id="img" src="cat.jpg"/>
<script>
  // Notice there is no 'import' statement. 'cocoSsd' and 'tf' is
  // available on the index-page because of the script tag above.

  const img = document.getElementById('img');

  // Load the model. 在浏览器里fetch和加载模型到内存可能要花1分钟以上
  cocoSsd.load().then(model => {
    // detect objects in the image.
    model.detect(img).then(predictions => {
      console.log('Predictions: ', predictions);
    });
  });
</script>

复制代码

可见,Google tensorflow 已经把常用的机器学习模型做到开箱即用的水平,非常方便。当然,这个多物体检测的函数返回的是个数组,包含了对象在图中的bbox,而且里面的分类标签都是英文的:

[{
  bbox: [x, y, width, height],
  class: "person",
  score: 0.8380282521247864
}, {
  bbox: [x, y, width, height],
  class: "kite",
  score: 0.74644153267145157
}]
复制代码

那么问题来了:网上的垃圾分类api 都是要求输入中文的!!我第一时间想到了 Bing Translate API 把英文翻译成中文再去查询分类。所以又去申请了个Azure 的免费账号,还好我有master card,付了一美金才搞定。具体的可以参考最后的官方文档链接

经过一顿折腾,终于搞定,就是识别率很低。毕竟没有专门训练垃圾分类的模型,只是用现成的物体检测模型。

所以有很多搞笑的结果 :

在使用 MATLAB 进行图像识别以实现垃圾分类时,可以采用传统的图像处理方法结合机器学习分类器,也可以利用深度学习技术(如卷积神经网络)进行更高效的分类。以下是具体的实现方法: ### 图像预处理 在进行特征提取和分类之前,需要对输入的垃圾图像进行预处理,以提高后续步骤的准确性。预处理通常包括以下步骤: - **灰度化**:将彩色图像转换为灰度图像,减少计算复杂度。 - **滤波去噪**:使用中值滤波、高斯滤波等方法去除图像中的噪声。 - **二值化**:通过设定阈值将图像转换为黑白图像,便于后续的形态学处理。 - **形态学操作**:使用 `bwareaopen` 等函数去除小面积的噪声区域,并填充目标区域的空洞 [^3]。 ```matlab % 示例代码:图像预处理 I = imread('garbage.jpg'); % 读取图像 I_gray = rgb2gray(I); % 转换为灰度图像 I_filtered = medfilt2(I_gray, [3 3]); % 中值滤波去噪 level = graythresh(I_filtered); % 自动阈值检测 I_bw = imbinarize(I_filtered, level); % 二值化 I_cleaned = bwareaopen(I_bw, 50); % 去除小面积区域 imshow(I_cleaned); ``` ### 特征提取 在完成图像预处理后,下一步是提取图像的特征。常用的特征包括颜色直方图、纹理特征(如 GLCM)、形状特征(如边缘轮廓)等。这些特征可用于训练传统的分类器。 ```matlab % 示例代码:提取颜色直方图特征 hist_counts = imhist(I_filtered); features = hist_counts / sum(hist_counts); % 归一化直方图 ``` ### 分类模型构建 #### 使用传统机器学习方法 可以使用支持向量机(SVM)、K近邻(KNN)或决策树等分类器对提取的特征进行训练。MATLAB 提供了 `fitcsvm`、`fitcknn` 等函数用于训练分类模型。 ```matlab % 示例代码:使用SVM训练分类器 X_train = [features1; features2; ...]; % 训练数据 Y_train = {'plastic'; 'metal'; ...}; % 对应标签 svm_model = fitcsvm(X_train, Y_train); % 训练SVM模型 ``` #### 使用深度学习方法 为了获得更高的分类准确率,可以采用基于卷积神经网络(CNN)的方法。例如,使用在 ImageNet 上预训练的 ResNet-18 模型进行迁移学习,针对特定的垃圾类别进行微调 [^2]。 ```matlab % 示例代码:加载ResNet-18并进行迁移学习 net = resnet18; layers = net.Layers; layers(end - 2:end) = fullyConnectedLayer(5); % 修改输出层为5个类别 layers(end) = classificationLayer; options = trainingOptions('sgdm', 'MaxEpochs', 10, 'InitialLearnRate', 1e-4); augimds = augmentedImageDatastore([224 224], imdsTrain); trained_net = trainNetwork(augimds, layers, options); ``` ### 系统集成与界面开发 最后,可以使用 MATLAB 的 GUI 工具(如 App Designer)设计用户交互界面,允许用户上传图像并显示分类结果。 ```matlab % 示例代码:创建简单的GUI界面 fig = uifigure('Name', '垃圾分类系统'); btn = uibutton(fig, 'push', 'Text', '选择图像', 'Position', [100 100 100 30]); img_display = uiimage(fig, 'Position', [50 50 200 200]); ``` ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值