实战 | 基于卷积神经网络的蘑菇识别微信小程序

news2024/9/22 21:16:06

一个不知名大学生,江湖人称菜狗
original author: Jacky Li
Email : 3435673055@qq.com

Time of completion:2023.11.13
Last edited: 2023.11.13

导读:其实没啥难的,主要是随手搞了就发出来把,太久没有水过帖子了!

目录

项目描述

技术亮点

1.1 总体设计

1.1.1 系统架构

1.1.2 识别流程

1.2 算法实现

1.2.1 数据集

1.2.2 算法设计与实现

1.2.3 识别结果与改进

1.3 应用实现

1.3.1 数据库

1.3.2 后端

1.3.3 前端

1.4 效果展示

作者有言


项目描述

本项目是基于SpringBoot和图像分类算法用来识别蘑菇的微信小程序,根据拍摄上传的蘑菇图片,通过python脚本调用训练好的模型,经过后端处理,最后返回识别结果的类别及其识别准确率。

技术亮点

  • 采用MobileNetV2进行作为蘑菇图像分类的特征提取网络,使模型轻量化,使得参数量减少了60%,加快访问速度

  • 通过@ControllerAdvice注解实现拦截器,利用@ExceptionHandler注解捕捉所有异常,进行统一处理

  • 为提升查询效率,在蘑菇学名字段上建立了索引

1.1 总体设计

介绍了小程序的整体系统架构以及使用小程序进行蘑菇识别的流程。

1.1.1 系统架构

小程序采用前后端分离架构,前端采用taro框架,后端采用springboot框架,并通过nginx进行请求转发。

图片

1.1.2 识别流程

使用小程序对蘑菇进行识别时,小程序会向后端发起请求,后端再调用python脚本进行识别,并从数据库查询蘑菇具体信息。

图片

1.2 算法实现

介绍了蘑菇识别算法采用的数据集,识别算法的设计与实现,以及算法的识别效果与所做的改进。

1.2.1 数据集

在kaggle获取,地址:

https://www.kaggle.com/datasets/maysee/mushrooms-classification-common-genuss-images

该数据集中有9个最常见的北欧蘑菇属图像文件夹。每个文件夹包含300到 1500个蘑菇属的选定图像。标签是文件夹的名称。

图片

图片

1.2.2 算法设计与实现

处理数据集:用tensorflow.image.decode_jpeg和tensorflow.image.resize 对图片进行标准化。

训练:将图片与标签(文件夹名即标签)打包后,将前百分之80设置为训练集,后百分之20设置为验证集。利用tf.keras.Sequential构建模型model,最后调用model.fit进行训练。

识别:利用tf.keras.Sequential构建模型model,并调用

model.load_weights加载训练好的模型,最后调用model.predict进行预测。

1.2.3 识别结果与改进

训练集准确率:98.53%,测试集准确率:72.32%。

图片

图片

可以发现这个结果很不理想。一开始我以为是因为过拟合了,于是尝试增加dropout,但发现并没有起到什么作用[张1] 。

于是我去看了看数据集中的数据,发现有很多图片是脏数据,比如:

图片

之后我对这些脏数据进行了手动删除,同时我发现图片中干扰元素较多(比如背景中的花草),可能会导致网络无法很好地对蘑菇进行分类。于是我尝试使用了github上的开源库https://github.com/nadermx/backgroundremover 对数据集中的数据进行去背景处理。

去背景脚本:遍历原图片,对当前图片执行 os.system('backgroundremover -i "'+original_file+'" -o "'+new_file+'"')命令进行去除图片操作,并将结果存入另一个文件下。

去背景前:

图片

去背景后:

图片

最后使用去除了脏数据,并进行了去背景操作后的数据集进行训练,训练集准确率:99.88%, 测试集准确率:81.25%。

图片

图片

1.3 应用实现

介绍了小程序应用数据库、后端、前端的设计与实现。

1.3.1 数据库

采用Mysql数据库。由于系统比较简单,只有一张表:mushroom。

mushroom表字段:id(主键),name(蘑菇名称),scientific_name (学名),species(所属科属),toxicity(毒性),feature(特征),文献(documents),img_path(图片路径)。

其中为提升查询效率,在scientific_name字段上建立了索引。

1.3.2 后端

用springboot框架进行开发,用mybatis-plus框架进行数据库交互。

核心接口逻辑:将前端传过来的图片上传至服务器指定路径下-->利用Runtime.getRuntime().exec(command)执行python命令:python identify.py <图片路径>(python脚本读取该路径下的图片进行识别)--> 读取python脚本打印出来的结果(所有类别及其识别准确率),并进行排序-->删除上传至服务器的图片-->返回识别准确率前三的类别。

统一错误处理:通过@ControllerAdvice注解实现一个拦截器,并利用@ExceptionHandler(value = Exception.class)注解捕捉所有异常,进行统一处理。

1.3.3 前端

基于Taro(React)框架进行开发。

上传图片:使用Taro.chooseImgae api选择图片,选择成功后调用Taro.uploadFile api将图片上传至服务器。

页面间传递对象参数:父页面调用Taro.eventCenter.trigger api触发事件,将参数放入事件中。子页面调用Taro.eventCenter.once api监听事件,取得参数。

获取蘑菇详细信息:通过Taro.request api调用后端接口获取详细信息。

1.4 效果展示

使用“识菇”微信小程序进行蘑菇识别的效果如下:

图片

图片

图片

图片

图片

作者有言

如果需要代码,请私聊博主,博主看见回。
如果感觉博主讲的对您有用,请点个关注支持一下吧,将会对此类问题持续更新……

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1202203.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学生五科成绩统计

随机生成10名学生姓名(包括自己)和五科成绩&#xff0c;将数据存入*.csv&#xff0c;读取保存的*.csv文本数据计算每个学生总分和平均分&#xff0c;并存入*.csv文本&#xff1b;打印总分排名前三学生信息&#xff1b;查找10学生各科最高最低分、中位分、平均分。 (笔记模板由p…

2023CCPC深圳流水账

在高铁上无聊&#xff0c;写一个这三天的小总结吧 不知道该写点啥&#xff0c;就想到什么写什么了 铁了&#xff0c;也在意料之中&#xff0c;概率期望和字符串一直是弱点&#xff0c;考前也在赌不会考这两个结果两个都考了&#xff0c;赫赫&#xff0c;看来在杭州站之前得好…

无代码业务自动化工具Activepieces

什么是 Activepieces &#xff1f; Activepieces 是一款工作流程自动化软件&#xff0c;可以帮助您自动化所有重要流程&#xff0c;例如市场、销售、营销等。您可以集成其他有用的应用程序并更有效地管理您的业务。无需编码&#xff0c;是 Zapier 的绝佳替代品。 Activepieces …

深耕智慧物流夯实竞争优势,极智嘉(Geek+)斩获多项大奖

全球仓储机器人引领者极智嘉(Geek)&#xff0c;一直以来致力于为仓储与制造场景提供高效柔性的智能物流解决方案&#xff0c;强劲的发展实力备受认可。而近段时间&#xff0c;极智嘉更是频频传来好消息&#xff0c;不仅斩获了英国机器人与自动化仓储创新大奖&#xff0c;获评胡…

什么是Vue.js的计算属性(computed properties)?与方法(methods)有什么不同?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Python高级语法---Python内存管理机制

文章目录 1. 内存管理基础引用计数2. 垃圾回收机制垃圾回收3. 使用weakref处理循环引用weakref模块总结Python是一种高级编程语言,其内存管理机制高效且用户友好。这篇文章将详细介绍Python的内存管理基础、垃圾回收机制,以及如何使用weakref模块处理循环引用。我们将通过简单…

基于C#开发的任天堂 Switch 开源模拟器

今天给大家推荐一款基于C#开发的任天堂 Switch 开源模拟器&#xff0c;可方便开发人员来测试游戏&#xff0c;也用于娱乐。 01 项目简介 Ryujinx 是一个开源的任天堂 Switch 模拟器&#xff0c;可以在 PC 上模拟运行 Switch 游戏。采用C#开发&#xff0c;基于 .NET Core技术框…

优思学院|如何利用六西格玛提升自己的大格局?

首先&#xff0c;我想说大格局并不仅仅是一个概念&#xff0c;更是一种生活态度。拥有大格局的人通常能够超越日常琐事&#xff0c;将目光投向更广阔的未来。他们不会被小事困扰&#xff0c;而是将注意力集中在更大的目标和使命上。拥有大格局的人常常具备卓越的领导力和判断力…

力扣双周赛 -- 117(容斥原理专场)

class Solution { public:long long c2(long long n){return n > 1? n * (n - 1) / 2 : 0;}long long distributeCandies(int n, int limit) {return c2(n 2) - 3 * c2(n - limit 1) 3 * c2(n - 2 * limit) - c2(n - 3 * limit - 1);} };

java DataSize存储容量单位规范化设置

之前的文章 java Duration格式规范化 自定义时间单位类型我们讲述了 Duration 这种jdk单位规范 其实我们还有一个单位 DataSize 我们这里属性类中 加入这个 DataSize的一个属性 然后设置他的 get set函数 然后 toString中加上他的输出 方便我们去看 这个类型是用来设置存储容…

Mistral 7B 比Llama 2更好的开源大模型 (一)

Mistral 7B 简介 Mistral 7B Mistral 7B 是一个 7.3B 参数模型: 在所有基准测试中优于 Llama 2 13B在许多基准测试中优于 Llama 1 34B接近 CodeLlama 7B 的代码性能,同时保持擅长英语任务使用分组查询注意力 (GQA) 加快推理速度使用滑动窗口注意力 (SWA) 以更低的成本处…

创意卡片制作

效果展示 CSS 知识点 box-shadow 属性灵活运用background 属性的 linear-gradient 值灵活运用 页面整体结构 <div class"container"><div class"card"><div class"icon"><ion-icon name"rocket-outline">&…

BAT 批处理指令总结

目录 一. 前言 二. 常用指令 2.1. HELP 2.2. REM 和 :: 2.3. ECHO 和 @ 2.4. PAUSE 2.5. ERRORLEVEL 2.6. TITLE 2.7. COLOR 2.8. GOTO 和 : 2.9. FIND 2.10. START 2.11. ASSOC 和 FTYPE 2.12. PUSHD 和 POPD 2.13. CALL 2.14. SHIFT 2.15. IF 2.15.1. IF […

第二篇:cocos-shader 入门三

YAML yaml语言主要用于声明整个着色器程序的流程。包含了顶点着色器程序的名字、片元着色器程序的名字、渲染技术&#xff08;混合、深度测试、模板测试等&#xff09;、Uniform 变量等。 uniform 变量 #include <cc-local> #include <cc-global> #include<…

微服务 Spring Cloud 6,用了这么多年Docker容器,殊不知你还有这么多弯弯绕

目录 一、神之容器 Docker二、Docker架构图1、Docker Client 客户端2、Docker Daemon 守护进程3、镜像&#xff08;Image&#xff09;4、Docker Driver 驱动模块5、Docker Graph内部数据库6、Docker Libcontainer函数库7、Docker Container 容器实例 三、Docker安装1、卸载Dock…

前端基础------margin上下传递

1&#xff0c;出现的原因及解决方法 ◼ margin-top传递 如果块级元素的顶部线和块级父元素的顶部线重叠&#xff0c;那么这个块级元素的margin-top值会传递给父元素 ◼ margin-bottom传递 如果块级元素的底部线和块级父元素的底部线重叠&#xff0c;并且父元素的高度是…

计算机毕设 推荐系统设计与实现 协同过滤推荐算法

文章目录 0 前言简介常见推荐算法协同过滤分解矩阵聚类深度学习 协同过滤原理系统设计示例代码(py) 系统展示系统界面推荐效果 最后 0 前言 &#x1f525; 这两年开始毕业设计和毕业答辩的要求和难度不断提升&#xff0c;传统的毕设题目缺少创新和亮点&#xff0c;往往达不到毕…

PM2.5数据-省份、城市、区县(1998-2021年)

PM2.5是指直径小于或等于2.5微米的颗粒物&#xff0c;能深入人体呼吸系统&#xff0c;对人体健康产生重大影响。该份数据是关于中国省市县PM2.5的数据集&#xff0c;是根据Atmospheric Composition Analysis Group的PM2.5数据进行整理得到的面板数据。记录了中国各省、市、县的…

ESP32 BLE特征值示例

键盘特征值初始化示例 void BleKeyboard::begin(void) {BLEDevice::init(deviceName);BLEServer* pServer BLEDevice::createServer();pServer->setCallbacks(this);hid new BLEHIDDevice(pServer);inputKeyboard hid->inputReport(KEYBOARD_ID); // <-- input R…

媒体软文投放的流程与媒体平台的选择

海内外媒体软文&#xff1a;助力信息传播与品牌建设 在当今数字化时代&#xff0c;企业如何在庞大的信息海洋中脱颖而出&#xff0c;成为品牌建设的领军者&#xff1f;媒体软文投放无疑是一项强大的策略&#xff0c;通过选择合适的平台&#xff0c;精准投放&#xff0c;可以实…