本周的文件交换选择

我们最好的用户提交

检测并跟踪多个面

Avi本周的选秀是检测并跟踪多个面经过Dima Lisin..我最近从事的一个项目要求在视频流中检测和跟踪多个目标(我的例子中是行人)。虽然我知道如何实现这一点,但我希望有人有一些代码,我可以修改我的问题,就像我经常做的那样,我打电话给我的朋友Dima,他是一个开发人员计算机视觉系统工具箱团队。Dima向我指出了他出色的File Exchange提交,我可以在一分钟内修改它来解决我的问题。解决目标检测和跟踪问题需要三个基本步骤:
  1. 检测当前帧的兴趣对象
  2. 匹配检测到系统正在跟踪的对象的当前列表
  3. 更新每个轨道的状态,创建新的轨道,并删除丢失的轨道
首先,让我们来看看这是如何在Dima的代码中完成的。我们首先使用USB网络摄像头支持包连接到网络摄像头。金宝app
Vidobj =网络摄像头;
下一步是创建用于检测输入帧中的面部的对象,在这种情况下,我使用vision.cascadeojectDetector默认情况下检测面。
FaceDetector = Vision.cascadeObjectDetector();%默认查找面
我创建的最后一个对象用于“跟踪”所有检测到的面。
跟踪器= multibjectTrackerklt;%然后我们获取新的帧,直到我们成功地检测到第一帧%对象/脸部。VideoPlayer = Vision.DeployableVideoplayer;%迭代直到成功检测到人脸bboxes = [];isempty(bboxes)framercb =快照(Vidobj);框架= rgb2gray(framergb);bboxes = facedetector.step(帧);结尾
现在让我们看一下第一个检测到的对象或面部。
图;framergb = insertObjectAnnotation (framergb,“矩形”,bboxes,'脸');imshow(framergb);标题('首次检测到的脸');
Pickoftheekpost_01
下一件事Dima的代码会为Tracker对象添加检测。该对象大多数繁重的升降,并决定何时创建新轨道或者检测与现有轨道相关联。此文件Exchange提交中的跟踪器对象管理正在跟踪的新检测和对象的状态。
tracker.addetections(框架,Bboxes);
在此之后,检测和跟踪代码在循环中运行,直到关闭视频窗口。请注意,检测器仅运行一次每10帧一次以提高执行性能。
%和循环,直到播放器关闭frameNumber = 0;keepRunning = true;keeprunning framergb =快照(Vidobj);框架= rgb2gray(framergb);如果Mod(Framenumber,10)== 0%(重新)检测的面孔。%注意:面部检测比IMResize更昂贵;我们可以%通过重新获取面来加速实现% downsampled框架:% bboxes = faceDetector.step(frame);bboxes = 2 * facedetector.step(Imresize(帧,0.5));如果~ isempty (bboxes)追踪。addDetections(框架、bboxes);结尾别的%轨道面孔tracker.track(框架);结尾%显示边界框和跟踪点。displayframe = InsertObjectAnnotation(Framergb,“矩形”......tracker.bboxes,tracker.boxIds);displayframe = InsertMarker(DisplayFrame,Tracker.Points);VideoPlayer.step(DisplayFrame);Framenumber = Framenumber + 1;keeprunning = Insopen(视频镀金);结尾%清理释放(放像机);
这是当我运行上面的循环时它看起来的样子。

最后,我修改了Dima的代码,通过更改代码,将使用的物体检测器替换为用于检测行人的模型,从而简单地解决问题。用于定位人脸和行人的检测器模型都是该算法的一部分计算机视觉系统工具箱
FaceDetector = Vision.cascadeObjectDetector();%默认查找面%这个PedestrianDetector = Vision.peopledetector;
如果你正在从事一个涉及检测和跟踪图像和视频中的物体的项目,我强烈建议你尝试这个选择。
|
  • 打印
  • 发电子邮件

评论

要发表评论,请点击在这里要登录您的MathWorks帐户或创建新的。