一種智能識別分揀中草藥系統(tǒng)
60 多年過去了,盡管輝光管已經(jīng)停產(chǎn),有很多工程師仍然對它情有獨鐘。我用 8 塊液晶顯示屏制作了一個擬輝光管時鐘,感受復古元素的美感,表達對過去經(jīng)典的敬意。
中醫(yī)藥文化是中華民族傳統(tǒng)文化的重要組成部分。近年來,國家對繼承、發(fā)展中醫(yī)藥文化日益重視,明確提出了要加強中華民族傳統(tǒng)文化教育,推動中醫(yī)藥文化進社區(qū)、校園和家庭,將中醫(yī)藥基礎知識納入中小學傳統(tǒng)文化課程。引導學生深入了解中草藥相關知識,這不僅是對傳統(tǒng)文化的傳承,更是對他們勞動素養(yǎng)的提升和實踐能力的鍛煉,具有深遠的現(xiàn)實意義。近年來,眾多地方學校與中醫(yī)藥相關機構攜手,共同開展了豐富多彩的“中草藥進校園”等勞動教育主題活動。學生們在種植園中親手種植、采摘中草藥,通過親身體驗,更直觀地感受到中草藥文化的魅力。然而,學生在剛接觸中草藥時,勢必會對中草藥的特點、功效、用法等相關知識產(chǎn)生疑問。如果學生一一詢問工作人員,這個過程會過于瑣碎、低效。同時,學生在采摘后,如何分類收集到的中草藥又是一大難題。如果混亂存放,會造成后期藥物回收管理上的不便。基于此,我們設計了一款能夠識別中草藥并將其分揀的裝置,以期能夠解決中草藥回收上的困難。
準備工作
該裝置的功能大體上可分為識別和分揀中草藥兩部分。
識別功能可由深度學習訓練模型完成。在此使用 OpenInnoLab 浦育平臺完成模型的訓練和推理測試,還可將訓練模型轉換為輕量、高效的 ONNX 框架文件,方便模型在終端部署。這里的終端是行空板,借助Obloq 通 信 模 塊、Easy IoT 平 臺 可實現(xiàn)行空板與 Arduino Uno 主控板通信,進而控制舵機。通信連接與舵機控制程序可使用 Mind+ 進行圖形化編程,降低開發(fā)難度。制作該裝置所需的軟 / 硬件清單見附表。
核心內(nèi)容
總體設計
我們先搜集中草藥圖片, 形成數(shù)據(jù)集,并將其劃分為訓練集、驗證集和測試集。將數(shù)據(jù)集上傳至OpenInnoLab 浦育平臺,在平臺上進行模型訓練和推理測試,并將其轉化為輕量、高效的 ONNX 框架文件,再將 ONNX 框架文件上傳至行空板。
分揀臺主要包括分類裝置、機械臂和攝像臺。當使用者把中草藥放置在機械臂上后,啟動程序,USB 攝像機自動拍攝,并將圖像返回到行空板中。行空板再將推理識別的結果傳給外接的藍牙音箱,藍牙音箱播報相關的文化知識。同時,行空板通過物聯(lián)網(wǎng)將識別結果傳給 Arduino Uno 主控板,舵機將中草藥投放到對應的分類裝置中,實現(xiàn)藥物分揀。該裝置的技術實現(xiàn)思路如圖 1 所示。
圖 1 中草藥識別分揀裝置的技術實現(xiàn)流程
硬件介紹
行空板
行空板是一款國產(chǎn)開源硬件,它自帶 Linux 操作系統(tǒng)和Python 環(huán)境,還預裝了常用的 Python庫,能夠輕松勝任各種編程相關的開發(fā)場景,如搭建物聯(lián)網(wǎng)系統(tǒng)、體驗人工智能應用、編寫游戲、進行科學實驗、設計聲光互動、開發(fā)可穿戴設備等。同時,行空板作為智能終端設備,采用微型計算機架構,集成了 LCD 彩屏、Wi-Fi、藍牙、多種傳感器和豐富的擴展接口,具體如圖 2 所示。
圖 2 行空板板載接口
Arduino Uno主控板
Arduino Uno 主控板搭載有 AVR單 片 機(ATmega328P)、 晶 體 振蕩 器 和 5V 的 直 流 電 源。它 有 14 個數(shù)字輸入 / 輸出引腳 ( 其中 6 個可用作 PWM 輸出 )、6 個模擬輸入引腳、16MHz 晶體振蕩器、USB 接口、電源插孔、ICSP 端口和復位按鍵。只需要通過 USB 數(shù)據(jù)線連接計算機就能供電、下載程序和通信數(shù)據(jù)。Arduino Uno 開發(fā)板各部分如圖 3 所示。
圖 3 Arduino Uno 主控板
分揀臺
分揀臺主要由分類裝置、機械臂及攝像臺組成。先通過 LaserMaker軟件設計分揀臺,圖紙如圖 4 所示。再用激光切割機切割,所用的材料是3mm 厚的椴木板。
圖 4 分揀臺的設計圖紙
實現(xiàn)過程記錄與程序設計
該裝置的功能大體上可分為識別中草藥(模型訓練與轉換)和分揀中草藥(行空板與 Aduino Uno 主控板通信、Aduino Uno 主控板控制舵機)兩部分。其中模型訓練、推理測試、模型轉換可結合程序理解。
識別中草藥
1. 數(shù)據(jù)集制作
通過爬蟲程序爬取中草藥圖片(如果有條件,建議實地拍攝圖片,這樣在模型部署完成后,識別效果更好),并進行篩選、清洗,爬取的中草藥圖片(以車前子為例)如圖 5 所示。
圖 5 爬取的中草藥圖片(以車前子為例)
然后,通過劃分數(shù)據(jù)集的程序,將上述數(shù)據(jù)集劃分為訓練集、驗證集、測試集。此處采集了 8 種中草藥的數(shù)據(jù)集,如圖 6 所示。
圖 6 中草藥數(shù)據(jù)集
劃分數(shù)據(jù)集程序如程序 1 所示。
將數(shù)據(jù)集上傳至 OpenInnoLab浦育平臺,如圖 7 所示。
圖 7 將數(shù)據(jù)集上傳至 OpenInnoLab 浦育平臺
2. 模型訓練
模型訓練時選用輕量、高效的卷積神經(jīng)網(wǎng)絡模型 MobileNet,該模型由谷歌公司開發(fā),是 SOTA 模型(即“State-Of-The-Art” 模 型, 在 這指模型訓練中最先進、高效的模型的總稱)的一種。它能在保持準確性的同時,通過減少模型的計算量,提高模型的效率和速度。MobileNet 可以通過在大規(guī)模數(shù)據(jù)集上預訓練,將其用作遷移學習的基礎模型,進一步提高模型的準確性和穩(wěn)定性。模型訓練過程如圖 8 所示。
圖 8 模型訓練過程
模型訓練程序如程序 2 所示。
運行之后即可得到識別權重文件,此處名為 best_accuracy_top-5_epoch_43.pth,接下來將在推理測試程序中用到。
3. 推理測試
推理測試程序 3 如下,推理測試結果如圖 9 所示。
圖 9 推理測試結果
4. 模型轉換
模型轉換時選用 ONNX,該模型由微軟公司開發(fā),是一種開放的深度學習框架互操作性標準,幫助開發(fā)人員實現(xiàn)深度學習框架之間的互操作性和模型的共享和遷移,提高模型推理和部署的效率和靈活性,從而實現(xiàn)
更加高效、可靠和可擴展的圖像分類應用。
模型轉換如程序 4 所示。
轉 換 后 得 到 ImageNet1k.onnx文件,這也是我們的部署文件,后續(xù)把它上傳到行空板中,OpenInnoLab浦育平臺模型轉換示意如圖 10 所示。
圖 10 OpenInnoLab 浦育平臺模型轉換示意
分揀中草藥
此功能主要通過編程實現(xiàn),此處先對通信功能進行設備準備說明。
第一步:先將模型轉換得到的ImageNet1k.onnx 文 件 上 傳 至 行 空板,如圖 11 所示。
圖 11 將 ImageNet1k.onnx 文件上傳至行空板
第二步:需要將 Arduino Uno 主控板加裝的 Obloq 通信模塊、行空板、計算機三者設置于同一網(wǎng)絡下,建議用手機開熱點,熱點連接情況如圖 12所示。
圖 12 熱點連接示意
注意,當 Obloq 通信模塊連接到熱點時將會亮綠燈,如圖 13 所示,其他情況可自行搜索排查問題。
圖 13 Obloq 通信模塊連接成功示意
第 三 步:當 行 空 板 和 Arduino Uno 主控板同處一個熱點下時,可以開始考慮如何讓兩者實現(xiàn)通信。此處借用 Easy IoT 平臺,采用 MQTT 通信協(xié)議。
MQTT 是一種輕量級的、基于發(fā)布 - 訂閱模式的物聯(lián)網(wǎng)通信協(xié)議,是由 IBM 公司開發(fā)的,主要用于連接傳感器、物聯(lián)網(wǎng)設備或其他小內(nèi)存和小帶寬設備,實現(xiàn)設備間的互聯(lián)互通。
在 Easy IoT 平臺注冊賬號并登錄,登錄后添加設備名,具體如圖 14所示。至此,通信連接準備工作完成,接下來結合程序說明編程過程。
圖 14 Easy IoT 平臺界面
第四步:打開 Mind+,需要編寫完成“攝像頭拍攝調(diào)用——識別框架調(diào)用——消息發(fā)送”這一流程的程序,并下載到行空板中。
這個功能實現(xiàn)程序如程序 5 所示。
接下來是行空板連接 Easy IoT平臺的程序,其中 user="epOOB4sVR",password="etOdfVsVgz" 為 圖14 中需要記錄的另外兩條數(shù)據(jù)。
此功能程序如程序 6 所示。
當行空板識別到中草藥后,會將中草藥名稱通過訂閱消息的方式發(fā)送到 Easy IoT 平臺,而 Easy IoT 平臺也能查看消息發(fā)送結果,具體如圖 15所示。
圖 15 Easy IoT 平臺設備消息查詢結果
到這里就實現(xiàn)了行空板將識別結果發(fā)送到Easy IoT 平 臺 的 功 能。接下來介紹 Arduino Uno主控板如何獲取 Easy IoT平臺數(shù)據(jù)并執(zhí)行相關動作指令。
第五步:在 Arduino Uno 主 控 板 上 連 接 好 舵機、Obloq 通信模塊等,打開 Mind+,直接在可視化編程界面進行編程,主要程序如圖 16 所示。
圖 16 主要程序
需要注意的是 MQTT的初始化設置,同樣使用到 圖 14 中 的 3 條 數(shù) 據(jù),具體設置如圖 17 所示。
圖 17 MQTT 協(xié)議配置
Arduino Uno 主 控 板 可 以 接 收Easy IoT 平臺消息后,我們可以在串口中查看消息,如圖 18 所示。
圖 18 Obloq 通信模塊接收到 Easy IoT 平臺消息
至此,行空板與 Arduino Uno 主控板之間的通信工作便設置完成了。最后,是 Arduino Uno 主控板控制舵機的程序說明。也就是圖 16 中所涉及的“復位”“第一”等封裝函數(shù),參數(shù)需要根據(jù)實際搭建的分揀臺進行調(diào)整,圖 19 所示程序僅供參考。
圖 19 舵機控制程序
成品展示
最終分揀臺的搭建成果如圖 20所示。
圖 20 最終成品
同時我們也把這個項目中深度學習的部分打包在 OpenInnoLab 浦育平臺,讀者可基于我們的項目體驗中草藥識別模型的訓練、推理測試、轉換過程。
結語
從演示視頻中我們可以看出,目前該作品還依賴人工將藥物放置在分類裝置上,這顯然與現(xiàn)實有所出入。我們打算在分類裝置前加入機械臂,從藥物堆中抓取藥物放到分類裝置上,進一步提高中草藥加工過程的機械化程度,其中涉及的技術更為復雜,需要我們進一步探索。
這個項目傾注了我們接近半年的心血。在學習與創(chuàng)作過程中,我們對復雜的算法、晦澀的邏輯結構感到困惑和煩惱,幾次想要放棄。最終,我們不斷地查閱資料、請教前輩、反復試錯,問題都被一一解決,達到了想要的效果。
特別聲明:以上內(nèi)容(如有圖片或視頻亦包括在內(nèi))為自媒體平臺“網(wǎng)易號”用戶上傳并發(fā)布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.