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