

摘 要:本項目針對自助餐廳中手工結算的弊端,基于深度學習技術開發了一款能夠對菜品自動識別與計價結算的系統。在軟件開發中,使用Python語言,借助PyQT開發了菜品自動識別與計價結算系統的GUI界面;選用了MySQL進行數據庫的建立與維護;采用基于PyTorch深度學習框架的開源圖像識別項目YOLO-V5作為系統骨干模型,利用自行收集的菜品數據集對模型進行訓練與微調,實現了基于圖像識別的智能餐盤檢測結算系統。
關鍵詞:菜品識別;Python;深度學習;神經網絡
一、引言
近幾年,隨著深度學習技術的快速發展和大規模食品圖像數據集的不斷發布,國內外對食品圖像識別研究也逐漸增多。這些研究主要圍繞著菜品食物的熱量、體積、營養成分、菜譜生成等領域而開展,目前這些成果已逐步應用到商用場景中。
國內學者也對食品圖像識別做了大量的研究,由于在菜品與烹飪上的差異,中餐菜品比西餐要豐富了很多,圖像紋理更加復雜,這對產品的識別提出了更高的要求,是的中餐菜品的識別更具有挑戰性。為了促進中餐自動檢測識別的研究,2017 年Chen Xin等發布了一個大型的中餐菜品數據集,該數據集共計包含了208中不同類別的菜品,共計185628張有效圖片。除了提供了大型的中餐數據集,作者還提出了一種新的菜品檢測分類方法,該方法使用投票的方式將多種模型預測的結果融合起來,大幅提升了菜品檢測識別的正確率。本文利用該數據集對YOLO-V5深度檢測模型進行預訓練,在自行收集的菜品數據集上微調,使用PyQT、MySQL、PyTorch等工具實現了智能餐盤檢測與結算系統的開發。
二、項目開發工具簡介
(一)MySQL簡介
MySQL是一款安全、跨平臺、高效的輕量級數據庫系統,由甲骨文公司開發。當前多種主流語言都能與該數據庫系統進行緊密結合。
(二)PyQT簡介
PyQT5是Digia Qt5與Python語言結合的應用框架,是當前最強大的一款GUI庫。PyQT5是由一系列Python模塊組成,該庫所含有內容共計超過620個類,6000函數和方法,能在不同的主流操作系統上運行。
(三)OpenCV簡介
OpenCV(Open Source Computer Vision Library)是一個開源發行的跨平臺計算機視覺庫,該庫集成了數量眾多的計算機視覺通用算法,已成為計算機視覺領域最有影響力的研究工具。
(四)PyTorch簡介
PyTorch由Facebook人工智能團隊以Torch為底層開發的一款開源深度學習框架。該框架以Python作為開發語言,為人工智能領域的科學研究與應用開發提供了極大的便利。PyTorch擁有兩個非常強大的優勢,一是支持GPU張量運算,在圖形處理單元(GPU)的幫助下,能夠為張量計算提供強大的加速能力,使其能夠在短時間內處理大數據的要求;二是支持動態圖機制,能夠自動構建神經網絡的動態圖,并提供具自動求導的功能。
三、菜品圖像識別模型
本項目采用了計算機視覺技術來自動識別餐盤內的各類菜品,需要從攝像頭實時采集視頻數據,對視頻中的每幀圖像進行檢測識別,獲得菜品的位置并標定菜品的品名與價格,進而自動完成當前餐盤內所有菜品的價格結算。為了提高開發進度,同時保證檢測與識別的精度與性能,該系統選用了YOLO-V5圖像檢測模型作為菜品檢測的基礎模型。該模型采用了當前在圖像處理中應用最為廣泛的深度卷積神經網絡模型來完成特征的提取與檢測工作,其核心是搭建起深度的卷積-池化-全連接網絡結構。該識別模型的YOLO-V5采用了高度優化后的卷積神經網絡作為核心,具有非常好的可擴展性,可以通過在自己的數據集上訓練后,獲得具有專門用途的識別模型。
為了使訓練的模型更具有中國菜品的特色,本文沒有使用網絡上可獲得的國外公開數據集,而是自己采集標了一份從某餐廳中獲取的圖像數據集。
四、智慧餐廳結算系統開發
(一)需求分析
該系統需要有四大方面的需求,分別是菜品圖片的檢測識別功能、攝像頭實時檢測識別功能,數據獲取和管理功能。
菜品圖片的檢測識別功能要求能夠對待檢測的菜品圖片進行實時的檢測,判定是否含有菜品,如果有的話,進一步將識別出來的菜品信息顯示出來。攝像頭實時檢測菜品功能要求能夠從攝像頭中實時的獲取菜品圖片進行檢測。需要能夠判定是否有菜品,還需要實時的將識別出來的菜品信息顯示在界面上。數據獲取和管理功能,要求將圖片中的信息能夠進行管理,錄入。同時可以快速的找到指定的數據片段。綜合管理功能需要系統能夠具備對用戶,數據、參數等多個維度設置的綜合管理能力。方便維護人員能夠結算系統的各個層面。
(二)總體架構設計
1.數據庫設計
本項目目前在數據庫設計中相對簡單,涉及到的實體僅有菜品與消費記錄2張工作表,其中菜品工作表共存放了4個字段,分別代表著菜品的編號,菜品的英文名,菜品的中文名和菜品的單價。該工作表用于匹配已經識別的菜品信息,并同時顯示在桌面上,讓用戶在結賬過程有一個更好的體驗。而消費記錄表用于存放訂單信息,其中共有三個字段,分別代表著消費記錄的編號,付款的時間和消費的總價格。
2.菜品自動結算界面的設計
為了對菜品進行自動識別結算,進一步開發了結算界面。在開發中使用了Anaconda與PyQT進行GUI界面的布局,采用VSCode作為開發環境。布局后的界面如圖1所示。圖中右側為攝像頭采用的視頻展示區域,其中調用了訓練后的YOLO-V5模型對視頻中的內容進行實時的檢測與識別。當單擊確認后,左側的表格控件中將展示出各個具體的飯菜品名及數量與價,并給出最終的總價格,從而實現餐廳的菜品智能結算。
3.菜品信息管理界面的設計
在完成菜品識別與結算功能后,還需對菜品表中的數據進行管理。如圖2所示。圖中左側為表中數據展示區域,可以查看表中所有的數據。當輸入指定數據后,點擊確認,可以進行數據的一個檢索。同時,右側還有增減,修改,刪除功能,也只要根據提示,輸入指定的信息,單擊確定。會提示相應的信息,同時左側表格中也會有相應的數據顯示。從而完成所有的管理功能。
(三)遷移
在桌面端開發訓練好的基于YOLO-V5的菜品檢測與識別模型對硬件環境的依賴比較高,無法靈活方便地部署。為了提高系統部署的靈活性與可用性,進一步將訓練好的系統遷移到Nvidia Jetson Nano平臺上是一個比較好的選擇。
Nvidia Jetson Nano是一塊用于深度學習或者計算機視覺的開發板,該系統選用的是一個具有4GB 顯存的版本。在Jetson Nano的主面板上提供了四個USB接口、一個HDMI視頻接口、一個電源接口(type-c)、網線接口、一個Micro-USB,一個攝像頭接口,另外硬件上還包含一個小的散熱風扇。整個系統使用了亞克力板提供保護。在把整個硬件組裝好后,可以將整個系統看成一個小的計算機硬件系統。但是與普通桌面硬件環境相比,由Jetson Nano組裝后的硬件體積要小很多,可以很方便地進行空間部署。
五、結論
本文在前人研究的基礎上,對移動端目標檢測框架YOLOv5進行了微調,訓練出一個專門識別中國傳統菜品的模型,提高了對該類型菜品的檢測精度和速度。由于個人知識與技術有限,且受到時間限制,該系統還只是實現了智能結算系統的基本原型,在功能上還有許多不足,離實際應用還存在一定的距離。還可以在以下方面進一步建設與改進:(1) 本系統暫還未實現對單位人員的管理功能,需要在后續進一步的完善。(2) 在該系統中添加支付接口。當前的系統只能夠自動完成菜品識別與計價,還不支持用戶自動刷卡或支付寶、微信支付。若是加上自動刷臉支付功能,可以給用戶提供更方便的服務。
參考文獻:
[1] Qiu Jianing, Frank Po Wen Lo, Yingnan Sun, Siyao Wang, Be-nny Lo. Mining discriminative food regions for accurate food recognition//Proceedings of the British Machine Vision Conference. Cardiff, UK, 2019: 158
[2] Szeliski R. 計算機視覺:算法與應用[M]. 第二版. 清華大學出版社, 2012.01
[3] Joe Minichino. OpenCV3計算機視覺:Python語言實現[M]. 第二版. 機械工業出版社, 2016-06-01.
[4] 陳云. 深度學習框架PyTorch 入門與實踐[M]. 第一版. 電子工業出版社, 2017-12-22.
[5]福塔 (Ben Forta) 著 ; 劉曉霞 譯 ; 鐘鳴 譯. MySQL必知必會[M]. 第一版. 人民郵電出版社, 2009-01.
[6] 王維波 等. Python Qt GUI與數據可視化編程[M]. 第一版. 人民郵電出版社, 2019
[7] Chen Xin, Zhu Yu, Zhou Hua, et al. ChineseFoodNet: A Large-scale Image Data-set for Chinese Food Recognition [DB/OL]. https://arxiv.org/pdf/1705.02743.pdf.2017.