李宏銘
(寧波職業技術學院,浙江寧波,315800)
隨著飼養寵物狗的家庭越來越多,寵物狗的大量出現也給人們帶來了很多煩擾,引發了不少的社會問題,寵物狗與人類之間的矛盾沖突也越來越頻繁。近年來寵物狗咬人事件、遛狗不牽狗繩、不清理寵物狗的大小便等問題事件層出不窮,城市養狗所帶來的問題已經成為城市管理急需而又難以解決的社會事件。
與頻繁的寵物狗所帶來的大量的糾紛相比,國家行政管理部門的執法力量卻相對薄弱。另一方面,寵物類管理活動的執法程序相對復雜,相關的程序和要求較多,取證難度大,執法成本相對較高。因此,基于目前相對成熟的人工智能技術,利用布置在街道和小區的各類攝像頭,設計一款寵物目標檢測的系統,就顯得非常有必要。本文提出了基于YOLO的寵物狗牽繩檢測程序,使用flask 作為web 應用程序的設計語言,實現了寵物狗牽繩檢測的系統,能夠對寵物狗未牽繩的現象進行預警,從而可以提前預防因寵物狗未牽繩而導致咬人或擾民事件的發生,也能夠對事件發生后的取證提供便利。
寵物狗牽繩檢測系統將攝像頭的視頻流接入到系統中,對視頻流中的圖像進行檢測,判斷寵物狗是否牽繩,如果沒有牽繩,則會進行相應的預警處理,主要的流程如圖1 所示。系統首先對接入的視頻流進行定期檢測,截取視頻流中的幀作為檢測圖像,送入系統檢測模塊,利用訓練好的YOLO 模型進行檢測,主要檢測圖像中是否存在狗、人和繩,對不存在狗的圖像直接做略過處理,而對于存在狗的圖像,則繼續判斷狗是否位于圖像邊緣,如果是在圖像邊緣,則可能人還未進入攝像頭范圍,因此不作任何處理,如果在圖像中間檢測到狗的存在,判斷是否有人,如果沒有人的出現,則判定寵物狗未牽繩,直接將圖片保存下來,并發出相應的預警信息,如果檢測到狗和人,則判斷是否有繩的存在,如果沒有繩子的存在,則判定寵物狗沒有牽繩,將圖片保存下來并進行預警處理,如果存在繩子,則判斷繩子是否在狗和人之間,如果沒在狗和人之間,也判定狗沒有牽繩,將圖片保存并進行預警處理。

圖1 系統檢測流程
由于攝像頭覆蓋的范圍一般比較大,狗在攝像頭中的活動范圍相對較廣,從攝像頭拍攝到的位置的一邊跑到另外一邊,往往需要較長的時間,因此狗在攝像頭拍攝的視頻中不會一閃而過,沒有必要檢測視頻中的每一幀。另外考慮到調用YOLO模型檢測圖像需要消耗大量的系統資源和算力,為了節省系統的資源,采用每隔3 秒截取攝像頭捕獲的視頻流中的幀作為檢測圖像,對圖像進行狗牽繩的檢測。
YOLO 模型是目前比較常用的目標檢測方法,由Redmon 等研究人員在2016 年發表的一篇論文中被提出,英文全稱為“You Only Look Once”,其意思是你只需要看一眼就夠了。在深度學習的目標檢測領域中,YOLO 模型屬于單階段式(One-stage)目標檢測方法,和其他深度學習模型相比,它最大的特點是實現快速檢測的同時,它還兼顧了較高的精度,被廣泛地應用在實時系統中,受到了廣大愛好深度學習者的喜愛。YOLO 模型具有非常大的優勢,采用單神經網絡來預測檢測目標的邊界和類別概率,它直接將目標邊界的定位轉換成回歸問題,圖像會被統一到相同的尺寸,采用網格形式進行平均分割,只需要處理一次圖像就能得到定位的坐標,因此速度相當快,精度也比較高。
(1)模型的選擇
YOLO 目前的最新版本為V7,而V5 是YOLO 目前比較成熟的版本,而且應用比較廣泛。由于我們的系統需要在實際系統中進行應用,因此從模型的實用性和穩定性考慮,選擇V5 作為系統的模型。YOLOv5 模型最早發布于2020年6 月,是由Ultralytics 公司公開發布的,它是通過改進YOLOv3 模型實現。目前的YOLOv5 有v5s、v5m、v5l 和v5x4 個版本,其中YOLOv5s 網絡深度最小,特征圖的寬度也最小,因此相比其他幾個版本速度最快,相對應的精度也最低,因此,該版本對于追求速度的項目來說是比較合適的,其他版本則在該版本的基礎上加深網絡和加寬特征圖。
(2)模型的訓練
基于YOLOv5 已經存在很多訓練好的人和狗的模型,精度也相當不錯,但沒有發現繩子的模型,所以需要自己訓練相應的模型。模型訓練需要大量的圖片資源,圖片的來源主要通過網絡搜索和安裝攝像頭實時捕獲,另外在檢測過程中沒有識別出來的圖片,也可以加入原來的圖片集中進行再訓練。首先,通過網絡搜索相關的圖片,然后利用腳本下載人遛狗的圖片,接著通過人工識別,將不合適的圖片剔除出去,最后剩下約兩百張左右的圖片。兩百張的圖片在模型訓練中是比較少的,因此采用深度學習領域比較常用的數據增強的方法,將圖片擴展到1 千張。根據以往的經驗,使用網絡上的圖片進行訓練,在實際應用中的效果并不理想,因此,需要收集大量的攝像頭拍攝的圖片。由于人工檢測攝像頭拍攝的有狗的圖片太過費時費力,因此使用網絡上已經訓練好的檢測狗的YOLO 模型,將所有攝像頭拍攝的圖像中出現狗的圖片抓取下來。利用三個部署在街道和社區的攝像頭,經過一段時間的抓取,除了中途有幾次出現意外而沒抓取到外,共抓取到七百多張圖片,其中圖像元素重復得較多,經過挑選,選取了一百張圖片作為訓練模型的原始圖像。將選取好的圖片采用數據增強的方法,擴展到五百張,和先前網絡上收集的圖片一起進行訓練,然后將訓練好的模型用于實際的檢測。圖片在訓練前先要進行分類,將80%的圖片劃分到訓練集,剩余的20%的圖片用于驗證集。用于模型訓練的圖片都要進行打標簽操作,打標簽的軟件選擇labelImg,標簽分成三類,分別是person、dog 和cord。
基于web 的系統在部署方面非常方便,使用簡單,可移植性強。本系統的檢測使用web 架構,有利于系統的快速部署,也有利于其他web 系統的調用,可以方便地為其他web 系統提供數據。由于YOLOv5 使用的是Python 環境,因此,web應用程序優先考慮使用基于Python的web框架,這樣有利于方便地調用YOLOv5 的模型。Python 擁有很多優秀的web 框架,主要有Django、Flask、CherryPy、Pyramid、Grok、Turbogers 等,由于我們項目規模較小,因此選擇Flask 作為本次項目的框架。Flask 是Python 下的一個輕量級的web 框架,其使用內核較為簡單,被業界稱為微框架,易于上手,較其他框架更為輕便和靈活,非常適合小型項目的快速開發和實現,而其強大的功能庫可以讓開發者開發出功能強大的網站。數據庫采用小型的SQLite3數據庫,該數據庫的最大特點是占用資源非常低,運行速度快,很多嵌入式產品和小型的系統中都使用該數據庫。很多操作系統都能非常方便地安裝和使用SQLite3 數據庫,其他很多程序設計語言也能和該數據庫無縫對接。Python 已經集成了SQLite 數據庫,不需要額外安裝,就可以非常方便地調用SQLite 數據庫,Python+SQLite 已經成為開發Python 小項目的選擇。
(1)系統功能的設定
本系統的主要功能是使用攝像頭的視頻流來實現寵物狗未牽繩的檢測和預警功能,因此涉及開啟功能、查看功能和管理功能等主要功能,整個系統分為用戶管理、角色管理、系統管理和圖像管理四大塊。用戶管理包括人員的添加、刪除、修改和密碼重置等功能,角色管理主要包括人員的角色的設定,系統管理主要包括系統的運行和狀態的改變,通過選取不同線路的攝像頭來開啟系統的運行,也可以停止系統的運行,圖像管理主要是查看系統上抓取的寵物檢測的圖像,以及備份圖像的功能和推送預警的功能。
(2)用戶功能的設定
本系統將角色分成三類,一類是超級管理員,一類是普通管理員,一類是普通用戶。超級管理員具有所有權限,包括用戶管理、角色管理、系統管理和查看功能,普通管理員主要擁有系統管理和圖像管理權限,而普通用戶則只有圖像管理的權限。
(3)頁面的設計
本系統主要擁有登錄界面、人員管理界面、角色管理界面、系統管理界面和圖像管理界面。登錄界面包括輸入用戶名、密碼和驗證碼,成功后進入主界面,主界面根據不同的角色展現不同的頁面。人員管理界面主要有人員的添加和刪除功能,以及人員的信息修改和密碼重置功能。系統管理界面主要是采用攝像頭的選擇來開啟系統的運行,可以選擇網絡上的實時攝像頭,也可以選擇視頻文件,另外可以根據不同線路的攝像頭開始或停止檢測。圖像管理界面可以根據日期來查看寵物檢測所抓取的未牽繩的圖像,并能將圖像進行備份,以及推送預警的開啟和關閉。
(1)調用攝像頭視頻的功能實現
管理員在登錄系統后,可以輸入視頻流地址,啟動寵物檢測模塊系統功能,該功能在后臺會自動調用YOLOv5 模型對視頻流中是否有出現狗未牽繩的情況進行檢測,輸入視頻流地址的頁面如圖2 所示,后臺調用YOLOv5 模型進行視頻流實時檢測的代碼如圖3 所示。

圖2 視頻流的輸入界面

圖3 調用模型檢測的代碼
為了更好地調用YOLO 模型,發揮模型的最佳檢測效果,需要對相關的參數進行設置,參數設置如圖4 所示。

圖4 YOLOv5 模型參數設置
(2)圖像備份和預警推送的實現
系統檢測出狗未牽繩的情況,會將視頻流中的該幀圖像保存到系統后臺,并推送到相關預警模塊。寵物狗未牽繩的圖像按照日期進行保存,圖像保存代碼如圖5 所示。寵物狗未牽繩的相關信息也會推送給專門的預警信息進行處理,推送到預警系統的代碼如圖6 所示。

圖5 保存狗未牽繩的圖像的代碼

圖6 將圖像推送至預警系統的代碼
系統開發完成后,部署在一個小區的物業公司的一臺服務器上,攝像頭是4 路不同線路接入,有高空攝像頭,也有安裝在較低位置的門禁類的攝像頭。經過一段時間的上線運行,系統的效果比較理想,基本達到了預想的目標,大部分狗未牽繩的圖像都被檢測出來了,檢測效果如圖7 所示。但也存在著一些本該檢測出來,而沒有檢測出來的情況,以及一些其他事務被誤檢測成了狗的情況,如圖8 所示。

圖7 檢測正確的圖像

圖8 未檢測到繩子或檢測錯誤的圖像
本系統運行的結果,主要取決于模型的訓練程度,模型直接影響了系統最終的效果。從系統運行的整體情況來看,YOLO 是一個比較不錯的目標檢測模型,經過一些圖片的訓練,就能達到比較理想的效果。從整體運行的情況來看,系統的寵物狗未牽繩檢測率達到了60%以上,存在的問題也比較明顯,主要體現在三個方面:一是光線問題,光線亮的效果優于光線暗的效果,白天的檢測效果明顯優于晚上的檢測效果,光線所帶來的圖像的變化,對于檢測效果具有非常大的影響;二是攝像頭的像素問題,不同像素的攝像頭,檢測的效果也不一樣;三是繩子的檢測效果不佳,這也是本系統目前存在的最主要的問題,寵物狗牽繩子的時候沒有檢測出繩子,這在光線暗的時候出現的概率較大,而寵物狗沒有牽繩子的時候,有時候會把地面的紋理誤檢測成繩子。
隨著人工智能技術的不斷發展和應用,機器換人成為社會發展的必然趨勢。寵物狗牽繩的自動檢測,在不久的將來也會成為現實。本系統基于YOLO 開發,基本實現了寵物狗牽繩的自動檢測機制,為其他研究和開發人員實現類似系統提供了方向。本系統由于圖像樣本數量不多,導致不同場景和復雜環境下的檢測效果不佳,下一步的研究將從擴大樣本數量和利用遷移學習技術來提高寵物狗牽繩的檢測精度,從而提高整個寵物狗系統的檢測效率。