使用Python+OpenCV+detectorn2實現社交距離檢測

介紹
美國和歐洲的許多城市現在都在謹慎地重新開放。人們被要求在外出時保持安全距離。但是人們照着做嗎?城市對人們的安全距離是否符合規則進行評估並採取相應的行動是很重要的。如果大多數人都遵守疫情期間的命令,那麼就可以安全地開放更多的公共場合。
然而,如果出現了太多違規行爲,那麼關閉這些場合可能更安全。
這正是邁阿密海灘公園發生的事。公園於四月底開放,但由於太多人藐視與戴口罩和社交安全距離有關的規定,公園在一週內就關閉了。該市通過警員監控公園併發出警告。但人類監測可能不是一個切實可行的解決辦法。
我們如何使用人工智能和機器學習來檢測人們是否遵循社交距離規則?大多數城市已經在公共場所安裝了攝像頭,這些攝像頭正好可以用於此目的。
在這個博客中,我展示瞭如何使用行人跟蹤算法來監控違規行爲。我也在我的Github上開源了代碼。請參閱下面的模型。




  • 我的Github
  • https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation
    社會距離違規檢測和計數:
    使用Python+OpenCV+detectorn2實現社交距離檢測
    在深度學習分析中,我們非常熱衷於使用數據科學和機器學習來解決問題。原稿全文刊登在我們的網站上:


  • https://deeplearninganalytics.org/using-ai-to-detect-social-distancing-violations/
    行人跟蹤
    數據
    我們首先需要視頻數據來構建和測試我們的模型。我使用了開放的MOT數據集(https://motchallenge.net/) 。
    MOT數據集是計算機視覺行人跟蹤的標準數據集。許多最先進的算法都是在該數據上訓練和測試的。這個數據集有許多開源的剪輯片段顯示在不同的相機角度下人的運動。我選擇了一個固定高度的攝像機拍攝到的一個小片段,它的位置是在德國的城鎮中心。
    你可以從這裏(http://www.robots.ox.ac.uk/ActiveVision/Research/Projects/2009bbenfold_headpose/project.html#datasets) 下載這個剪輯片段。請看下面這個剪輯片段中的一個幀。
    使用Python+OpenCV+detectorn2實現社交距離檢測
    使用深度排序進行行人跟蹤
    在計算機視覺中,行人跟蹤是指給一個人一個ID,在他出現的每一幀中檢測出他,並將他的ID轉發出去;一旦他離開了這個ID,我們就不會重複使用他的ID;如果一個新的人進入,他就會被一個新的ID初始化。
    跟蹤往往是一項困難的任務,因爲人們可能看起來很相似,導致模型切換ID。人們可能會被另一個人或物體擋住,當他們出現時會被分配一個新的ID。近年來,深度學習技術在多目標跟蹤基準(https://motchallenge.net/results/MOT16/) 上的性能有了顯著提高。目前多目標跟蹤技術的精度是62.0
    你可以在我的博客中閱讀更多關於深度學習行人跟蹤的內容。









  • https://towardsdatascience.com/people-tracking-using-deep-learning-5c90d43774be?gi=7af825362a53
    爲什麼我們需要進行行人跟蹤?
    原因是我們想找出違反社會距離規則的人數量。在沒有跟蹤器的情況下,如果兩個人走得很近,那麼他們在每一幀中都會被視爲違規,但是如果我們使用跟蹤器,那麼我們可以將其視爲一次違規事件。
    在這個博客中,我使用了深度排序模型(https://arxiv.org/abs/1703.07402) 進行跟蹤。
    這個模型的代碼在作者的GitHub(https://github.com/nwojke/deep_sort) 上公開發布。
    深度排序模型使用人的位置和外觀來跟蹤。位置信息通過Kalman濾波器捕獲,Kalman濾波器預測盒子的下一個可能位置,而外觀信息是使用生成嵌入的深度學習模型生成的。
    若要在此視頻上運行代碼,需要將原始圖像和包含所有邊界框位置的檢測文件傳遞給跟蹤器;然後,跟蹤器使用這些信息爲每幀中的每個人分配一個ID。deep sort博客上詳細解釋了這一點。請參見下面對此剪輯執行跟蹤的結果。正如你所看到的,每個人都被分配了一個ID,這個ID被成功地轉入下一幀。跟蹤器還輸出一個csv,其中包含軌跡的詳細信息。
    我已經在Github上(https://github.com/priya-dwivedi/Deep-Learning/tree/master/detecting_social_distancing_violation) 共享了這個文件,我們將在代碼的下一部分使用它。
    使用深度排序模型進行行人跟蹤:
    使用Python+OpenCV+detectorn2實現社交距離檢測
    現違反社交距離的行爲
    爲了檢測社會距離違規行爲,我們在框架中選取每個軌道,並測量其與框架中其他軌道的距離。每個軌跡基本上都是一個帶ID的邊界框,因此可以使用它們之間的歐氏距離將邊界框與另一個邊界框進行比較。代碼如下所示。











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






現在我們開始建模。其代碼在下面共享。這與我的Github中的代碼相同。
* https://github.com/priya-dwivedi/Deep-Learning/blob/master/detecting_social_distancing_violation/Social%20Distancing%20Violation.ipynb
![](https://s4.51cto.com/images/blog/202101/05/2dfe67df51e9e0237a8b3034dd215895.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
對每個幀運行的主要步驟是:
1. 比較每個軌跡和其他軌跡之間的像素距離
1. 如果距離小於接近距離閾值,則兩人距離太近。因此,將 safe=1 放在兩個邊界框的數據框中。變量“safe”稍後用於可視化
1. 我們還計算每個ID的總違規次數。這是計算與它們太接近的其他ID。因此,只要距離小於接近距離閾值,我們都會在字典中維護一個過於接近的軌跡列表
代碼運行得很慢,因爲它需要將每個軌道與其他軌道進行比較,並在600幀以上執行此操作。這些計算中有許多是重複的,因爲它將分別測量軌道1與軌道2之間的距離,然後測量軌道2與軌道1之間的距離。
爲了節省時間,我將兩次計算的結果存儲在一次傳遞中。因此,當比較track1和track2時,結果將寫入數據幀各自的行中,這樣可以將運行時間減少一半。
我發現,像素距離爲70對於檢測那些“似乎”走得太近的人來說是相當合理的。代碼的可視化模塊會在框太近時亮顯紅色框,並顯示每個框的違規計數。帶有結果的示例框架如下所示。
![](https://s4.51cto.com/images/blog/202101/05/f251a149ef6ce73f293d8f808d0652f7.png?x-oss-process=image/watermark,size_16,text_QDUxQ1RP5Y2a5a6i,color_FFFFFF,t_100,g_se,x_10,y_10,shadow_90,type_ZmFuZ3poZW5naGVpdGk=)
**實際部署**
如果要部署它,需要考慮一些事情。
1. 攝像機需要註冊,這樣我們就可以正確地將像素距離映射到現實世界中的距離
1. 如果存在連續的攝像機陣列,那麼我們可能需要添加行人重識別功能,以幫助跟蹤器在攝像機之間轉發ID和違規計數。在過去的幾年裏,人們對行人重識別(https://arxiv.org/abs/2001.04193) 進行了大量的研究
1. 這裏的代碼是輕量級的,可以在與攝像機綁定的Jetson TX2(https://developer.nvidia.com/embedded/jetson-tx2) 之類的嵌入式設備上運行。
**結論**
跟蹤是計算機視覺中的一個重要問題,有着廣泛的應用,其中一個應用程序就是檢測社交距離違規行爲,這可以幫助城市評估公共衛生風險,並在較安全的情況下重新開放公共場合。
我希望你能嘗試一下代碼,並嘗試一下在更改接近標準距離時會發生什麼。
參考文獻
1. MOT挑戰
https://motchallenge.net/
1. 深度排序算法
https://arxiv.org/abs/1703.07402
原文鏈接:https://medium.com/swlh/using-ai-to-detect-social-distancing-violations-4707301844be
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章