程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

假期來啦!技術人如何用 Python 實現景區安防系統

編輯:Python


作者 | 李秋鍵

出品 | AI科技大本營(ID:rgznai100)

引言:近年來,隨著我國旅游業的持續快速發展,國內游客人次逐年增加,各地旅游景點游客爆滿。在旅游消費需求高速增長的同時,伴隨著越來越多的旅游景區管理問題,景區公共安全存在著嚴重隱患。因此設計一套關於景區安全防護的智能系統,對景區安全防護與景區智能化建設具有重要的現實意義。本項目旨在采用計算機視覺和PC軟件開發技術,圍繞景區安全問題展開一系列的實踐,最終搭建了一套智能景區安防系統,應用於景區中火災預防與監測、疫情防控、游客安全定位等工作中。

本設計中,利用YOLO目標檢測算法、Openpose姿態識別算法、deepsort跟蹤算法、MSCNN人群密度估計算法實現了火災監測、吸煙監測、行為安全監測、人群密度監測、口罩率監測、人員定位監測六大功能。系統運用智能視覺交互技術,用戶可以通過手勢操作系統,用戶操作方便簡潔。在多角度多方位輔助景區安防管理,消減了景區存在的隱形安全隱患,推動景區智慧化建設。本套系統各類功能之間實現了數據的實時傳輸與反饋,保證了信息的有效性,可以運行在手機端、電腦端和物聯網平台多個平台,同時也真正意義上實現了“多平台應用”。

結合多種算法設計的多功能的智能安防系統,主要應用於景區中火災預防與監測、疫情防控、游客安全定位等,對景區安全防護與景區智能化建設具有重要的應用價值。

基本介紹

該系統以計算機多媒體技術、智能圖像分析技術、數據挖掘技術等為基礎,建設旅游景區綜合安防管理系統。針對景區公共活動區域的人身安全,森林防火管理,疫情防控管理等需求,要求建設全方位、全天候、高清化、智能化的視頻監控系統,以滿足現代旅游景區安全管理的需求,實現大場景全景監控,對景區火災、游客危險行為等突發情況進行檢測。實現對人員實時定位、軌跡查詢,當發生緊急情況時聯動地圖進行閃爍警示,並便於應急指揮。同時滿足人員管理與客流分析系統,需要對出入口客流量進行統計和分析,當景區超過一定的客流容量之後可及時預警停止游客進入並進行適當的游客分流處置。

結合實際需求及智慧景區的系統架構規劃,旅游景區綜合安防系統由智能監控系統、智能視覺交互、多角度多方位、多平台應用四個模塊構成,整合火災監測、吸煙監測、行為安全監測、人群密度監測、口罩率監測、人員定位監測異構安防子系統。

系統總體設計架構如下圖:

基本功能展示

1、系統概述

本智能監控系統開發平台為Pycharm,使用python語言,共分為六大系統。

2、火災監測系統

本模塊通過實時的視頻監控,分析視頻是否有火災產生。如圖中所示,如果景區發生火災,系統會及時的發出預警信息,反饋給調度室,使得火災得到有效控制,極大的提高應對火災的效率。

3、吸煙監測系統

為了防止景區發生火災,景區多數區域為禁煙區。本模塊通過實時的視頻監控,分析視頻是否存在吸煙行為。如圖中所示,如果有游客存在吸煙行為,系統會及時的發出預警信息,反饋給調度室,第一時間發現游客吸煙的安全隱患,預防火災發生,確保景區安全。

4、行為安全監測系統

景區旅游過程中,游客人身安全須受到保障。本模塊通過實時的視頻監控,分析視頻中人的軀體動作,如果發生異常行為如圖中“摔倒”等危險行為可以及時的發出預警信息。能夠大大縮短救援時間,減少突發事件造成的損失,保護游客的生命財產安全。

5、人群密度監測系統

受新冠疫情的影響,景區需要合理控制景區內的人口密度。通過本模塊可以實現對景區游客人口密度的動態監控,通過智能分析,將人群密度實時的展現在系統頁面上,幫助用戶管理景區,切實保障廣大游客、員工的身體健康和生命安全,維護景區和社會穩定大局。

6、口罩率監測系統

為防止新冠病毒的傳播,根據景區相關規定,進入景區之前需要確定乘客。本模塊通過實時的視頻監控,分析視頻中游客是否佩戴口罩,將標記每個游客是否佩戴口罩,將結果顯示在系統上,並實時的顯示場景佩戴口罩率。用於景區疫情防疫工作,保護游客,保護景區。

7、人員跟蹤定位監測

本模塊對景區進行實時的視頻監控,分析並識別視頻中游客,自動生成識別標簽,將游客標簽在場景中的位置實時記錄下來,並顯示在系統頁面中,並且可以對場景中人數進行監測,動態顯示在系統頁面左側。輔助用戶管理景區。

8、智能視覺交互

本系統可代替了傳統鼠標點擊模塊應用的方法,用戶可以不需要使用鼠標等輸入設備即可完成與系統之間的信息交互。用戶通過肢體動作就可以完成模塊的選擇工作,系統操作更加簡潔,用戶使用更加方便。(這裡只設計了火災檢測功能,其他功能可以根據代碼參考寫入。)

涉及算法

1、目標檢測算法

本項目使用的目標檢測算法主要為YOLO算法,分別應用在火災監測、吸煙行為監測、人員定位跟蹤以及口罩率監測上。YOLO目標檢測算法是考慮到雙階段目標檢測算法的檢測效率比較低,所以一些學者提出了單階段目標檢測。由JosephRedmon等人在2016年提出。

2、目標跟蹤算法

本項目在人員定位跟蹤系統中使用到了deepsort目標跟蹤算法。本系統跟蹤的流程如下:

(1)使用卷積神經網絡對視頻中的行人進行檢測和跟蹤。

(2)視頻幀輸入之後首先進入YOLOv3目標檢測的網絡,經過Darknet-53提取特征;

(3)其次,進行上采樣和特征融合,再進行回歸分析;

(4)再次,把得出的預測框信息輸入SORT算法進行目標特征建模,匹配和跟蹤;

(5)最後,輸出結果。下圖為定位跟蹤算法流程圖:

3、人群密度估計算法

人群密度計數是指估計圖像或視頻中人群的數量、密度或分布,它是智能視頻監控分析領域的關鍵問題和研究熱點,也是後續行為分析、擁塞分析、異常檢測和事件檢測等高級視頻處理任務的基礎。

本項目通過采用深度學習方法獲取人群密度圖已估計人群數量,使用python語言搭建MSCNN網絡實現實時生成人群密度圖以達到估計人群數量的目的。

4、姿態估計算法

本項目在人體行為安全監測系統上使用了Openpose的人體姿態識別算法。通過Openpose的姿態識別技術對不同肢體之間的協調關系搭建分類算法,並通過不同的分類算法比較,選擇出最優模型搭建多目標的分類方法,其可以實現多個目標的姿態顯示、目標檢測和分類的實時顯示。

部分界面操作代碼如下:

cap = cv2.VideoCapture(0)
cap.set(3, 1280)
cap.set(4, 720)
detector = HandDetector(detectionCon=0.8)
keys = [["火災檢測", "吸煙檢測", "行為安全監測", "人群密度監測", "口罩率檢測", "行人定位跟蹤"]]
finalText = ""
while True:
success, img = cap.read()
img = detector.findHands(img)
lmList, bboxInfo = detector.findPosition(img)
img = drawAll(img, buttonList)
if lmList:
for button in buttonList:
x, y = button.pos
w, h = button.size
if x < lmList[8][0] < x + w and y < lmList[8][1] < y + h:
cv2.rectangle(img, (x - 5, y - 5), (x + w + 5, y + h + 5), (175, 0, 175), cv2.FILLED)
if l < 30:
if press_state:
cv2.rectangle(img, button.pos, (x + w, y + h), (0, 255, 0), cv2.FILLED)
cv2.putText(img, "start", (x + 20, y + 65),cv2.FONT_HERSHEY_PLAIN, 4, (255, 255, 255), 4)
finalText += button.text
sleep(0.15)
press_state=False
state=True
print(button.text)
text=button.text
else:
press_state=True
if state:
if os.path.exists("img.txt"):
try:
img2 = cv2.imread("img.jpg")
img2 = cv2.resize(img2, (img.shape[1], img.shape[0]))
img = cv2.addWeighted(img, alpha, img2, beta, gamma)
except:
pass
if state:
img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
draw = ImageDraw.Draw(img)
myfont0 = ImageFont.truetype(r'./HGDH_CNKI.TTF', 50)
for button in buttonList:
x, y = button.pos
w, h = button.size
draw.text((500, 180), text, font=myfont0, fill=(0, 0, 0))
img = cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR)
cv2.imshow("Image", img)
cv2.waitKey(1)

完整代碼:

https://download.csdn.net/download/qq_42279468/85833771

李秋鍵,CSDN博客專家,CSDN達人課作者。碩士在讀於中國礦業大學,開發有taptap競賽獲獎等。

往期回顧

NLP 類問題建模方案探索實踐

Python 爬蟲中的常見加密算法!

2D變身3D,來看英偉達的AI“新”魔法!

搞定Python幾個常用的數據結構!

分享
點收藏
點點贊
點在看

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved