基于卷積神經(jīng)網(wǎng)絡(luò)的蘑菇識別微信小程序

向AI轉(zhuǎn)型的程序員都關(guān)注了這個號??????
項(xiàng)目描述
本項(xiàng)目是基于SpringBoot和圖像分類算法用來識別蘑菇的微信小程序,根據(jù)拍攝上傳的蘑菇圖片,通過python腳本調(diào)用訓(xùn)練好的模型,經(jīng)過后端處理,最后返回識別結(jié)果的類別及其識別準(zhǔn)確率。
技術(shù)亮點(diǎn)
-
采用MobileNetV2進(jìn)行作為蘑菇圖像分類的特征提取網(wǎng)絡(luò),使模型輕量化,使得參數(shù)量減少了60%,加快訪問速度
-
通過@ControllerAdvice注解實(shí)現(xiàn)攔截器,利用@ExceptionHandler注解捕捉所有異常,進(jìn)行統(tǒng)一處理
-
為提升查詢效率,在蘑菇學(xué)名字段上建立了索引
1.1 總體設(shè)計(jì)
介紹了小程序的整體系統(tǒng)架構(gòu)以及使用小程序進(jìn)行蘑菇識別的流程。
1.1.1 系統(tǒng)架構(gòu)
小程序采用前后端分離架構(gòu),前端采用taro框架,后端采用springboot框架,并通過nginx進(jìn)行請求轉(zhuǎn)發(fā)。
?
1.1.2 識別流程
使用小程序?qū)δ⒐竭M(jìn)行識別時,小程序會向后端發(fā)起請求,后端再調(diào)用python腳本進(jìn)行識別,并從數(shù)據(jù)庫查詢蘑菇具體信息。

1.2 算法實(shí)現(xiàn)
介紹了蘑菇識別算法采用的數(shù)據(jù)集,識別算法的設(shè)計(jì)與實(shí)現(xiàn),以及算法的識別效果與所做的改進(jìn)。
項(xiàng)目開源代碼獲取地址:
關(guān)注微信公眾號 datayx? 然后回復(fù)? 蘑菇 ? 即可獲取。
1.2.1 數(shù)據(jù)集
在kaggle獲取,地址:
https://www.kaggle.com/datasets/maysee/mushrooms-classification-common-genuss-images
該數(shù)據(jù)集中有9個最常見的北歐蘑菇屬圖像文件夾。每個文件夾包含300到 1500個蘑菇屬的選定圖像。標(biāo)簽是文件夾的名稱。


1.2.2 算法設(shè)計(jì)與實(shí)現(xiàn)
處理數(shù)據(jù)集:用tensorflow.image.decode_jpeg和tensorflow.image.resize 對圖片進(jìn)行標(biāo)準(zhǔn)化。
訓(xùn)練:將圖片與標(biāo)簽(文件夾名即標(biāo)簽)打包后,將前百分之80設(shè)置為訓(xùn)練集,后百分之20設(shè)置為驗(yàn)證集。利用tf.keras.Sequential構(gòu)建模型model,最后調(diào)用model.fit進(jìn)行訓(xùn)練。
識別:利用tf.keras.Sequential構(gòu)建模型model,并調(diào)用
model.load_weights加載訓(xùn)練好的模型,最后調(diào)用model.predict進(jìn)行預(yù)測。
1.2.3 識別結(jié)果與改進(jìn)
訓(xùn)練集準(zhǔn)確率:98.53%,測試集準(zhǔn)確率:72.32%。

可以發(fā)現(xiàn)這個結(jié)果很不理想。一開始我以為是因?yàn)檫^擬合了,于是嘗試增加dropout,但發(fā)現(xiàn)并沒有起到什么作用[張1]?。
于是我去看了看數(shù)據(jù)集中的數(shù)據(jù),發(fā)現(xiàn)有很多圖片是臟數(shù)據(jù),比如:

之后我對這些臟數(shù)據(jù)進(jìn)行了手動刪除,同時我發(fā)現(xiàn)圖片中干擾元素較多(比如背景中的花草),可能會導(dǎo)致網(wǎng)絡(luò)無法很好地對蘑菇進(jìn)行分類。于是我嘗試使用了github上的開源庫https://github.com/nadermx/backgroundremover 對數(shù)據(jù)集中的數(shù)據(jù)進(jìn)行去背景處理。
去背景腳本:遍歷原圖片,對當(dāng)前圖片執(zhí)行 os.system('backgroundremover -i "'+original_file+'" -o "'+new_file+'"')命令進(jìn)行去除圖片操作,并將結(jié)果存入另一個文件下。
去背景前:

去背景后:

最后使用去除了臟數(shù)據(jù),并進(jìn)行了去背景操作后的數(shù)據(jù)集進(jìn)行訓(xùn)練,訓(xùn)練集準(zhǔn)確率:99.88%, 測試集準(zhǔn)確率:81.25%。


1.3 應(yīng)用實(shí)現(xiàn)
介紹了小程序應(yīng)用數(shù)據(jù)庫、后端、前端的設(shè)計(jì)與實(shí)現(xiàn)。
1.3.1 數(shù)據(jù)庫
采用Mysql數(shù)據(jù)庫。由于系統(tǒng)比較簡單,只有一張表:mushroom。
mushroom表字段:id(主鍵),name(蘑菇名稱),scientific_name (學(xué)名),species(所屬科屬),toxicity(毒性),feature(特征),文獻(xiàn)(documents),img_path(圖片路徑)。
其中為提升查詢效率,在scientific_name字段上建立了索引。
1.3.2 后端
用springboot框架進(jìn)行開發(fā),用mybatis-plus框架進(jìn)行數(shù)據(jù)庫交互。
核心接口邏輯:將前端傳過來的圖片上傳至服務(wù)器指定路徑下-->利用Runtime.getRuntime().exec(command)執(zhí)行python命令:python identify.py <圖片路徑>(python腳本讀取該路徑下的圖片進(jìn)行識別)--> 讀取python腳本打印出來的結(jié)果(所有類別及其識別準(zhǔn)確率),并進(jìn)行排序-->刪除上傳至服務(wù)器的圖片-->返回識別準(zhǔn)確率前三的類別。
統(tǒng)一錯誤處理:通過@ControllerAdvice注解實(shí)現(xiàn)一個攔截器,并利用@ExceptionHandler(value = Exception.class)注解捕捉所有異常,進(jìn)行統(tǒng)一處理。
1.3.3 前端
基于Taro(React)框架進(jìn)行開發(fā)。
上傳圖片:使用Taro.chooseImgae api選擇圖片,選擇成功后調(diào)用Taro.uploadFile api將圖片上傳至服務(wù)器。
頁面間傳遞對象參數(shù):父頁面調(diào)用Taro.eventCenter.trigger api觸發(fā)事件,將參數(shù)放入事件中。子頁面調(diào)用Taro.eventCenter.once api監(jiān)聽事件,取得參數(shù)。
獲取蘑菇詳細(xì)信息:通過Taro.request api調(diào)用后端接口獲取詳細(xì)信息。
1.4 效果展示
使用“識菇”微信小程序進(jìn)行蘑菇識別的效果如下:
?
?
?
?
機(jī)器學(xué)習(xí)算法AI大數(shù)據(jù)技術(shù)
?搜索公眾號添加:? datanlp
長按圖片,識別二維碼
閱讀過本文的人還看了以下文章:
TensorFlow 2.0深度學(xué)習(xí)案例實(shí)戰(zhàn)
基于40萬表格數(shù)據(jù)集TableBank,用MaskRCNN做表格檢測
《基于深度學(xué)習(xí)的自然語言處理》中/英PDF
Deep Learning 中文版初版-周志華團(tuán)隊(duì)
【全套視頻課】最全的目標(biāo)檢測算法系列講解,通俗易懂!
《美團(tuán)機(jī)器學(xué)習(xí)實(shí)踐》_美團(tuán)算法團(tuán)隊(duì).pdf
《深度學(xué)習(xí)入門:基于Python的理論與實(shí)現(xiàn)》高清中文PDF+源碼
《深度學(xué)習(xí):基于Keras的Python實(shí)踐》PDF和代碼
python就業(yè)班學(xué)習(xí)視頻,從入門到實(shí)戰(zhàn)項(xiàng)目
2019最新《PyTorch自然語言處理》英、中文版PDF+源碼
《21個項(xiàng)目玩轉(zhuǎn)深度學(xué)習(xí):基于TensorFlow的實(shí)踐詳解》完整版PDF+附書代碼
《深度學(xué)習(xí)之pytorch》pdf+附書源碼
PyTorch深度學(xué)習(xí)快速實(shí)戰(zhàn)入門《pytorch-handbook》
【下載】豆瓣評分8.1,《機(jī)器學(xué)習(xí)實(shí)戰(zhàn):基于Scikit-Learn和TensorFlow》
《Python數(shù)據(jù)分析與挖掘?qū)崙?zhàn)》PDF+完整源碼
汽車行業(yè)完整知識圖譜項(xiàng)目實(shí)戰(zhàn)視頻(全23課)
李沐大神開源《動手學(xué)深度學(xué)習(xí)》,加州伯克利深度學(xué)習(xí)(2019春)教材
筆記、代碼清晰易懂!李航《統(tǒng)計(jì)學(xué)習(xí)方法》最新資源全套!
《神經(jīng)網(wǎng)絡(luò)與深度學(xué)習(xí)》最新2018版中英PDF+源碼
將機(jī)器學(xué)習(xí)模型部署為REST API
FashionAI服裝屬性標(biāo)簽圖像識別Top1-5方案分享
重要開源!CNN-RNN-CTC 實(shí)現(xiàn)手寫漢字識別
同樣是機(jī)器學(xué)習(xí)算法工程師,你的面試為什么過不了?
前海征信大數(shù)據(jù)算法:風(fēng)險概率預(yù)測
【Keras】完整實(shí)現(xiàn)‘交通標(biāo)志’分類、‘票據(jù)’分類兩個項(xiàng)目,讓你掌握深度學(xué)習(xí)圖像分類
VGG16遷移學(xué)習(xí),實(shí)現(xiàn)醫(yī)學(xué)圖像識別分類工程項(xiàng)目
特征工程(二) :文本數(shù)據(jù)的展開、過濾和分塊
如何利用全新的決策樹集成級聯(lián)結(jié)構(gòu)gcForest做特征工程并打分?
Machine Learning Yearning 中文翻譯稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
python+flask搭建CNN在線識別手寫中文網(wǎng)站
中科院Kaggle全球文本匹配競賽華人第1名團(tuán)隊(duì)-深度學(xué)習(xí)與特征工程
不斷更新資源
深度學(xué)習(xí)、機(jī)器學(xué)習(xí)、數(shù)據(jù)分析、python
?搜索公眾號添加:? datayx??
