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

news2024/11/27 15:33:59

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python环境
    • TensorFlow 环境
    • Jupyter Notebook环境
    • Pycharm 环境
    • 微信开发者工具
    • OneNET云平台
  • 模块实现
    • 1. 数据预处理
      • 1)爬取功能
      • 2)下载功能
    • 2. 创建模型并编译
      • 1)定义模型结构
      • 2)优化损失函数
  • 相关其它博客
  • 工程源代码下载
  • 其它资料下载


在这里插入图片描述

前言

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

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

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

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

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

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

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

总体设计

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

系统整体结构图

系统整体结构如图所示。

在这里插入图片描述

系统流程图

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

数据上传流程如图所示。

在这里插入图片描述

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

运行环境

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

Python环境

详见博客。

TensorFlow 环境

详见博客。

Jupyter Notebook环境

详见博客。

Pycharm 环境

详见博客。

微信开发者工具

详见博客。

OneNET云平台

详见博客。

模块实现

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

1. 数据预处理

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

1)爬取功能

采用Python语言自定义爬虫程序,相关代码如下:

#定义爬虫函数
def pa():
    try:
        #对输入的量进行控制,预防程序发生错误
        start = 1
        end = int(float(name1.get()))
        #创建下载目录,可以修改Imgs4成其他的,也可以下载到现有目录
        if os.path.exists(file_path.get()) is False:
            os.makedirs(file_path.get())
        #打开谷歌浏览器
        browser = webdriver.Chrome()
        browser.get("http://image.baidu.com")
        #print(browser.page_source)
        find_1=browser.find_element_by_id("kw")
        print('----------------------------')
        print(find_1)
        find_1.send_keys(keyWord.get())
        btn=browser.find_element_by_class_name("s_search")
        print('----------------------------')
        print(btn)
        btn.click()
        url=browser.find_element_by_name("pn0").get_attribute('href')
        browser.get(url)
        #设置下载的图片数量
        for i in range(start,end + 1):
        #获取图片位置
          img=browser.find_elements_by_xpath("//img[@class='currentImg']")
            for ele in img:
                #获取图片链接
                target_url = ele.get_attribute("src")
                #设置图片名称,以图片链接中的名字为基础选取最后25个字节为图片名称
                img_name = target_url.split('/')[-1]
                filename = os.path.join(file_path.get(), keyWord.get()+"_"+str(i)+".jpeg")
                download(target_url, filename)
            #下一页
            next_page = browser.find_element_by_class_name("img-next")
            next_page.click()
            time.sleep(3)
           #显示进度
            print('%d / %d' % (i, end)) 
           #关闭浏览器
        browser.quit()
    except ValueError:
        tkinter.messagebox.askokcancel("错误提示","你输入的应该是整数")

2)下载功能

使用自动化测试工具获取第一张图片,将下载链接传给下载模块,然后找到下一张图片的按钮并单击,再次获得新图片的下载链接。

#定义下载函数
def download(url, filename):
    #检查下载目录是否存在
    if os.path.exists(filename):
        print('file exists!')
        return
    try:
        #保存下载图片
        r = requests.get(url, stream=True, timeout=60)
        r.raise_for_status()
        with open(filename, 'wb') as f:
            for chunk in r.iter_content(chunk_size=1024):
                if chunk:  #过滤掉保持活动的新块
                    f.write(chunk)
                    f.flush()
        return filename
    except KeyboardInterrupt:
        if os.path.exists(filename):
            os.remove(filename)
        raise KeyboardInterrupt
    except Exception:
        traceback.print_exc()
        if os.path.exists(filename):
            os.remove(filename)
#获取目录地址
def selectDir():
    global file_path
    file_path.set(filedialog.askdirectory())

使用os.file下载路径,获取图片URL,同时按照一定规律命名并进行存储,如图所示。

在这里插入图片描述

2. 创建模型并编译

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

1)定义模型结构

定义架构为二个卷积层,在每个卷积层后都连接一个最大池化层及一个全连接层,进行数据的降维。在每个卷积层上都使用L2正则化,并引Dropout和BN算法,用以消除模型的过拟合问题。

#第一层使用L2正则化,正则化系数0.01
    X = Conv2D(32, (3, 3), strides = (3, 3), name = 'conv0',kernel_regularizer=regularizers.l2(0.01))(X_input)    
    X = Dropout(rate=0.05)(X)#梯度下降,rate=5%    
    #归一化
    #BN方法,将该层特征值分布重新拉回标准正态分布
    X=BatchNormalization(axis = 3, name = 'bn0')(X)#axis要规范化的轴,通常为特征轴
    #非线性激活函数ReLu
    X = Activation('relu')(X)
    #最大池化层,用来缩减模型的大小,提高计算速度以及提取特征的鲁棒性
    X = MaxPooling2D((2, 2), name='max_pool_1')(X)
    #第二层
    X = Conv2D(4, (3, 3), strides = (3, 3), name = 'conv1',kernel_regularizer=regularizers.l2(0.01))(X)
    X = Dropout(rate=0.15)(X)
    X = BatchNormalization(axis = 3, name = 'bn1')(X)
    X = Activation('relu')(X)
    #最大池化
    X = MaxPooling2D((2, 2), name='max_pool_2')(X) 
    X = Flatten()(X)#降维
X = Dense(3, activation='softmax', name='dense')(X)#全连接神经网络层
#使用Keras模型中的API模型
model = Model(inputs = X_input, outputs = X) 

2)优化损失函数

确定模型架构后进行编译。Adam是常用的梯度下降算法,使用它来优化模型参数。这是多类别的分类问题,因此需要使用交叉熵作为损失函数。由于所有标签都带有相似的权重,因此使用精确度作为性能指标。

#定义损失函数、优化器以及评估模型在训练和测试时的性能指标
model.compile(optimizer='Adam',loss='categorical_crossentropy',metrics=['accuracy']) 

相关其它博客

基于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.coloradmin.cn/o/1291597.html

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

相关文章

RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改

💡💡💡本文独家改进:本文首先复现了将EMA引入到RT-DETR中,并跟不同模块进行结合创新;1)多种Rep C3结合;2)直接作为注意力机制放在网络不同位置; NEU-DET钢材…

rename--一些例子与问题

指令 A 和指令 B之间存在先写后读(RAW)的相关性 指令 B 的源寄存器 r0 来自于指令 A 产生的结果因此在进行寄存器重命名的时候,指令 B 的 r0 对应的物理寄存器应该直接来自于指令A所对应的P30,而不应该来自于从RAT读取的值。指令A,B,D之间存在先写后写(WAW)的相关性…

指针(二)

这里写目录标题 字符指针字符指针与常量字符串的区别: 指针数组数组指针两者的区别:&数组名 ,sizeof(arr)数组指针的使用数组参数,指针参数一维数组传参整型数组:整型指针数组: 一级指针传参二级指针传…

openai 1.3.x 版本 openai.APITimeoutError: Request timed out. 解决

问题描述 openai 1.3.x 版本 请求出现 Request timed out File "E:\Python\Python312\Lib\site-packages\openai\_base_client.py", line 920, in _request return self._retry_request( ^^^^^^^^^^^^^^^^^^^^ File "E:\Python\Python312\L…

数据结构与算法编程题48

有向图的邻接表 #include <iostream> using namespace std;#define MVnum 100 typedef string VertexType;typedef struct ArcNode {int adjvex;struct ArcNode* nextarc;int weight; }ArcNode;typedef struct VNode {VertexType data;struct ArcNode* firstarc; }VNode,…

NAS外网访问方案

基础流程 路由器开启端口映射&#xff08;如果有猫则要配置猫为转发模式&#xff0c;由路由器直接拨号即可使用第三方程序让内网ip发布到公网上&#xff08;如果有云服务器&#xff09;需要开启防火墙端口 好用的第三方程序 FRP穿透 优点&#xff1a;开源免费&#xff0c;速…

基于ssm学院党员管理系统论文

摘 要 互联网发展至今&#xff0c;无论是其理论还是技术都已经成熟&#xff0c;而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播&#xff0c;搭配信息管理工具可以很好地为人们提供服务。针对鄂尔多斯应用技术学院党员信息管理混乱&#xff0c;出错率高&#x…

金蝶云星空业务对象列表显示动态列

文章目录 金蝶云星空业务对象列表显示动态列需求设计开发实现列表插件字段标题数据绑定前事件数据绑定列表插件注册测试 金蝶云星空业务对象列表显示动态列 需求设计 《产品序列号档案》的序列号、适用组织分别关联《序列号主档》的序列号字段&#xff0c;的适用组织表的组织…

Java简易版 TCP协议一对一聊天

客户端 package 二十一章;import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class Server {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;priv…

1.pipenv创建pyqt5虚拟环境

pipenv创建pyqt5虚拟环境 一、安装pipenv ​ cmd输入指令&#xff1a; pip install pipenv二、安装虚拟环境 cmd进入我要创建环境的目录下 我使用以下命令在当前目录下创建虚拟环境&#xff1a; pipenv --python 3.8创建一个基于Python 3.8的虚拟环境&#xff0c;并生成一个…

深度探索Linux操作系统 —— 构建内核

系列文章目录 深度探索Linux操作系统 —— 编译过程分析 深度探索Linux操作系统 —— 构建工具链 深度探索Linux操作系统 —— 构建内核 文章目录 系列文章目录前言一、内核映像的组成 前言 内核的构建系统 kbuild 基于GNU Make&#xff0c;是一套非常复杂的系统。 对于编译内核…

【神化世界】asp网页500内部服务器错误的解决方法

问题解决方案记录 一、问题 在asp网页调试的时候&#xff0c;不小心改错了&#xff0c;好好的页面突然出现如下错误信息了&#xff1a; 二、解决方法 终于找到了问题所在&#xff0c;是sql语句出错造成的&#xff0c;特别记录一下。 正确的写法 sql"select * from mem…

好用的远程访问软件有哪些?

借助远程访问软件可以对不在身边的电脑进行远程控制或访问&#xff0c;这对于需要远程办公的人来说十分的方便&#xff0c;通过这些软件可以使团队协作和沟通不再受地域限制。市面上的远程访问软件有很多&#xff0c;有哪些好用的远程访问软件呢&#xff1f;这里&#xff0c;本…

【顶级神刊】IEEE旗下TOP,CCF-A,投稿5次也要一试再试,升职法宝,这本期刊逆天了!

计算机类 • 好刊解读 今天小编带来IEEE旗下计算机领域顶级神刊&#xff0c;CCF-A类推荐的期刊解读&#xff0c;众多作者投稿5次也要一试再试&#xff0c;究竟这本期刊如何&#xff1f;如您有投稿需求&#xff0c;可作为重点关注&#xff01;后文有相关领域真实发表案例&#…

网络安全攻击预警/态势预测算法汇总

总结&#xff1a; 网络安全攻击预警/态势预测算法众多&#xff0c;主要包括&#xff1a; 基于统计学的算法&#xff1a;协方差矩阵、马尔可夫模型等&#xff1b; 基于机器学习的算法&#xff1a;贝叶斯网络、聚类算法、支持向量机SVM、遗传算法、层次分析法AHP、决策树等&am…

Talk | UCSB博士生欧阳思琦: 利用词级别对比学习实现低资源下的语音翻译

本期为TechBeat人工智能社区第553期线上Talk。 北京时间12月6日(周三)20:00&#xff0c;加州大学圣塔芭芭拉分校博士生—欧阳思琦的Talk将准时在TechBeat人工智能社区开播&#xff01; 他与大家分享的主题是: “利用词级别对比学习实现低资源下的语音翻译”&#xff0c;介绍了他…

扔掉sql语句,用 QxOrm 让你的数据库操作从来没有这么简单过!

ORM简介&#xff1a; ORM 全称是 Object Relational Mapping&#xff08;对象关系映射&#xff09;&#xff0c;是一种程序设计技术&#xff0c;用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说&#xff0c;它其实是创建了一个可在编程语言里使用的“虚拟…

优思学院|六西格玛质量管理的工具、方法和手段

质量管理涉及多种技术不同的手段&#xff0c;包括了理性分析的和数据分析的工具&#xff0c;绝大部分工具都可以在六西格玛绿带和黑带知识领域中找到&#xff0c;因此&#xff0c;质量人应该学好六西格玛。以下&#xff0c;我们列举一些常见的技术手段。 六西格玛项目方法&…

Java基础——桥洞盖小被

文章目录 1. ArryayList2. LinkedList3. HashMap 1. ArryayList 2. LinkedList 3. HashMap

免费的AI改写工具推荐,AI改写工具大全

在本文中&#xff0c;我们将专心分享AI改写的方法、工具以及技巧&#xff0c;旨在帮助大家更好地理解和利用写作利器。我们将揭示AI改写的背后原理&#xff0c;探讨目前市场上主流的AI改写工具&#xff0c;并分享一些提高改写效果的使用技巧。 AI改写的背后技术原理 在深入讨…