当前位置: 首页 > news >正文

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

一个不知名大学生,江湖人称菜狗
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 效果展示

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

图片

图片

图片

图片

图片

作者有言

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

相关文章:

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

一个不知名大学生&#xff0c;江湖人称菜狗 original author: Jacky Li Email : 3435673055qq.com Time of completion&#xff1a;2023.11.13 Last edited: 2023.11.13 导读&#xff1a;其实没啥难的&#xff0c;主要是随手搞了就发出来把&#xff0c;太久没有水过帖子了&…...

如何选择共享wifi项目服务商,需要注意哪些?

在移动互联网时代&#xff0c;无线网络已经成为人们生活中不可或缺的一部分。随着5G时代的到来&#xff0c;共享WiFi项目成为了市场上备受关注的焦点。在众多共享WiFi公司中&#xff0c;如何选择共享wifi项目服务商合作&#xff0c;今天我们就来盘点下哪些公司可靠&#xff01;…...

ubuntu20.04 MYNTEYE S 相机运行与标定记录

ubuntu20.04 MYNTEYE S 相机运行与标定记录 环境 ubuntu20.04 opencv3.3.1 硬件 mynteye S1030 OpenCV 3.4.3 安装 Jetson Nano小觅相机(MYNT EYE S)开发调试指南 mkdir -p ~/tools/opencv cd ~/tools/opencvgit clone https://github.com/opencv/opencv.git cd opencv/…...

有效降低数据库存储成本方案与实践 | 京东云技术团队

背景 随着平台的不断壮大&#xff0c;业务的不断发展&#xff0c;后端系统的数据量、存储所使用的硬件成本也逐年递增。从发展的眼光看&#xff0c;业务与系统要想健康的发展&#xff0c;成本增加的问题必须重视起来。目前业界普遍认同开源节流大方向&#xff0c;很多企业部门…...

分布式数据库Schema 变更 in F1 TiDB

分布式数据库Schema 变更 in F1 & TiDB 【转载】TiDB 源码阅读系列文章&#xff08;十七&#xff09;DDL 源码解析 | PingCAP 上述文章主要叙述了从DDL语句发起到执行的过程&#xff0c;简单介绍了弄一套相同的模式来后台处理数据回填&#xff0c;从而提高DDL的并发度的一…...

图形库篇 | EasyX | 图像处理

图形库篇 | EasyX | 图像处理 图像类型 IMAGE表示图像,用于定义一个图像变量,与导入的图片资源一一对应。 IMAGE img;加载与绘制图像 函数功能函数加载图像void loadimage(IMAGE* pDstImg,LPCTSTR pImgFile,int nwidth = 0,int nHeight = 0,bool bResize = false)绘制图像v…...

AWTK UI 自动化测试工具发布

AWTK UI 自动化 提供了兼容 Appium 的接口&#xff0c;可以使用 Appium 的工具来进行 UI 自动化测试。但是使用起来有点麻烦&#xff0c;用的人不多&#xff0c;所以最终决定开发一个 AWTK 专用的 UI 自动化测试工具。相比 Appium&#xff0c;这个工具有下列特点&#xff1a; …...

Java后端开发——JDBC入门实验

JDBC&#xff08;Java Database Connectivity&#xff09;是Java编程语言中用于与数据库建立连接并进行数据库操作的API&#xff08;应用程序编程接口&#xff09;。JDBC允许开发人员连接到数据库&#xff0c;执行各种操作&#xff08;如插入、更新、删除和查询数据&#xff09…...

LCA

定义 最近公共祖先简称 LCA&#xff08;Lowest Common Ancestor&#xff09;。两个节点的最近公共祖先&#xff0c;就是这两个点的公共祖先里面&#xff0c;离根最远的那个。 性质 如果 不为 的祖先并且 不为 的祖先&#xff0c;那么 分别处于 的两棵不同子树中&#…...

ts学习02-数据类型

新建index.html <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</title> </h…...

javaSE的发展历史以及openjdk和oracleJdk

1 JavaSE 的发展历史 1.1 Java 语言的介绍 SUN 公司在 1991 年成立了一个称为绿色计划&#xff08;Green Project&#xff09;的项目&#xff0c;由 James Gosling&#xff08;高斯林&#xff09;博士领导&#xff0c;绿色计划的目的是开发一种能够在各种消费性电子产品&…...

【入门Flink】- 10基于时间的双流联合(join)

统计固定时间内两条流数据的匹配情况&#xff0c;需要自定义来实现——可以用窗口&#xff08;window&#xff09;来表示。为了更方便地实现基于时间的合流操作&#xff0c;Flink 的 DataStrema API 提供了内置的 join 算子。 窗口联结&#xff08;Window Join&#xff09; 一…...

【Python Opencv】图片与视频的操作

文章目录 前言一、opencv图片1.1 读取图像1.2 显示图像1.3 写入图像1.4 示例代码 二、Opencv视频2.1 从相机捕获视频获取摄像头一帧一帧读取显示图片VideoCapture 中的get和set函数示例代码 2.2 从文件播放视频示例代码 2.3 保存视频示例代码 总结 前言 在计算机视觉和图像处理…...

【从入门到起飞】JavaAPI—System,Runtime,Object,Objects类

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 &#x1f384;欢迎并且感谢大家指出小吉的问题&#x1f970; 文章目录 &#x1f354;System类⭐exit()⭐currentTimeMillis()&#x1f384;用…...

【Git】的分支和标签的讲解及实际应用场景

目录 讲解 环境讲述 分支标签的区别 分支 命令 场景应用 标签 命令 标签规范 讲解 环境讲述 当软件从开发到正式环境部署的过程中&#xff0c;不同环境的作用 开发环境&#xff1a;用于开发人员进行软件开发、测试和调试。在这个环境中&#xff0c;开发人员可以快速地…...

修改django开发环境runserver命令默认的端口

runserver默认8000端口 虽然python manage.py runserver 8080 可以指定端口&#xff0c;但不想每次runserver都添加8080这个参数 可以通过修改manage.py进行修改&#xff0c;只需要加三行&#xff1a; from django.core.management.commands.runserver import Command as Ru…...

kubeadm安装k8s高可用集群

目录 一、环境规划 二、注意事项&#xff1a; 三、环境准备&#xff1a; 1. 关闭防火墙规则&#xff0c;关闭selinux&#xff0c;关闭swap交换&#xff1a; 2. 修改主机名 3. 所有节点修改hosts文件&#xff1a; 4. 所有节点时间同步&#xff1a; 5. 所有节点实现Linux的资…...

来看看电脑上有哪些不为人知的小众软件?

​ 电脑上的各类软件有很多&#xff0c;除了那些常见的大众化软件&#xff0c;还有很多不为人知的小众软件&#xff0c;专注于实用功能&#xff0c;简洁干净、功能强悍。 1.桌面停靠栏工具——BitDock ​ BitDock是一款运行在Windows系统中的桌面停靠栏工具&#xff0c;功能实…...

一个进程最多可以创建多少个线程?

前言 话不多说&#xff0c;先来张脑图~ linux 虚拟内存知识回顾 虚拟内存空间长啥样 在 Linux 操作系统中&#xff0c;虚拟地址空间的内部又被分为内核空间和用户空间两部分&#xff0c;不同位数的系统&#xff0c;地址空间的范围也不同。比如最常见的 32 位和 64 位系统&am…...

ElasticSearch文档分析

ElasticSearch文档分析 包含下面的过程&#xff1a; 将一块文本分成适合于倒排索引的独立的 词条将这些词条统一化为标准格式以提高它们的“可搜索性”&#xff0c;或者 recall 分析器执行上面的工作。分析器实际上是将三个功能封装到了一个包里&#xff1a; 字符过滤器 首先&a…...

如何通过 SEO 和 ASO 提高网站和应用的转化率

SEO和ASO&#xff1a;双管齐下提高网站和应用的转化率 在当今数字化时代&#xff0c;网站和应用的成功不仅取决于其功能和用户体验&#xff0c;更在于如何吸引流量并将其转化为实际用户。这就需要我们深入了解和运用搜索引擎优化&#xff08;SEO&#xff09;和应用商店优化&am…...

ECharts地图可视化进阶:如何优雅处理GeoJSON中的飞地与特殊区域(以海南为例)

ECharts地图可视化进阶&#xff1a;GeoJSON飞地与特殊区域处理实战 当我们在使用ECharts进行地理数据可视化时&#xff0c;经常会遇到一些特殊的地理区域处理难题。比如海南省地图中的南海诸岛&#xff0c;由于与主岛距离较远且面积比例悬殊&#xff0c;直接展示会导致可视化效…...

从Python代码到动态仿真:手把手教你用SimPy搭建第一个系统动力学模型

从Python代码到动态仿真&#xff1a;手把手教你用SimPy搭建第一个系统动力学模型 在数据分析与人工智能项目中&#xff0c;系统动力学&#xff08;System Dynamics&#xff09;正逐渐成为分析复杂系统行为的重要工具。与传统的Vensim等专用软件不同&#xff0c;Python开发者可以…...

【时域心法】别用“平滑”谋杀你的闭环!撕碎软件滤波的视觉骗局,直视“相位延迟”的物理死刑

摘要&#xff1a;纯软件思维有着一种对“平滑数据”的病态迷恋。当他们看到夹杂着毛刺和电磁噪声的 ADC 信号时&#xff0c;最本能的反应就是砸下极其粗暴的“滑动平均滤波”或“低通滤波”。他们在上位机屏幕上画出了绝美的平滑曲线&#xff0c;却不知道自己已经亲手切断了系统…...

Python AOT编译性能翻倍的5个隐藏开关:LLVM 18.1 + PGO + LTO实战配置,错过再等三年

第一章&#xff1a;Python 原生 AOT 编译方案 2026 性能调优指南随着 CPython 3.14 对原生 AOT&#xff08;Ahead-of-Time&#xff09;编译的正式支持落地&#xff0c;2026 年 Python 生态已进入“可编译、可嵌入、可确定性部署”的新阶段。本章聚焦于基于 cpython-aot 工具链与…...

OpenAI Assistants API 深度测评与开发指南

OpenAI Assistants API 深度测评与开发指南 第1章 核心概念与问题溯源:从“一次性对话API”到“智能助手构建引擎” 1.1 核心概念:什么是OpenAI Assistants API? 1.1.1 官方定义拆解 OpenAI Assistants API(以下简称“Assistants API”)是OpenAI在2023年11月发布的DevD…...

私有化视频会议系统/私有化视频会议解决方案EasyDSS技术架构解析与应用实践

在数字化转型的浪潮中&#xff0c;视频会议已成为政企日常协作的核心纽带&#xff0c;但公有云会议平台的数据安全隐患、合规性短板&#xff0c;始终是政务、金融、军工等涉密领域的心头之患。EasyDSS私有化视频会议系统&#xff0c;以数据自主可控为核心&#xff0c;融合全场景…...

告别默认丑样式!手把手教你用WPF的ControlTemplate打造高颜值TreeView(附完整XAML代码)

从零打造高颜值WPF TreeView&#xff1a;深度定制ControlTemplate实战指南 每次打开Visual Studio新建WPF项目时&#xff0c;看到那个灰头土脸的默认TreeView控件&#xff0c;总有种说不出的失落感。作为数据展示的核心控件之一&#xff0c;TreeView在文件浏览器、配置面板、数…...

从协议本质到架构落地:WebSocket与MQTT在实时通信中的融合实践指南

1. 为什么需要WebSocket和MQTT的融合架构 第一次接触实时通信系统开发时&#xff0c;我天真地以为用WebSocket就能搞定所有需求。直到项目上线后遇到用户量激增&#xff0c;才发现单纯的WebSocket架构在扩展性和可靠性上存在明显短板。后来尝试引入MQTT协议&#xff0c;才真正解…...

微信聊天记录终极保存方案:5步轻松实现永久备份与智能分析

微信聊天记录终极保存方案&#xff1a;5步轻松实现永久备份与智能分析 【免费下载链接】WeChatMsg 提取微信聊天记录&#xff0c;将其导出成HTML、Word、CSV文档永久保存&#xff0c;对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/W…...