要實現人群計數功能,可以使用OpenCV庫中的人體檢測算法和目標計數算法。
人體檢測:可以使用OpenCV中已經訓練好的人體檢測模型,如Haar級聯分類器或者基于深度學習的目標檢測模型(如Faster R-CNN、YOLO等)。在檢測到人體之后,可以使用矩形框標記出每一個人體的位置。
目標計數:可以根據標記出的人體位置信息,利用目標計數算法進行人群計數。一種常用的算法是基于跟蹤的目標計數算法,通過在每一幀中跟蹤不同目標的位置,然后統計目標的數量來實現人群計數。
下面是一個簡單的示例代碼,用于在視頻中實現人群計數功能:
import cv2
# 加載Haar級聯分類器
face_cascade = cv2.CascadeClassifier('haarcascade_fullbody.xml')
# 打開視頻文件
cap = cv2.VideoCapture('test.mp4')
# 初始化計數器
count = 0
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# 將每一幀轉為灰度圖像
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
# 人體檢測
bodies = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
# 繪制矩形框和計數器
for (x, y, w, h) in bodies:
cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2)
count += 1
cv2.putText(frame, 'Count: {}'.format(count), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2)
# 顯示結果
cv2.imshow('Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
在這個示例中,我們加載了一個Haar級聯分類器用于人體檢測,然后在視頻的每一幀中檢測人體并計數。最后,我們展示了每一幀的結果,并實時更新計數器。