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