C# OpenCV机器视觉:利用TrashNet实现垃圾分类

ops/2025/2/9 6:42:39/

在繁华的都市里,垃圾分类成了让人头疼的难题。阿强住在一个老旧小区,每天扔垃圾的时候,他都要对着垃圾桶纠结半天:“这到底是可回收物,还是有害垃圾啊?要是分错了,会不会被罚款?” 阿强一边挠着头,一边看着手中的垃圾,感觉自己像个在迷宫里找不到出口的小可怜。

一天,阿强在网上闲逛,突然看到一篇关于 TrashNet 的文章。“TrashNet?这是什么神秘组织?” 阿强好奇地点进去,发现这是一个专门用于垃圾分类的深度学习模型。“哇,这不就是我一直在找的‘垃圾分类神器’嘛!” 阿强兴奋得从椅子上跳起来,眼睛里闪烁着希望的光芒。

第一章:神秘的 TrashNet 登场

阿强迫不及待地开始研究 TrashNet。原来,TrashNet 是由一群热心环保的技术大神开发的。他们看到人们在垃圾分类上的困扰,就决定用科技的力量来解决这个问题。TrashNet 经过大量垃圾图片的 “训练”,已经能像个经验丰富的垃圾分类专家一样,准确识别出各种垃圾的类型。

“太神奇了!这简直就是垃圾世界的‘超级侦探’啊!” 阿强惊叹道。他想象着 TrashNet 在数据的海洋里 “学习” 的场景,就像一个勤奋的学生在知识的图书馆里疯狂阅读。“有了它,我就能告别垃圾分类的烦恼,成为小区里的‘垃圾侠’啦!” 阿强握紧拳头,仿佛已经看到自己站在垃圾桶前,指挥着垃圾们各归其位的帅气模样。

第二章:筹备 “垃圾侠” 行动

阿强决定用 OpenCvSharp 来实现基于 TrashNet 的垃圾分类识别。他先在电脑上安装好 OpenCvSharp 库,这个过程并不顺利,各种报错和依赖问题让阿强差点崩溃。“这电脑怎么跟我作对啊!” 阿强一边抱怨,一边疯狂地在网上搜索解决办法。经过一番折腾,终于安装成功了。

“呼,总算是搞定了!” 阿强擦了擦额头上的汗,长舒了一口气。他打开 Visual Studio,创建了一个新的 C# 项目,准备大展身手。

第三章:代码冲锋 —— 垃圾分类的 “魔法咒语”

阿强开始编写代码,他的手指在键盘上飞舞,就像在弹奏一首激昂的乐章。

using System;
using OpenCvSharp;
using OpenCvSharp.Dnn;namespace TrashClassification
{class Program{static void Main(){// 1. 加载TrashNet模型,这就像召唤出垃圾分类的“超级英雄”Net net = Cv2.Dnn.ReadNetFromCaffe("deploy.prototxt", "trashnet.caffemodel");// 2. 读取要分类的垃圾图像,这里假设图像路径为“trash_image.jpg”Mat image = Cv2.ImRead("trash_image.jpg");if (image.Empty()){Console.WriteLine("哎呀,图像读取失败啦!是不是路径写错了或者图像文件损坏了?赶紧检查检查。");return;}// 3. 图像预处理,把图像调整成模型能“看懂”的样子Mat blob = Cv2.Dnn.BlobFromImage(image, 1.0 / 255.0, new Size(224, 224), new Scalar(0, 0, 0), true, false);// 4. 将预处理后的图像输入模型进行预测net.SetInput(blob);Mat predictions = net.Forward();// 5. 解析预测结果,找出可能性最大的垃圾类别int[] classIds = new int[1];float[] confidences = new float[1];Point[] classIndices;Cv2.MinMaxLoc(predictions.Reshape(1, 1), out _, out float maxValue, out _, out classIndices);classIds[0] = classIndices[0];confidences[0] = maxValue;// 6. 定义垃圾类别标签数组,这里假设标签顺序为:可回收物、有害垃圾、厨余垃圾、其他垃圾string[] classLabels = { "可回收物", "有害垃圾", "厨余垃圾", "其他垃圾" };string predictedClass = classLabels[classIds[0]];Console.WriteLine($"预测结果:这是{predictedClass},可信度为{confidences[0] * 100}%");// 显示图像,看看我们要分类的垃圾长啥样Cv2.ImShow("Trash Image", image);Cv2.WaitKey(0);Cv2.DestroyAllWindows();}}
}

代码解析

  • 加载 TrashNet 模型:阿强用Cv2.Dnn.ReadNetFromCaffe方法加载了 TrashNet 模型,这就像是给垃圾分类行动找了个厉害的 “指挥官”,所有的分类指令都要听它的。
  • 读取图像:使用Cv2.ImRead读取垃圾图像,如果图像读取失败,就像没找到要分类的垃圾,程序自然没法继续,所以要检查并提示。
  • 图像预处理:通过Cv2.Dnn.BlobFromImage把图像转换成模型能处理的格式,调整大小、归一化等操作,就像给垃圾穿上了 “标准制服”,让模型能轻松识别。
  • 模型预测:把预处理后的图像输入模型,模型就开始 “思考”,给出预测结果,这个结果就像模型给出的 “答案”。
  • 解析结果:从模型给出的预测结果中找到可能性最大的类别索引,再根据预先定义的类别标签数组,找到对应的垃圾类别名称,这样就能知道垃圾属于哪一类啦。
  • 显示结果:最后,把预测结果打印出来,还显示出要分类的垃圾图像,让阿强能直观地看到分类情况。

第四章:实战检验 ——“垃圾侠” 初显身手

阿强准备好一张垃圾图片,小心翼翼地运行程序。屏幕上很快显示出了预测结果:“预测结果:这是可回收物,可信度为 95%”。

“哈哈,成功啦!” 阿强大喊一声,兴奋地在房间里转圈圈。他迫不及待地把这个好消息告诉了小区的邻居们。大家都对阿强的 “高科技” 垃圾分类方法赞不绝口。

从那以后,阿强经常拿着手机,用他的垃圾分类程序帮助邻居们分类垃圾。在他的带动下,小区的垃圾分类工作变得井井有条,环境也越来越整洁。阿强也成了小区里人人皆知的 “垃圾侠”,大家都夸他是环保小卫士。

阿强知道,这只是一个开始。他打算继续研究,让垃圾分类程序更加准确和智能。他相信,只要大家一起努力,用科技的力量助力环保,我们的城市一定会变得更加美丽。而他,也会继续在 “垃圾侠” 的道路上,守护着这片绿色家园。


http://www.ppmy.cn/ops/156912.html

相关文章

【C语言标准库函数】三角函数

目录 一、头文件 二、函数简介 2.1. 正弦函数:sin(double angle) 2.2. 余弦函数:cos(double angle) 2.3. 正切函数:tan(double angle) 2.4. 反正弦函数:asin(double value) 2.5. 反余弦函数:acos(double value)…

技术晋升读书笔记—人月神话

“人月”可以互换? “九个女人能一个月生下一个孩子?” “向延期的软件项目,临时增加人手,能快速完成?” 《人月神话》这本书堪称软件工程领域的经典之作。弗雷德里克布鲁克斯通过一系列精辟的论述,揭示…

apisix网关ip-restriction插件使用说明

ip-restriction插件可以在网关层进行客户端请求ip拦截。 当然了,一般不推荐使用该方法,专业的事专业工具做。建议有条件,还是上防火墙或者waf来做。 官方文档:ip-restriction | Apache APISIX -- Cloud-Native API Gateway whit…

【机器学习】训练数据集和测试数据集的划分及KNN准确率测试

训练数据集和测试数据集的划分 一、摘要二、机器学习算法性能评估三、train test split的具体实现四、调用KNN算法进行准确率测试五、提升模型性能的策略思考 一、摘要 本博文围绕机器学习算法性能评估方法展开,重点介绍了训练数据集与测试数据集的分离&#xff08…

适用于 Windows 的 Zed 编辑器的非官方稳定版。通过 scoop 或 pwsh 脚本轻松安装。不隶属于 Zed Industries

一、软件介绍(文末提供下载) Zed,这是一款由 Atom 和 Tree-sitter 的创建者提供的高性能多人 Atom and Tree-sitter.。 二、macOS 和 Linux安装 在 macOS 和 Linux 上,您可以直接下载 Zed 或通过本地包管理器安装 Zed。 本地包…

003 Linux驱动开发——第一个简单开发实验

01 开发板的第 1 个 APP 实验 gcc -o hello hello.c ./hello Hello, world! ./hello weidongshan Hello, weidongshan!要想给 ARM 板编译出 hello 程序,需要使用交叉编译工具链 arm-buildroot-linux-gnueabihf-gcc -o hello hello.c 这样编译出来的 hello 程序才可以…

如何在Windows上使用Docker

引言 WSL2(Windows Subsystem for Linux2)是微软开发的一种技术,允许在 Windows 操作系统上运行 Linux 环境。它提供了一个兼容层,使得用户可以在 Windows 系统中直接运行 Linux 命令行工具、应用程序和开发工具,而无需…

【学术投稿-第五届消费电子与计算机工程国际学术会议】HTML核心元素详解:超链接、列表、表格与实用技巧

基本信息 大会官网:www.iccece.org 线下召开时间:2025年2月28-3月2日 目录 前言 一、超链接:连接万物的桥梁 1. 基础语法 2. 高级应用 3.代码案例​编辑 4. 注意事项 二、列表:结构化内容的利器 1. 有序列表(O…