Matlab Computer Vision 工具箱可以检测附近或接近的多个人吗?
Can Matlab Computer Vision toolbox detect multiple nearby or approaching humans?
我们想在我们的产品上安装一个或立体摄像机,然后检测是否有 1 个或多个人在附近(在特定距离内)或接近。
Matlab CVST 可以做到这一点吗?
问题分为两部分。第一部分是检测和跟踪视频图像中的人。二是确定与人的距离。
通过检测人脸,Matlab CVST 很好地支持了检测和跟踪问题。有多种方法可以通过多帧上的光流方法来检测人脸并保持对人脸的跟踪。 Matlab 文档中有一个使用 KLT 光流算法 at this link 检测和跟踪人脸的示例。当然,可能需要根据您的具体情况进行一些调整。
Body @ABC 指出的检测当然是另一种选择。讨论是否使用卡尔曼滤波器而不是光流方法进行跟踪在很大程度上取决于场景中的其他 objects、光照和许多其他因素。卡尔曼滤波器可以更好地跟踪 body 运动学,但也需要更多调整。
第二部分的问题比较难。您需要有一个立体相机设置,找到帧中检测到的人脸之间的点对应关系,找到相机设置的对极几何并计算到人脸的距离。它在 Matlab 中是可行的,但您肯定需要一些自定义开发。
我不确定您想要的答案有多全面,但希望这是一个开始。
我要支持@paisanco 的回答。但我会在几个步骤中为您分解。
- 执行相机校准。每个相机都有不同的焦点和原理点,您需要这样做才能进行精确检测。你可以用这个toolbox。
- 检测 - 视频是一系列帧,但您需要在每一帧中检测人物。 Matlab有一个可以做多尺度检测的human detection function。我不记得这是否会发现部分人(如腰部以上)但对于原型制作我会从这个开始。
- 跟踪。要在视频中跟踪人物,您需要 运行 卡尔曼滤波器。它所做的是它以人的中心(一般来说)为中心并跟踪人的去向。此过滤器允许更平滑的跟踪以及跟踪部分和全部遮挡。这是一个让您开始使用 Kalman filter tracking in Matlab. A second example which is really awesome and has a video explanation is Student Dave's implementation with video explanation 的示例。
希望这对您有所帮助。
编辑:
我忘了回答问题的第二部分:这是更新。
获得近似距离的一种快速而肮脏的方法是从 1 英尺、3 英尺、5 英尺、10 英尺等距离拍摄人物照片。然后 运行 你的人体探测器,它应该给你主轴的高度,你可以想出一个简单的方程式来根据高度计算距离。您还可以基于此得出一个置信度度量,即这是一个人。
是的,可以。事实上,它附带了一个 example that detects people in stereo video and measures their distances to the camera. To use this approach you would need to calibrate your cameras using the Stereo Camera Calibrator 应用程序。
我们想在我们的产品上安装一个或立体摄像机,然后检测是否有 1 个或多个人在附近(在特定距离内)或接近。
Matlab CVST 可以做到这一点吗?
问题分为两部分。第一部分是检测和跟踪视频图像中的人。二是确定与人的距离。
通过检测人脸,Matlab CVST 很好地支持了检测和跟踪问题。有多种方法可以通过多帧上的光流方法来检测人脸并保持对人脸的跟踪。 Matlab 文档中有一个使用 KLT 光流算法 at this link 检测和跟踪人脸的示例。当然,可能需要根据您的具体情况进行一些调整。
Body @ABC 指出的检测当然是另一种选择。讨论是否使用卡尔曼滤波器而不是光流方法进行跟踪在很大程度上取决于场景中的其他 objects、光照和许多其他因素。卡尔曼滤波器可以更好地跟踪 body 运动学,但也需要更多调整。
第二部分的问题比较难。您需要有一个立体相机设置,找到帧中检测到的人脸之间的点对应关系,找到相机设置的对极几何并计算到人脸的距离。它在 Matlab 中是可行的,但您肯定需要一些自定义开发。
我不确定您想要的答案有多全面,但希望这是一个开始。
我要支持@paisanco 的回答。但我会在几个步骤中为您分解。
- 执行相机校准。每个相机都有不同的焦点和原理点,您需要这样做才能进行精确检测。你可以用这个toolbox。
- 检测 - 视频是一系列帧,但您需要在每一帧中检测人物。 Matlab有一个可以做多尺度检测的human detection function。我不记得这是否会发现部分人(如腰部以上)但对于原型制作我会从这个开始。
- 跟踪。要在视频中跟踪人物,您需要 运行 卡尔曼滤波器。它所做的是它以人的中心(一般来说)为中心并跟踪人的去向。此过滤器允许更平滑的跟踪以及跟踪部分和全部遮挡。这是一个让您开始使用 Kalman filter tracking in Matlab. A second example which is really awesome and has a video explanation is Student Dave's implementation with video explanation 的示例。
希望这对您有所帮助。
编辑: 我忘了回答问题的第二部分:这是更新。
获得近似距离的一种快速而肮脏的方法是从 1 英尺、3 英尺、5 英尺、10 英尺等距离拍摄人物照片。然后 运行 你的人体探测器,它应该给你主轴的高度,你可以想出一个简单的方程式来根据高度计算距离。您还可以基于此得出一个置信度度量,即这是一个人。
是的,可以。事实上,它附带了一个 example that detects people in stereo video and measures their distances to the camera. To use this approach you would need to calibrate your cameras using the Stereo Camera Calibrator 应用程序。