计算机视觉领域中的人流统计技术

在零售商店内外进行人流统计是一项多用途的应用,它可以帮助监测停留时间、调整人员配置、管理排队等。本文将讨论流行的人流统计方法以及一些视频处理任务,以获得更好的结果。使用的一些算法包括Haar Cascade、HOG和OpenCV方法,用于人员检测。在了解这些方法及其优势后,可以将这些方法应用于人流统计用例,如下所述。

目标是利用CCTV录像,找出特定小时内商店内的人数(停留时间)以及零售商店内各个部分(如杂货、饮料等)的人数。为此任务,需要在商店入口点和商店内不同部分的CCTV视频。下面视频展示了一个典型的零售商店CCTV录像,视野中包含商店的各个部分。

算法

让讨论一些人员检测算法以及在本文中使用的方法:

这是一种基于机器学习的算法,通过大量正负图像训练一个级联函数。在检测中使用预训练的级联。了解更多关于这种方法的信息,请访问。以下是代码示例:

import numpy as np import cv2 # 创建人体分类器 body_classifier = cv2.CascadeClassifier('haarcascade_fullbody.xml') # 为视频文件初始化视频捕获 cap = cv2.VideoCapture('moskva.mov') # 循环一旦视频成功加载 while cap.isOpened(): # 读取第一帧 ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 将帧传递给人体分类器 bodies = body_classifier.detectMultiScale(gray, 1.1, 3) # 提取任何识别出的人体的边界框 for (x,y,w,h) in bodies: cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 255), 2) cv2.imshow('Pedestrians', frame) if cv2.waitKey(1) == 13: #13是Enter键 break cap.release() cv2.destroyAllWindows()

HOG(梯度直方图)是一种“特征描述符”。该技术统计图像(以及视频中)局部部分的梯度方向出现次数。了解更多关于这种方法的信息,请访问。以下是代码示例:

import cv2 import imutils # 初始化HOG人员检测器 hog = cv2.HOGDescriptor() hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector()) # 读取图像 image = cv2.imread('img.png') # 调整图像大小 image = imutils.resize(image, width=min(400, image.shape[1])) # 检测图像中所有包含行人的区域 (regions, _) = hog.detectMultiScale(image, winStride=(4, 4), padding=(4, 4), scale=1.05) # 在图像中绘制区域 for (x, y, w, h) in regions: cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2) # 显示输出图像 cv2.imshow("Image", image) cv2.waitKey(0) cv2.destroyAllWindows()

背景减除是许多基于视觉的应用中的主要预处理步骤。例如,在访客计数器的情况下,静态相机用于计算进入或离开房间的访客数量,或者交通摄像机提取有关车辆的信息等。在所有这些情况下,首先需要单独提取人员或车辆。从技术上讲,需要从静态背景中提取移动的前景。这是实时人员检测的相对快速方法。OpenCV实现了这样的三种算法:

BackgroundSubtractorMOG、BackgroundSubtractorMOG2、BackgroundSubtractorGMG。了解更多关于这些算法的信息,请访问。以下是使用BackgroundSubtractorMOG2的OpenCV背景减除的实现代码:

import numpy as np import cv2 cap = cv2.VideoCapture('vtest.avi') fgbg = cv2.createBackgroundSubtractorMOG2() while(1): ret, frame = cap.read() fgmask = fgbg.apply(frame) cv2.imshow('frame',fgmask) k = cv2.waitKey(30) & 0xff if k == 27: break cap.release() cv2.destroyAllWindows()

HOG检测器的准确性(在简单HOG检测方法中讨论)可以通过使用SVM分类器来进一步提高,以从样本图像中分类正负特征。从收集的正负图像样本中提取的正负特征用于训练带有HOG检测的SVM模型。这种方法以最大准确性计算交通流量,并且算法可以定制。为任何新商店生成负图像(零售商店的背景图像)可以提高准确性。

方法

比较上述算法:基于上述观察,考虑到从零售商店获得的不同类型视频,让看看本文使用的方法:

为了有效地在单个摄像机视图中对各个类别进行流量计数,需要对商店布局视频进行分割。一个录像可能覆盖2-3个类别,如饮料、杂货部分。为了获得商店不同部分的准确人员计数,分割是有帮助的。

如上图所示,CCTV视频在海湾级别可用,因此为了测量类别级别的流量,视频覆盖区域按类别分割。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485