李宏銘
(寧波職業(yè)技術(shù)學(xué)院,浙江寧波,315800)
隨著飼養(yǎng)寵物狗的家庭越來越多,寵物狗的大量出現(xiàn)也給人們帶來了很多煩擾,引發(fā)了不少的社會(huì)問題,寵物狗與人類之間的矛盾沖突也越來越頻繁。近年來寵物狗咬人事件、遛狗不牽狗繩、不清理寵物狗的大小便等問題事件層出不窮,城市養(yǎng)狗所帶來的問題已經(jīng)成為城市管理急需而又難以解決的社會(huì)事件。
與頻繁的寵物狗所帶來的大量的糾紛相比,國家行政管理部門的執(zhí)法力量卻相對薄弱。另一方面,寵物類管理活動(dòng)的執(zhí)法程序相對復(fù)雜,相關(guān)的程序和要求較多,取證難度大,執(zhí)法成本相對較高。因此,基于目前相對成熟的人工智能技術(shù),利用布置在街道和小區(qū)的各類攝像頭,設(shè)計(jì)一款寵物目標(biāo)檢測的系統(tǒng),就顯得非常有必要。本文提出了基于YOLO的寵物狗牽繩檢測程序,使用flask 作為web 應(yīng)用程序的設(shè)計(jì)語言,實(shí)現(xiàn)了寵物狗牽繩檢測的系統(tǒng),能夠?qū)櫸锕肺礌坷K的現(xiàn)象進(jìn)行預(yù)警,從而可以提前預(yù)防因?qū)櫸锕肺礌坷K而導(dǎo)致咬人或擾民事件的發(fā)生,也能夠?qū)κ录l(fā)生后的取證提供便利。
寵物狗牽繩檢測系統(tǒng)將攝像頭的視頻流接入到系統(tǒng)中,對視頻流中的圖像進(jìn)行檢測,判斷寵物狗是否牽繩,如果沒有牽繩,則會(huì)進(jìn)行相應(yīng)的預(yù)警處理,主要的流程如圖1 所示。系統(tǒng)首先對接入的視頻流進(jìn)行定期檢測,截取視頻流中的幀作為檢測圖像,送入系統(tǒng)檢測模塊,利用訓(xùn)練好的YOLO 模型進(jìn)行檢測,主要檢測圖像中是否存在狗、人和繩,對不存在狗的圖像直接做略過處理,而對于存在狗的圖像,則繼續(xù)判斷狗是否位于圖像邊緣,如果是在圖像邊緣,則可能人還未進(jìn)入攝像頭范圍,因此不作任何處理,如果在圖像中間檢測到狗的存在,判斷是否有人,如果沒有人的出現(xiàn),則判定寵物狗未牽繩,直接將圖片保存下來,并發(fā)出相應(yīng)的預(yù)警信息,如果檢測到狗和人,則判斷是否有繩的存在,如果沒有繩子的存在,則判定寵物狗沒有牽繩,將圖片保存下來并進(jìn)行預(yù)警處理,如果存在繩子,則判斷繩子是否在狗和人之間,如果沒在狗和人之間,也判定狗沒有牽繩,將圖片保存并進(jìn)行預(yù)警處理。
圖1 系統(tǒng)檢測流程
由于攝像頭覆蓋的范圍一般比較大,狗在攝像頭中的活動(dòng)范圍相對較廣,從攝像頭拍攝到的位置的一邊跑到另外一邊,往往需要較長的時(shí)間,因此狗在攝像頭拍攝的視頻中不會(huì)一閃而過,沒有必要檢測視頻中的每一幀。另外考慮到調(diào)用YOLO模型檢測圖像需要消耗大量的系統(tǒng)資源和算力,為了節(jié)省系統(tǒng)的資源,采用每隔3 秒截取攝像頭捕獲的視頻流中的幀作為檢測圖像,對圖像進(jìn)行狗牽繩的檢測。
YOLO 模型是目前比較常用的目標(biāo)檢測方法,由Redmon 等研究人員在2016 年發(fā)表的一篇論文中被提出,英文全稱為“You Only Look Once”,其意思是你只需要看一眼就夠了。在深度學(xué)習(xí)的目標(biāo)檢測領(lǐng)域中,YOLO 模型屬于單階段式(One-stage)目標(biāo)檢測方法,和其他深度學(xué)習(xí)模型相比,它最大的特點(diǎn)是實(shí)現(xiàn)快速檢測的同時(shí),它還兼顧了較高的精度,被廣泛地應(yīng)用在實(shí)時(shí)系統(tǒng)中,受到了廣大愛好深度學(xué)習(xí)者的喜愛。YOLO 模型具有非常大的優(yōu)勢,采用單神經(jīng)網(wǎng)絡(luò)來預(yù)測檢測目標(biāo)的邊界和類別概率,它直接將目標(biāo)邊界的定位轉(zhuǎn)換成回歸問題,圖像會(huì)被統(tǒng)一到相同的尺寸,采用網(wǎng)格形式進(jìn)行平均分割,只需要處理一次圖像就能得到定位的坐標(biāo),因此速度相當(dāng)快,精度也比較高。
(1)模型的選擇
YOLO 目前的最新版本為V7,而V5 是YOLO 目前比較成熟的版本,而且應(yīng)用比較廣泛。由于我們的系統(tǒng)需要在實(shí)際系統(tǒng)中進(jìn)行應(yīng)用,因此從模型的實(shí)用性和穩(wěn)定性考慮,選擇V5 作為系統(tǒng)的模型。YOLOv5 模型最早發(fā)布于2020年6 月,是由Ultralytics 公司公開發(fā)布的,它是通過改進(jìn)YOLOv3 模型實(shí)現(xiàn)。目前的YOLOv5 有v5s、v5m、v5l 和v5x4 個(gè)版本,其中YOLOv5s 網(wǎng)絡(luò)深度最小,特征圖的寬度也最小,因此相比其他幾個(gè)版本速度最快,相對應(yīng)的精度也最低,因此,該版本對于追求速度的項(xiàng)目來說是比較合適的,其他版本則在該版本的基礎(chǔ)上加深網(wǎng)絡(luò)和加寬特征圖。
(2)模型的訓(xùn)練
基于YOLOv5 已經(jīng)存在很多訓(xùn)練好的人和狗的模型,精度也相當(dāng)不錯(cuò),但沒有發(fā)現(xiàn)繩子的模型,所以需要自己訓(xùn)練相應(yīng)的模型。模型訓(xùn)練需要大量的圖片資源,圖片的來源主要通過網(wǎng)絡(luò)搜索和安裝攝像頭實(shí)時(shí)捕獲,另外在檢測過程中沒有識(shí)別出來的圖片,也可以加入原來的圖片集中進(jìn)行再訓(xùn)練。首先,通過網(wǎng)絡(luò)搜索相關(guān)的圖片,然后利用腳本下載人遛狗的圖片,接著通過人工識(shí)別,將不合適的圖片剔除出去,最后剩下約兩百張左右的圖片。兩百張的圖片在模型訓(xùn)練中是比較少的,因此采用深度學(xué)習(xí)領(lǐng)域比較常用的數(shù)據(jù)增強(qiáng)的方法,將圖片擴(kuò)展到1 千張。根據(jù)以往的經(jīng)驗(yàn),使用網(wǎng)絡(luò)上的圖片進(jìn)行訓(xùn)練,在實(shí)際應(yīng)用中的效果并不理想,因此,需要收集大量的攝像頭拍攝的圖片。由于人工檢測攝像頭拍攝的有狗的圖片太過費(fèi)時(shí)費(fèi)力,因此使用網(wǎng)絡(luò)上已經(jīng)訓(xùn)練好的檢測狗的YOLO 模型,將所有攝像頭拍攝的圖像中出現(xiàn)狗的圖片抓取下來。利用三個(gè)部署在街道和社區(qū)的攝像頭,經(jīng)過一段時(shí)間的抓取,除了中途有幾次出現(xiàn)意外而沒抓取到外,共抓取到七百多張圖片,其中圖像元素重復(fù)得較多,經(jīng)過挑選,選取了一百張圖片作為訓(xùn)練模型的原始圖像。將選取好的圖片采用數(shù)據(jù)增強(qiáng)的方法,擴(kuò)展到五百張,和先前網(wǎng)絡(luò)上收集的圖片一起進(jìn)行訓(xùn)練,然后將訓(xùn)練好的模型用于實(shí)際的檢測。圖片在訓(xùn)練前先要進(jìn)行分類,將80%的圖片劃分到訓(xùn)練集,剩余的20%的圖片用于驗(yàn)證集。用于模型訓(xùn)練的圖片都要進(jìn)行打標(biāo)簽操作,打標(biāo)簽的軟件選擇labelImg,標(biāo)簽分成三類,分別是person、dog 和cord。
基于web 的系統(tǒng)在部署方面非常方便,使用簡單,可移植性強(qiáng)。本系統(tǒng)的檢測使用web 架構(gòu),有利于系統(tǒng)的快速部署,也有利于其他web 系統(tǒng)的調(diào)用,可以方便地為其他web 系統(tǒng)提供數(shù)據(jù)。由于YOLOv5 使用的是Python 環(huán)境,因此,web應(yīng)用程序優(yōu)先考慮使用基于Python的web框架,這樣有利于方便地調(diào)用YOLOv5 的模型。Python 擁有很多優(yōu)秀的web 框架,主要有Django、Flask、CherryPy、Pyramid、Grok、Turbogers 等,由于我們項(xiàng)目規(guī)模較小,因此選擇Flask 作為本次項(xiàng)目的框架。Flask 是Python 下的一個(gè)輕量級的web 框架,其使用內(nèi)核較為簡單,被業(yè)界稱為微框架,易于上手,較其他框架更為輕便和靈活,非常適合小型項(xiàng)目的快速開發(fā)和實(shí)現(xiàn),而其強(qiáng)大的功能庫可以讓開發(fā)者開發(fā)出功能強(qiáng)大的網(wǎng)站。數(shù)據(jù)庫采用小型的SQLite3數(shù)據(jù)庫,該數(shù)據(jù)庫的最大特點(diǎn)是占用資源非常低,運(yùn)行速度快,很多嵌入式產(chǎn)品和小型的系統(tǒng)中都使用該數(shù)據(jù)庫。很多操作系統(tǒng)都能非常方便地安裝和使用SQLite3 數(shù)據(jù)庫,其他很多程序設(shè)計(jì)語言也能和該數(shù)據(jù)庫無縫對接。Python 已經(jīng)集成了SQLite 數(shù)據(jù)庫,不需要額外安裝,就可以非常方便地調(diào)用SQLite 數(shù)據(jù)庫,Python+SQLite 已經(jīng)成為開發(fā)Python 小項(xiàng)目的選擇。
(1)系統(tǒng)功能的設(shè)定
本系統(tǒng)的主要功能是使用攝像頭的視頻流來實(shí)現(xiàn)寵物狗未牽繩的檢測和預(yù)警功能,因此涉及開啟功能、查看功能和管理功能等主要功能,整個(gè)系統(tǒng)分為用戶管理、角色管理、系統(tǒng)管理和圖像管理四大塊。用戶管理包括人員的添加、刪除、修改和密碼重置等功能,角色管理主要包括人員的角色的設(shè)定,系統(tǒng)管理主要包括系統(tǒng)的運(yùn)行和狀態(tài)的改變,通過選取不同線路的攝像頭來開啟系統(tǒng)的運(yùn)行,也可以停止系統(tǒng)的運(yùn)行,圖像管理主要是查看系統(tǒng)上抓取的寵物檢測的圖像,以及備份圖像的功能和推送預(yù)警的功能。
(2)用戶功能的設(shè)定
本系統(tǒng)將角色分成三類,一類是超級管理員,一類是普通管理員,一類是普通用戶。超級管理員具有所有權(quán)限,包括用戶管理、角色管理、系統(tǒng)管理和查看功能,普通管理員主要擁有系統(tǒng)管理和圖像管理權(quán)限,而普通用戶則只有圖像管理的權(quán)限。
(3)頁面的設(shè)計(jì)
本系統(tǒng)主要擁有登錄界面、人員管理界面、角色管理界面、系統(tǒng)管理界面和圖像管理界面。登錄界面包括輸入用戶名、密碼和驗(yàn)證碼,成功后進(jìn)入主界面,主界面根據(jù)不同的角色展現(xiàn)不同的頁面。人員管理界面主要有人員的添加和刪除功能,以及人員的信息修改和密碼重置功能。系統(tǒng)管理界面主要是采用攝像頭的選擇來開啟系統(tǒng)的運(yùn)行,可以選擇網(wǎng)絡(luò)上的實(shí)時(shí)攝像頭,也可以選擇視頻文件,另外可以根據(jù)不同線路的攝像頭開始或停止檢測。圖像管理界面可以根據(jù)日期來查看寵物檢測所抓取的未牽繩的圖像,并能將圖像進(jìn)行備份,以及推送預(yù)警的開啟和關(guān)閉。
(1)調(diào)用攝像頭視頻的功能實(shí)現(xiàn)
管理員在登錄系統(tǒng)后,可以輸入視頻流地址,啟動(dòng)寵物檢測模塊系統(tǒng)功能,該功能在后臺(tái)會(huì)自動(dòng)調(diào)用YOLOv5 模型對視頻流中是否有出現(xiàn)狗未牽繩的情況進(jìn)行檢測,輸入視頻流地址的頁面如圖2 所示,后臺(tái)調(diào)用YOLOv5 模型進(jìn)行視頻流實(shí)時(shí)檢測的代碼如圖3 所示。
圖2 視頻流的輸入界面
圖3 調(diào)用模型檢測的代碼
為了更好地調(diào)用YOLO 模型,發(fā)揮模型的最佳檢測效果,需要對相關(guān)的參數(shù)進(jìn)行設(shè)置,參數(shù)設(shè)置如圖4 所示。
圖4 YOLOv5 模型參數(shù)設(shè)置
(2)圖像備份和預(yù)警推送的實(shí)現(xiàn)
系統(tǒng)檢測出狗未牽繩的情況,會(huì)將視頻流中的該幀圖像保存到系統(tǒng)后臺(tái),并推送到相關(guān)預(yù)警模塊。寵物狗未牽繩的圖像按照日期進(jìn)行保存,圖像保存代碼如圖5 所示。寵物狗未牽繩的相關(guān)信息也會(huì)推送給專門的預(yù)警信息進(jìn)行處理,推送到預(yù)警系統(tǒng)的代碼如圖6 所示。
圖5 保存狗未牽繩的圖像的代碼
圖6 將圖像推送至預(yù)警系統(tǒng)的代碼
系統(tǒng)開發(fā)完成后,部署在一個(gè)小區(qū)的物業(yè)公司的一臺(tái)服務(wù)器上,攝像頭是4 路不同線路接入,有高空攝像頭,也有安裝在較低位置的門禁類的攝像頭。經(jīng)過一段時(shí)間的上線運(yùn)行,系統(tǒng)的效果比較理想,基本達(dá)到了預(yù)想的目標(biāo),大部分狗未牽繩的圖像都被檢測出來了,檢測效果如圖7 所示。但也存在著一些本該檢測出來,而沒有檢測出來的情況,以及一些其他事務(wù)被誤檢測成了狗的情況,如圖8 所示。
圖7 檢測正確的圖像
圖8 未檢測到繩子或檢測錯(cuò)誤的圖像
本系統(tǒng)運(yùn)行的結(jié)果,主要取決于模型的訓(xùn)練程度,模型直接影響了系統(tǒng)最終的效果。從系統(tǒng)運(yùn)行的整體情況來看,YOLO 是一個(gè)比較不錯(cuò)的目標(biāo)檢測模型,經(jīng)過一些圖片的訓(xùn)練,就能達(dá)到比較理想的效果。從整體運(yùn)行的情況來看,系統(tǒng)的寵物狗未牽繩檢測率達(dá)到了60%以上,存在的問題也比較明顯,主要體現(xiàn)在三個(gè)方面:一是光線問題,光線亮的效果優(yōu)于光線暗的效果,白天的檢測效果明顯優(yōu)于晚上的檢測效果,光線所帶來的圖像的變化,對于檢測效果具有非常大的影響;二是攝像頭的像素問題,不同像素的攝像頭,檢測的效果也不一樣;三是繩子的檢測效果不佳,這也是本系統(tǒng)目前存在的最主要的問題,寵物狗牽繩子的時(shí)候沒有檢測出繩子,這在光線暗的時(shí)候出現(xiàn)的概率較大,而寵物狗沒有牽繩子的時(shí)候,有時(shí)候會(huì)把地面的紋理誤檢測成繩子。
隨著人工智能技術(shù)的不斷發(fā)展和應(yīng)用,機(jī)器換人成為社會(huì)發(fā)展的必然趨勢。寵物狗牽繩的自動(dòng)檢測,在不久的將來也會(huì)成為現(xiàn)實(shí)。本系統(tǒng)基于YOLO 開發(fā),基本實(shí)現(xiàn)了寵物狗牽繩的自動(dòng)檢測機(jī)制,為其他研究和開發(fā)人員實(shí)現(xiàn)類似系統(tǒng)提供了方向。本系統(tǒng)由于圖像樣本數(shù)量不多,導(dǎo)致不同場景和復(fù)雜環(huán)境下的檢測效果不佳,下一步的研究將從擴(kuò)大樣本數(shù)量和利用遷移學(xué)習(xí)技術(shù)來提高寵物狗牽繩的檢測精度,從而提高整個(gè)寵物狗系統(tǒng)的檢測效率。