基于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.pswp.cn/news/206700.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206700.shtml
英文地址,請注明出處:http://en.pswp.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…