基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(五)

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python环境
    • TensorFlow 环境
    • Jupyter Notebook环境
    • Pycharm 环境
    • 微信开发者工具
    • OneNET云平台
  • 模块实现
    • 1. 数据预处理
    • 2. 创建模型并编译
    • 3. 模型训练及保存
    • 4. 上传结果
    • 5. 小程序开发
      • 1)查询图片
      • 2)查询识别结果
  • 系统测试
    • 1. 训练准确率
    • 2. 测试效果
    • 3. 外部访问效果
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

本项目基于Keras框架,引入CNN进行模型训练,采用Dropout梯度下降算法,按比例丢弃部分神经元,同时利用IOT及微信小程序实现自动化远程监测果实成熟度以及移动端实时监测的功能,为果农提供采摘指导,有利于节约劳动力,提高生产效率,提升经济效益。

本项目基于Keras框架,采用卷积神经网络(CNN)进行模型训练。通过引入Dropout梯度下降算法,实现了对神经元的按比例丢弃,以提高模型的鲁棒性和泛化性能。同时,利用物联网(IoT)技术和微信小程序,项目实现了自动化远程监测果实成熟度,并在移动端实时监测果园状态的功能。这为果农提供了采摘的实时指导,有助于节约劳动力、提高生产效率,从而提升果园经济效益。

首先,项目采用Keras框架构建了一个卷积神经网络,利用深度学习技术对果实成熟度进行准确的识别和预测。

其次,引入Dropout梯度下降算法,通过随机丢弃神经元的方式,防止模型过拟合,提高了对新数据的泛化能力。

接着,项目整合了物联网技术,通过传感器等设备对果园中的果实进行远程监测。这样,果农可以在不同地点远程了解果实的成熟度状况。

同时,通过微信小程序,果农可以实时监测果园状态,了解果实成熟度、采摘时机等信息,从而更加科学地安排采摘工作。

总体来说,该项目不仅在模型训练上引入了先进的深度学习技术,还通过物联网和微信小程序实现了智能化的果园管理系统,为果农提供了更加便捷、高效的农业生产解决方案。

总体设计

本部分包括系统整体结构图和系统流程图。

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

模型训练流程如图所示。
在这里插入图片描述

数据上传流程如图所示。

在这里插入图片描述

小程序流程如图所示。
在这里插入图片描述

运行环境

本部分包括Python环境、TensorFlow环境、JupyterNotebook环境、PyCharm环境、微信开发者工具和OneNET云平台。

Python环境

详见博客。

TensorFlow 环境

详见博客。

Jupyter Notebook环境

详见博客。

Pycharm 环境

详见博客。

微信开发者工具

详见博客。

OneNET云平台

详见博客。

模块实现

本项目包括本项目包括5个模块:数据预处理、创建模型与编译、模型训练及保存、上传结果、小程序开发。下面分别给出各模块的功能介绍及相关代码。

1. 数据预处理

以红枣为实验对象,在互联网上爬取1000张图片作为数据集。

详见博客。

2. 创建模型并编译

数据加载进模型之后,需要定义模型结构并优化损失函数。

详见博客。

3. 模型训练及保存

定义模型架构和编译之后,通过训练集训练,使模型可以识别红枣的成熟程度。这里将使用训练集和测试集来拟合并保存模型。

详见博客。

4. 上传结果

上传结果有两种方法:一是调用计算机摄像头拍摄图片,将图片信息转换为二进制数据流后上传至OneNET云平台;二是将数字图片输入Keras模型中,获取输出后将识别结果上传至OneNET云平台。

详见博客。

5. 小程序开发

微信小程序用于查看果实图片、获取采摘建议和查询识别结果。

1)查询图片

查询图片功能采用两重嵌套回调:第一层通过访问图片数据流获取图片的索引目录,传递给第二层;第二层使用图片索引目录访问图片数据流信息,得到图片的二进制数据流。为使图片能够在界面中显示,将二进制数据转换为Base64格式,用that.setData()函数将值传递给wxm文件,并在该函数中修改按钮上的keyword为"单击查看采收建议",实现按钮功能的切换。

//回调图片
send: function () {var that = thisif (that.data.keyword=='单击查看你的果园'){//多重回调,两次const requestPicIndex = wx.request({url: 'https://api.heclouds.com/devices/586488389/datapoints?datastream_id=pic',header: {'content-type': 'application/json','api-key': '93IlIl2tfXddMN8sgQIInc7qbXs='},success: function (res) {var picIndex=res.data.data.datastreams[0].datapoints[0].value.indexconsole.log(res.data.data.datastreams[0].datapoints[0].value.index)
//打印图片索引目录;OneNet上图片的索引//嵌套的第二次回调const requestTask = wx.request({url: 'http://api.heclouds.com/bindata/' + picIndex,//图片urlheader: {'content-type': 'application/json','api-key': 'RSKlDBtVrZ7qDWvK=b6IAyFi=Ow='
//master-apikey,可操控OneNET上所有东西},responseType: 'arraybuffer',//相应类型success: function (res) {console.log(res.data)      //打印返回中的data,res代表返回数据var data = res.datavar base64 = wx.arrayBufferToBase64(res.data)
//二进制数据流转化成base64base64 = base64.replace(/[\r\n]/g, "") //删去换行符that.setData({imgUrl: 'data:image/PNG;base64,' + base64,
//能够显示图片base64的形式,传值给wxmlkeyword: '单击查看采收建议'//修改button功能为返回采收建议})console.log('http://api.heclouds.com/bindata/'+picIndex)//打印url},fail: function (res) {  //异常处理console.log("fail!!!")},complete: function (res) {console.log("end")}})},//回调失败则打印fail!!!fail: function (res) {console.log("fail!!!")},//回调完成打印图片urlcomplete: function (res) {console.log("end")}})}}

2)查询识别结果

得到识别结果后进行一次数值判断:"0"代表未成熟,不适合采收;"1"代表半熟,为最佳采收时机;"2"代表完全成熟,需要尽快采收。通过that.setDataM()函数赋值给reM,显示采收建议。

//回调识别结果
else if (that.data.keyword=='单击查看采收建议'){const requestTask = wx.request({url: 'https://api.heclouds.com/devices/586488389/datapoints?datastream_id=rslt',  //识别结果的urlheader: {'content-type': 'application/json','api-key': '93IlIl2tfXddMN8sgQIInc7qbXs='},success: function (res) {var app = getApp()app.globalData.Zao = res.data.data.datastreams[0]var a = app.globalData.Zao.datapoints[0].valueconsole.log(app.globalData.Zao)//0代表未成熟,不适合采收;1代表半熟,最佳采收时机;2代表完全成熟,尽快采收if (a == 2) {console.log(a)that.setData({reM: '完全成熟,请尽快采收!'})console.log('reM:' + that.data.reM)}else if (a == 1) {console.log(a)that.setData({reM: '半熟,现在是最佳的采收时机'})console.log('reM:' + that.data.reM)}else if (a == 0) {console.log(a)that.setData({reM: '不成熟,还不能采收哦~'})console.log('reM:' + that.data.reM)}},//回调失败则打印fail!!!fail: function (res) {console.log("fail!!!")},//回调完成打印结果complete: function (res) {console.log("end")}})}

系统测试

本部分包括训练准确率、测试效果和外部访问效果。

1. 训练准确率

测试准确率达到88%左右,意味着这个预测模型训练比较成功。随着训练轮次的增多,模型在训练数据、测试数据上的损失和准确率逐渐收敛,最终趋于稳定,如图所示。

在这里插入图片描述

2. 测试效果

将测试集数据代入模型进行测试,并对分类标签与原始数据进行显示和对比,验证了该模型能够实现红枣三类成熟程度的识别。测试结果如图所示。

在这里插入图片描述

3. 外部访问效果

打开小程序,初始界面如图所示。

在这里插入图片描述

单击界面最上方的"登录"按钮可获得用户微信头像和昵称,如图所示。

在这里插入图片描述

单击界面中"单击查看你的果园"按钮,在按钮上方会出现果实图片,同时按钮上的文字变成"单击查看采收建议",如图所示。

在这里插入图片描述

单击"单击查看采收建议"按钮,在按钮下方出现果实成熟度信息和具体采收建议,如图所示。

在这里插入图片描述

移动端测试结果如图所示。

在这里插入图片描述

相关其它博客

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(一)

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(二)

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(三)

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(四)

工程源代码下载

详见本人博客资源下载页


其它资料下载

如果大家想继续了解人工智能相关学习路线和知识体系,欢迎大家翻阅我的另外一篇博客《重磅 | 完备的人工智能AI 学习——基础知识学习路线,所有资料免关注免套路直接网盘下载》
这篇博客参考了Github知名开源平台,AI技术平台以及相关领域专家:Datawhale,ApacheCN,AI有道和黄海广博士等约有近100G相关资料,希望能帮助到所有小伙伴们。

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

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

相关文章

paypal贝宝怎么绑卡支付

一、PayPal是什么 PayPal是一个很多国家地区通用的支付渠道,我们可以把它理解为一项在线服务,相当于美国版的支付宝。你可以通过PayPal进行汇款和收款,相比传统的电汇和西联那类的汇款方式,PayPal更加简单和容易,被很…

利用proteus实现串口助手和arduino Mega 2560的串口通信

本例用到的proteus版本为8.13,ardunio IDE版本为2.2.1,虚拟串口vspd版本为7.2,串口助手SSCOM V5.13.1。软件的下载安装有很多教程,大家可以自行搜索,本文只介绍如何利用这4种软件在proteus中实现arduino Mega 2560的串…

Day45| 爬楼梯 (进阶)Leetcode 322. 零钱兑换 Leetcode 279. 完全平方数

爬楼梯 &#xff08;进阶&#xff09; 题目链接 爬楼梯&#xff08;进阶版&#xff09; 本题目属于排列中的背包问题&#xff0c;所以先遍历背包&#xff0c;后遍历物品&#xff0c;剩下的就是完全背包的板子了&#xff0c;下面直接上代码&#xff1a; #include<iostream…

刷题记录--算法--简单

第一题 2582. 递枕头 已解答 简单 相关标签 相关企业 提示 n 个人站成一排&#xff0c;按从 1 到 n 编号。 最初&#xff0c;排在队首的第一个人拿着一个枕头。每秒钟&#xff0c;拿着枕头的人会将枕头传递给队伍中的下一个人。一旦枕头到达队首或队尾&#xff0c;传递…

高防IP是什么?有什么优势?

随着互联网的普及和快速发展&#xff0c;网络安全问题日益突出。在众多安全问题中&#xff0c;DDOS攻击是一种常见的攻击手段&#xff0c;它通过发送大量的无效或低效请求&#xff0c;使得目标服务器无法响应正常用户的请求&#xff0c;从而造成服务不可用的情况。为了解决这个…

部署zabbix

源码下载地址&#xff1a; Download Zabbix sources nginx: download 防火墙和selinux都需要关闭 1、部署监控服务器 1&#xff09;安装LNMP环境 Zabbix监控管理控制台需要通过Web页面展示出来&#xff0c;并且还需要使用MySQL来存储数据&#xff0c;因此需要先为Zabbix准备基础…

vue的el

类型&#xff1a;string | Element 限制&#xff1a; 只在用 new 创建实例时生效。 详细&#xff1a; 提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标。可以是 CSS 选择器&#xff0c;也可以是一个 HTMLElement 实例。 在实例挂载之后&#xff0c;元素可以用 vm.…

Java创建线程有哪几种方式?

Java创建线程有哪几种方式&#xff1f; 在 Java 中&#xff0c;创建线程有多种方式&#xff0c;主要包括使用 Thread 类和实现 Runnable 接口。以下是几种常见的创建线程的方式&#xff1a; 继承 Thread 类&#xff1a; 通过继承 Thread 类并重写 run 方法来创建线程。 class …

如何使用eXtplorer+cpolar内网穿透搭建个人云存储实现公网访问

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

关于互联网安全方面需要了解的一些知识

关于互联网安全方面需要了解的一些知识 文章目录 关于互联网安全方面需要了解的一些知识一、资产扫描二、漏洞扫描三、渗透测试四、POC五、Exp六、代码规范七、函数命名八、注释怎么写 一、资产扫描 资产扫描是一种通过扫描网络或系统中所有设备、应用程序和服务&#xff0c;识…

PHP escapeshellarg()+escapeshellcmd()绕过

文章目录 函数利用escapeshellarg()函数escapeshellcmd()函数 exp执行原理攻击面例题 [BUUCTF 2018]Online Tool例题 [网鼎杯 2020 朱雀组]Nmap 函数利用 escapeshellarg()函数 单引号 ()&#xff1a;转义为 \。 双引号 (")&#xff1a;转义为 \"。 反斜杠 (\)&…

HTTP不同场景下的通信过程和用户上网认证过程分析

目录 HTTP不同场景的通信过程 HTTP正常交互过程 HTTP透明加速传输过程 HTTP代理服务器场景下交互过程 通过AC对上网用户不同场景的认证过程 AC上网认证正常交互过程 通过Cookie实现免认证交互过程 代理服务器场景下HTTP密码认证交互过程 HTTP不同场景的通信过程 HTTP、…

专业130+总分400+云南大学通信847专业基础综考研经验(原专业课827)

今年专业130总分400云南大学通信上岸&#xff0c;整体考研感觉还是比较满意&#xff0c;期间也付出了很多心血&#xff0c;走过弯路&#xff0c;下面分享一下这一年考研得失&#xff0c;希望大家可以从中有所借鉴。 先说明我在考研报名前更换成云南大学的理由&#xff1a;&…

谷歌正式发布最强 AI 模型 Gemini

2023年12月6日&#xff0c;谷歌公司宣布推出其被认为是规模最大、功能最强大的人工智能模型 Gemini。 Gemini将分为三个不同的套件&#xff1a;Gemini Ultra、Gemini Pro和Gemini Nano。 Gemini Ultra被认为具备最强大的能力&#xff0c;Gemini Pro则可扩展至多任务&#x…

xilinx原语详解及仿真——ODDR

ODDR位于OLOGIC中&#xff0c;可以把单沿传输的数据转换为双沿传输的数据&#xff0c; 在讲解ODDR功能之前&#xff0c;需要先了解OLOGIC的结构及功能。 1、OLOGIC OLOGIC块位于IOB的内侧&#xff0c;FPGA内部信号想要输出到管脚&#xff0c;都必须经过OLOGIC。OLOGIC资源的类…

CleanMyMac4.16中文最新版本下载

当很多人还在为电脑运行缓慢、工作问题不能快速得到解决而烦恼的时候&#xff0c;我已经使用过了多款系统清理工具&#xff0c;并找到了最适合我的那一款。我的电脑是超耐用的Mac book&#xff0c;接下来给大家介绍三种在众多苹果电脑清理软件的排名较高的软件。 一、Maintena…

【ET8】0.ET8入门-ET框架介绍

ET8 新特性 多线程多进程架构,架构更加灵活强大&#xff0c;多线程设计详细内容请看多线程设计课程抽象出纤程(Fiber)的概念&#xff0c;类似erlang的进程&#xff0c;非常轻松的创建多个纤程&#xff0c;利用多核&#xff0c;仍然是单线程开发的体验纤程调度: 主线程&#xf…

首次面试经历(忘指导)当我在简历上写了苍穹外卖,瑞吉外卖时……

&#x1f308;键盘敲烂&#xff0c;年薪30万&#x1f308; 个人简介: 大三在校生&#xff0c;二本院校&#xff0c;专业&#xff1a;信息管理与信息系统 面试岗位&#xff1a; java开发实习生 投”简历“ 临近大三寒假&#xff0c;很早就有实习想法的我&#xff0c;对12月做…

一篇文章了解JDK的前世今生

我们每天都在开发Java,每天都在使用JDK,那么我们了解JDK的发展史吗,这篇文章将带你深入了解JDK的发展史。 JDK(Java Development Kit)是Java开发者工具包,是用于编写Java程序和运行Java程序的软件开发工具集。自从1995年Java语言首次发布以来,JDK已经经历了数十年的发展…

python打开相机,用鼠标左键框选矩形区域,支持一次框选多个矩形区域,通过鼠标右标清除上一次画的矩形。

方案一 import cv2# Global variables rectangles [] current_rectangle [] drawing False# Mouse callback function def mouse_callback(event, x, y, flags, param):global rectangles, current_rectangle, drawingif event cv2.EVENT_LBUTTONDOWN:drawing Truecurren…