點(diǎn)擊上方“小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂”
重磅干貨,第一時(shí)間送達(dá)

美國和歐洲的許多城市現(xiàn)在都在謹(jǐn)慎地重新開放。人們被要求在外出時(shí)保持安全距離。但是人們照著做嗎?城市對(duì)人們的安全距離是否符合規(guī)則進(jìn)行評(píng)估并采取相應(yīng)的行動(dòng)是很重要的。如果大多數(shù)人都遵守疫情期間的命令,那么就可以安全地開放更多的公共場(chǎng)合。然而,如果出現(xiàn)了太多違規(guī)行為,那么關(guān)閉這些場(chǎng)合可能更安全。這正是邁阿密海灘公園發(fā)生的事。公園于四月底開放,但由于太多人藐視與戴口罩和社交安全距離有關(guān)的規(guī)定,公園在一周內(nèi)就關(guān)閉了。該市通過警員監(jiān)控公園并發(fā)出警告。但人類監(jiān)測(cè)可能不是一個(gè)切實(shí)可行的解決辦法。我們?nèi)绾问褂萌斯ぶ悄芎蜋C(jī)器學(xué)習(xí)來檢測(cè)人們是否遵循社交距離規(guī)則?大多數(shù)城市已經(jīng)在公共場(chǎng)所安裝了攝像頭,這些攝像頭正好可以用于此目的。在這個(gè)博客中,我展示了如何使用行人跟蹤算法來監(jiān)控違規(guī)行為。我也在我的Github上開源了代碼。請(qǐng)參閱下面的模型。- https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation
社會(huì)距離違規(guī)檢測(cè)和計(jì)數(shù):在深度學(xué)習(xí)分析中,我們非常熱衷于使用數(shù)據(jù)科學(xué)和機(jī)器學(xué)習(xí)來解決問題。原稿全文刊登在我們的網(wǎng)站上:- https://deeplearninganalytics.org/using-ai-to-detect-social-distancing-violations/
數(shù)據(jù)
我們首先需要視頻數(shù)據(jù)來構(gòu)建和測(cè)試我們的模型。我使用了開放的MOT數(shù)據(jù)集(https://motchallenge.net/) 。MOT數(shù)據(jù)集是計(jì)算機(jī)視覺行人跟蹤的標(biāo)準(zhǔn)數(shù)據(jù)集。許多最先進(jìn)的算法都是在該數(shù)據(jù)上訓(xùn)練和測(cè)試的。這個(gè)數(shù)據(jù)集有許多開源的剪輯片段顯示在不同的相機(jī)角度下人的運(yùn)動(dòng)。我選擇了一個(gè)固定高度的攝像機(jī)拍攝到的一個(gè)小片段,它的位置是在德國的城鎮(zhèn)中心。你可以從這里(http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html#datasets) 下載這個(gè)剪輯片段。請(qǐng)看下面這個(gè)剪輯片段中的一個(gè)幀。
使用深度排序進(jìn)行行人跟蹤
在計(jì)算機(jī)視覺中,行人跟蹤是指給一個(gè)人一個(gè)ID,在他出現(xiàn)的每一幀中檢測(cè)出他,并將他的ID轉(zhuǎn)發(fā)出去;一旦他離開了這個(gè)ID,我們就不會(huì)重復(fù)使用他的ID;如果一個(gè)新的人進(jìn)入,他就會(huì)被一個(gè)新的ID初始化。跟蹤往往是一項(xiàng)困難的任務(wù),因?yàn)槿藗兛赡芸雌饋砗芟嗨疲瑢?dǎo)致模型切換ID。人們可能會(huì)被另一個(gè)人或物體擋住,當(dāng)他們出現(xiàn)時(shí)會(huì)被分配一個(gè)新的ID。近年來,深度學(xué)習(xí)技術(shù)在多目標(biāo)跟蹤基準(zhǔn)(https://motchallenge.net/results/MOT16/) 上的性能有了顯著提高。目前多目標(biāo)跟蹤技術(shù)的精度是62.0你可以在我的博客中閱讀更多關(guān)于深度學(xué)習(xí)行人跟蹤的內(nèi)容。- https://towardsdatascience.com/people-tracking-using-deep-learning-5c90d43774be?gi=7af825362a53
原因是我們想找出違反社會(huì)距離規(guī)則的人數(shù)量。在沒有跟蹤器的情況下,如果兩個(gè)人走得很近,那么他們?cè)诿恳粠卸紩?huì)被視為違規(guī),但是如果我們使用跟蹤器,那么我們可以將其視為一次違規(guī)事件。在這個(gè)博客中,我使用了深度排序模型(https://arxiv.org/abs/1703.07402) 進(jìn)行跟蹤。這個(gè)模型的代碼在作者的GitHub(https://github.com/nwojke/deep_sort) 上公開發(fā)布。深度排序模型使用人的位置和外觀來跟蹤。位置信息通過Kalman濾波器捕獲,Kalman濾波器預(yù)測(cè)盒子的下一個(gè)可能位置,而外觀信息是使用生成嵌入的深度學(xué)習(xí)模型生成的。若要在此視頻上運(yùn)行代碼,需要將原始圖像和包含所有邊界框位置的檢測(cè)文件傳遞給跟蹤器;然后,跟蹤器使用這些信息為每幀中的每個(gè)人分配一個(gè)ID。deep sort博客上詳細(xì)解釋了這一點(diǎn)。請(qǐng)參見下面對(duì)此剪輯執(zhí)行跟蹤的結(jié)果。正如你所看到的,每個(gè)人都被分配了一個(gè)ID,這個(gè)ID被成功地轉(zhuǎn)入下一幀。跟蹤器還輸出一個(gè)csv,其中包含軌跡的詳細(xì)信息。我已經(jīng)在Github上(https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation) 共享了這個(gè)文件,我們將在代碼的下一部分使用它。為了檢測(cè)社會(huì)距離違規(guī)行為,我們?cè)诳蚣苤羞x取每個(gè)軌道,并測(cè)量其與框架中其他軌道的距離。每個(gè)軌跡基本上都是一個(gè)帶ID的邊界框,因此可以使用它們之間的歐氏距離將邊界框與另一個(gè)邊界框進(jìn)行比較。代碼如下所示。def?distance_boxes?(boxA,?boxB):
????import?math
????center_boxA?=?[(boxA[0]?+?boxA[2])/?2.0,?(boxA[1]?+?boxA[3])/2.0]
????center_boxB?=?[(boxB[0]?+?boxB[2])/?2.0,?(boxB[1]?+?boxB[3])/2.0]
????pixel_distance??=?math.sqrt(?((center_boxA[0]-center_boxB[0])**2)+((center_boxA[1]-center_boxB[1])**2)?)
????return?pixel_distance
現(xiàn)在我們開始建模。其代碼在下面共享。這與我的Github中的代碼相同。- https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb
對(duì)每個(gè)幀運(yùn)行的主要步驟是:- 如果距離小于接近距離閾值,則兩人距離太近。因此,將 safe=1 放在兩個(gè)邊界框的數(shù)據(jù)框中。變量“safe”稍后用于可視化
- 我們還計(jì)算每個(gè)ID的總違規(guī)次數(shù)。這是計(jì)算與它們太接近的其他ID。因此,只要距離小于接近距離閾值,我們都會(huì)在字典中維護(hù)一個(gè)過于接近的軌跡列表
代碼運(yùn)行得很慢,因?yàn)樗枰獙⒚總€(gè)軌道與其他軌道進(jìn)行比較,并在600幀以上執(zhí)行此操作。這些計(jì)算中有許多是重復(fù)的,因?yàn)樗鼘⒎謩e測(cè)量軌道1與軌道2之間的距離,然后測(cè)量軌道2與軌道1之間的距離。為了節(jié)省時(shí)間,我將兩次計(jì)算的結(jié)果存儲(chǔ)在一次傳遞中。因此,當(dāng)比較track1和track2時(shí),結(jié)果將寫入數(shù)據(jù)幀各自的行中,這樣可以將運(yùn)行時(shí)間減少一半。我發(fā)現(xiàn),像素距離為70對(duì)于檢測(cè)那些“似乎”走得太近的人來說是相當(dāng)合理的。代碼的可視化模塊會(huì)在框太近時(shí)亮顯紅色框,并顯示每個(gè)框的違規(guī)計(jì)數(shù)。帶有結(jié)果的示例框架如下所示。
- 攝像機(jī)需要注冊(cè),這樣我們就可以正確地將像素距離映射到現(xiàn)實(shí)世界中的距離
- 如果存在連續(xù)的攝像機(jī)陣列,那么我們可能需要添加行人重識(shí)別功能,以幫助跟蹤器在攝像機(jī)之間轉(zhuǎn)發(fā)ID和違規(guī)計(jì)數(shù)。在過去的幾年里,人們對(duì)行人重識(shí)別(https://arxiv.org/abs/2001.04193) 進(jìn)行了大量的研究
- 這里的代碼是輕量級(jí)的,可以在與攝像機(jī)綁定的Jetson TX2(https://developer.nvidia.com/embedded/jetson-tx2) 之類的嵌入式設(shè)備上運(yùn)行。
跟蹤是計(jì)算機(jī)視覺中的一個(gè)重要問題,有著廣泛的應(yīng)用,其中一個(gè)應(yīng)用程序就是檢測(cè)社交距離違規(guī)行為,這可以幫助城市評(píng)估公共衛(wèi)生風(fēng)險(xiǎn),并在較安全的情況下重新開放公共場(chǎng)合。我希望你能嘗試一下代碼,并嘗試一下在更改接近標(biāo)準(zhǔn)距離時(shí)會(huì)發(fā)生什么。- https://motchallenge.net/
- https://arxiv.org/abs/1703.07402
原文鏈接:https://medium.com/swlh/using-ai-to-detect-social-distancing-violations-4707301844be
下載1:OpenCV-Contrib擴(kuò)展模塊中文版教程
在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):擴(kuò)展模塊中文教程,即可下載全網(wǎng)第一份OpenCV擴(kuò)展模塊教程中文版,涵蓋擴(kuò)展模塊安裝、SFM算法、立體視覺、目標(biāo)跟蹤、生物視覺、超分辨率處理等二十多章內(nèi)容。下載2:Python視覺實(shí)戰(zhàn)項(xiàng)目52講在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):Python視覺實(shí)戰(zhàn)項(xiàng)目,即可下載包括圖像分割、口罩檢測(cè)、車道線檢測(cè)、車輛計(jì)數(shù)、添加眼線、車牌識(shí)別、字符識(shí)別、情緒檢測(cè)、文本內(nèi)容提取、面部識(shí)別等31個(gè)視覺實(shí)戰(zhàn)項(xiàng)目,助力快速學(xué)校計(jì)算機(jī)視覺。下載3:OpenCV實(shí)戰(zhàn)項(xiàng)目20講在「小白學(xué)視覺」公眾號(hào)后臺(tái)回復(fù):OpenCV實(shí)戰(zhàn)項(xiàng)目20講,即可下載含有20個(gè)基于OpenCV實(shí)現(xiàn)20個(gè)實(shí)戰(zhàn)項(xiàng)目,實(shí)現(xiàn)OpenCV學(xué)習(xí)進(jìn)階。交流群
歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器、自動(dòng)駕駛、計(jì)算攝影、檢測(cè)、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競(jìng)賽等微信群(以后會(huì)逐漸細(xì)分),請(qǐng)掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請(qǐng)按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請(qǐng)進(jìn)入相關(guān)微信群。請(qǐng)勿在群內(nèi)發(fā)送廣告,否則會(huì)請(qǐng)出群,謝謝理解~