目錄
- 前言
- 總體設計
- 系統整體結構圖
- 系統流程圖
- 運行環境
- 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相關資料,希望能幫助到所有小伙伴們。