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

目录

  • 前言
  • 总体设计
    • 系统整体结构图
    • 系统流程图
  • 运行环境
    • Python环境
    • TensorFlow 环境
    • Jupyter Notebook环境
    • Pycharm 环境
    • 微信开发者工具
    • OneNET云平台
  • 模块实现
    • 1. 数据预处理
    • 2. 创建模型并编译
    • 3. 模型训练及保存
      • 1)模型训练
      • 2)模型保存
    • 4. 上传结果
      • 1)图片拍摄
      • 2)模型导入及调用
      • 3)数据上传OneNET云平台
        • (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张图片作为数据集。

详见博客。

2. 创建模型并编译

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

详见博客。

3. 模型训练及保存

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

1)模型训练

本部分相关代码如下:

#model.fit函数返回一个History的对象
#History属性记录了损失函数和其他指标的数值随epoch变化的情况
hist =model.fit(x = train_data, y = train_label,validation_data=[test_data, test_label], epochs = 500, batch_size = 64)
hist.history['val_acc'][0]#记录运行输出
preds = model.evaluate(test_data, test_label)
print ("Loss = " + str(preds[0]))
print ("Test Accuracy = " + str(preds[1]))

其中,一个batch就是在一次前向/后向传播过程用到的训练样例数量,本项目中每一次用64张图片进行训练。预处理数据集后,按照8:2的比例划分训练集和测试集,如图所示。

在这里插入图片描述

通过观察训练集和测试集的损失函数、准确率的大小来评估模型的训练程度,并进行模型训练的进一步决策。一般来说,训练集和测试集的损失函数(或准确率)不变且基本相等为模型训练的最佳状态。

可以将训练过程中保存的准确率和损失函数以图片的形式呈现。

import numpy as np
import matplotlib.pyplot as plt
#绘制曲线
#解决中文显示问题
plt.rcParams['font.sans-serif'] = ['KaiTi'] #指定默认字体
plt.rcParams['axes.unicode_minus'] = False #解决保存图像是“-”显示为方块的问题
fig, ax1 = plt.subplots()
ax2 = ax1.twinx()
lns1 = ax1.plot(np.arange(500), loss, label="Loss")
#按一定间隔显示实现方法
#ax2.plot(200 * np.arange(len(fig_accuracy)), fig_accuracy, 'r')
lns2 = ax2.plot(np.arange(500), acc, 'r', label="Accuracy")
ax1.set_xlabel('训练轮次')
ax1.set_ylabel('训练损失值')
ax2.set_ylabel('训练准确率')
#合并图例
lns = lns1 + lns2
labels = ["损失", "准确率"]
#labels = [l.get_label() for l in lns]
plt.legend(lns, labels, loc=7)
plt.show()

2)模型保存

为能够被Python程序读取,将模型保存为.h5格式,利用Keras中的Model模块进行保存。模型被保存后,可以被重用,也可以移植到其他环境中使用。

from keras.models import Model
model = HappyModel((IMG_H,IMG_W,3))
#保存为.h5文件
model.save('C:/Users/SeverusSnape/Desktop/myProject/classifier_3.h5')

模型被保存后,可以被重用,也可以移植到其他环境中使用。

4. 上传结果

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

1)图片拍摄

图片拍摄具体操作如下:
(1)调用摄像头需要引入cv2类,对数据进行保护。

import cv2

(2)调用cv2类中的VideoCapture函数,实现调用笔记本内置摄像头拍摄的功能。

#调用笔记本内置摄像头,参数为0,如果有其他的摄像头可以调整参数为1,2
cap=cv2.VideoCapture(0) 
while True:#从摄像头读取图片sucess,img=cap.read()#显示摄像头cv2.imshow("img",img)#等待时延为1ms,保持画面的持续k=cv2.waitKey(1)if k == 27:#通过ESC键退出摄像cv2.destroyAllWindows()breakelif k == 13:#通过回车保存图片,并退出cv2.imwrite('C:/Users/SeverusSnape/Desktop/myProject/images/try.png',img)cv2.destroyAllWindows()break
#关闭摄像头
cap.release()    

2)模型导入及调用

模型导入及调用的相关操作如下:

(1)把训练好的.h5文件放入myProject项目目录。

(2)加载Keras模型库,调用Keras模型得到预测结果。

from keras.models import load_model

(3)在xxxtsj.ipynb中声明模型存放路径,调用load_model()函数。

#加载模型.h5文件
model=load_model('C:/Users/SeverusSnape/Desktop/myProject/classifier_3.h5')
#定义规范化图片大小和像素值的函数
def get_inputs(src=[]):rsltData = []for s in src:input = cv2.imread(s)#读入图像,BGRinput = cv2.resize(input, (IMG_W, IMG_H))#缩放input = cv2.cvtColor(input, cv2.COLOR_BGR2RGB)#将BGR图片转成RGB
pre_y=model.predict(np.reshape(input,[1,IMG_H,IMG_W,3]),batch_size=1)print(np.argmax(pre_y, axis=1))#打印最大概率对应的标签a=np.argmax(pre_y,axis=1)#必须通过遍历否则格式不对,不止包含数还包括btypyfor i in a:rsltData.append(i)#将最大概率对应的标签加入rsltData列表尾部return rsltData
predict_dir = 'C:/Users/SeverusSnape/Desktop/myProject/images/'
#要预测图片所在的文件夹
picName = os.listdir(predict_dir)#获得文件夹内的文件名
images = []
for testpath in picName:fn = os.path.join(predict_dir, testpath)if fn.endswith('png'):#后缀是png的文件会被存入images列表picData = fnprint(picData)#打印被存入的图片地址images.append(picData)#地址存入images列表
rsltData = get_inputs(images)#调用规范化图片函数得到最大概率对应标签

3)数据上传OneNET云平台

本部分包括图片信息上传和识别结果上传。

(1)图片信息上传

将图片信息转换成二进制数据流,使用POST方法上传。

#定义图片上传函数
http_put_pic(data):url = "http://api.heclouds.com/bindata"headers = {"Content-Type": "image/png", #格式"api-key": "93IlIl2tfXddMN8sgQIInc7qbXs=", }#device_id是设备ID#datastream_id是数据流IDquerystring = {"device_id": "586488389", "datastream_id": "pic"}#流式上传with open(data, 'rb') as f:requests.post(url, params=querystring, headers=headers, data=f)
(2)预测结果上传

因为识别的结果是整型数据,直接使用POST方法上传数值。

#定义预测结果上传函数
def http_put_rslt(data):url = "http://api.heclouds.com/devices/" + deviceId + '/datapoints'd = time.strftime('%Y-%m-%dT%H:%M:%S')data = int(data)  #将Numpy数据int64转化成json可识别的intvalues = {"datastreams": [{"id": "rslt", "datapoints": [{"value": data}]}]}jdata = json.dumps(values).encode("utf-8")request = urllib.request.Request(url, jdata)  #获取链接数据request.add_header('api-key', APIKey)request.get_method = lambda: 'POST'  #POST方法request = urllib.request.urlopen(request)return request.read()

相关其它博客

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

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

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

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

工程源代码下载

详见本人博客资源下载页


其它资料下载

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

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

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

相关文章

基于YOLOv8深度学习的血细胞检测与计数系统【python源码+Pyqt5界面+数据集+训练代码】目标检测、深度学习实战、智慧医疗

《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…

(纯原创)基于JavaWeb的宠物领养商城(详细源码以及开发设计报告)

摘要 本宠物领养系统以MVC分层为原则,数据持久化使用Mybatis,数据库使用MySQL,这些技术目前相对比较成熟,方便系统的维护与扩展 商城系统包括了宠物领养、用户注册、用户登录、商品查询、商品添加到购物车、删除商品等几大功能…

LeetCode:1631. 最小体力消耗路径(SPFA Java)

目录 1631. 最小体力消耗路径 题目描述: 实现代码与解析: BFSDP 原理思路: 1631. 最小体力消耗路径 题目描述: 你准备参加一场远足活动。给你一个二维 rows x columns 的地图 heights ,其中 heights[row][col] 表…

python的websocket方法教程

WebSocket是一种网络通信协议,它在单个TCP连接上提供全双工的通信信道。在本篇文章中,我们将探讨如何在Python中使用WebSocket实现实时通信。 websockets是Python中最常用的网络库之一,也是websocket协议的Python实现。它不仅作为基础组件在…

抖音小店经营规则解析:避免被扣分的关键因素

抖音小店是一个受欢迎的电商平台,为创业者提供了良好的销售和推广机会。为了确保在抖音小店的运营中不会被扣分或出现其他问题,不若与众整理了几个关键的规则需要注意和遵守。 1. 产品合规性: 抖音小店要求所有销售的产品必须合法合规&#x…

图论专栏一《图的基础知识》

图论(Graph Theory)是数学的一个分支。它以图为研究对象。图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些实体之间的某种特定关系,用点代表实体,用连接两点的线表示两个实体间具有的…

【漏洞修复】Cisco IOS XE软件Web UI权限提升漏洞及修复方法

关于Cisco IOS XE软件Web UI权限提升漏洞及修复方法 文章目录 漏洞基本信息漏洞影响范围确认设备是否受影响漏洞修复方法推荐阅读 漏洞基本信息 Cisco IOS XE Unauthenticatd Remote Command Execution (CVE-2023-20198) (Direct Check) Severity:Critical Vulnerability Pri…

HeartBeat监控Mysql状态

目录 一、概述 二、 安装部署 三、配置 四、启动服务 五、查看数据 一、概述 使用heartbeat可以实现在kibana界面对 Mysql 服务存活状态进行观察,如有必要,也可在服务宕机后立即向相关人员发送邮件通知 二、 安装部署 参照章节:监控组件…

MySQL 教程 2.1.1

MySQL 插入数据 MySQL 表中使用 INSERT INTO 语句来插入数据。 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据。 语法 以下为向MySQL数据表插入数据通用的 INSERT INTO SQL语法: INSERT INTO table_name (colu…

前后端项目开发笔记-环境搭建(一)

一、从https://gitee.com/renrenio/renren-security下载代码 1、项目说明 renren-security是一个轻量级的,前后端分离的Java快速开发平台,能快速开发项目并交付【接私活利器】采用SpringBoot、Shiro、MyBatis-Plus、Vue3、TypeScript、Element Plus、V…

Nacos-NacosRule 负载均衡—设置集群使本地服务优先访问

userservice: ribbon: NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 NacosRule 权重计算方法 目录 一、介绍 二、示例(案例截图) 三、总结 一、介绍 NacosRule是AlibabaNacos自己实现的一个负载均衡策略&…

构建智能外卖跑腿小程序:技术实践与代码示例

在快节奏的现代生活中,外卖跑腿服务已成为人们日常生活中不可或缺的一部分。为了提供更智能、高效的外卖跑腿体验,本文将深入探讨构建一款智能外卖跑腿小程序所需的关键技术,并提供相应的代码示例。 1. 地理位置服务的整合 外卖跑腿小程序…