精华内容
下载资源
问答
  • 哪里可以找到跟踪的人
    千次阅读 热门讨论
    2021-05-31 09:36:53

    参考官网教程:https://docs.microsoft.com/zh-cn/azure/kinect-dk/body-sdk-setup
    https://docs.microsoft.com/zh-cn/azure/kinect-dk/build-first-body-app
    使用环境:Azure Kinect SDK v1.4.1 + Azure Kinect Body Tracking SDK 1.0.1 + VS2019

    一、设置人体跟踪SDK

    1. 官网下载SDK并安装

    下载地址为https://docs.microsoft.com/zh-cn/azure/kinect-dk/body-sdk-download,选择1.0.1版本即可,下载好后可以默认安装,也可以自定义安装路径。(我是自定义路径)
    在这里插入图片描述
    注:我开始安装的1.1.0版本,后来运行过程中始终出错,后来使用1.0.1版本运行正常,出错原因未知。

    2. 验证人体跟踪

    • 可以在 开始菜单 或 (SDK Installation Path)\tools\k4abt_simple_3d_viewer.exe 中找到它双击运行。
    • 如果没有足够强大的 GPU 但仍想测试结果,可以通过以下命令在命令行中启动 Azure Kinect 人体跟踪查看器:(SDK Installation Path)\tools\k4abt_simple_3d_viewer.exe

    出现以下窗口,则说明安装正确。在这里插入图片描述

    二、生成第一个人体跟踪应用程序

    1. 项目配置

    过程和上节内容类似,未详细说明就是与上节完全相同。

    1.1 新建空白工程并配置文件

    1.2 安装 Azure Kinect NuGet 包

    1.3 添加头文件和库文件

    1. 加入头文件k4a.h和k4abt.h
      在这里插入图片描述
    2. 配置头文件目录和库文件目录
      2.1 C/C++ - 常规 - 附加包含目录,加入传感器 SDK 和人体跟踪 SDK 的include路径
      在这里插入图片描述
      2.2 链接器 - 常规 - 附加库目录,加入传感器 SDK 和人体跟踪 SDK 的lib路径
      在这里插入图片描述
      2.3 链接器 - 输入 - 附加依赖项,加入k4a.lib和k4abt.lib
      在这里插入图片描述
      注意:每添加一项后,点击右下角应用

    2. 完整源代码

    代码用于检测镜头中人数。

    #include <stdio.h>
    #include <stdlib.h>
    
    #include <k4a/k4a.h>
    #include <k4abt.h>
    
    #define VERIFY(result, error)                                                                            \
        if(result != K4A_RESULT_SUCCEEDED)                                                                   \
        {                                                                                                    \
            printf("%s \n - (File: %s, Function: %s, Line: %d)\n", error, __FILE__, __FUNCTION__, __LINE__); \
            exit(1);                                                                                         \
        }                                                                                                    \
    
    int main()
    {
        k4a_device_t device = NULL;
        VERIFY(k4a_device_open(0, &device), "Open K4A Device failed!");
    
        // Start camera. Make sure depth camera is enabled.
        k4a_device_configuration_t deviceConfig = K4A_DEVICE_CONFIG_INIT_DISABLE_ALL;
        deviceConfig.depth_mode = K4A_DEPTH_MODE_NFOV_UNBINNED;
        deviceConfig.color_resolution = K4A_COLOR_RESOLUTION_OFF;
        VERIFY(k4a_device_start_cameras(device, &deviceConfig), "Start K4A cameras failed!");
    
        k4a_calibration_t sensor_calibration;
        VERIFY(k4a_device_get_calibration(device, deviceConfig.depth_mode, deviceConfig.color_resolution, &sensor_calibration),
            "Get depth camera calibration failed!");
    
        k4abt_tracker_t tracker = NULL;
        k4abt_tracker_configuration_t tracker_config = K4ABT_TRACKER_CONFIG_DEFAULT;
        VERIFY(k4abt_tracker_create(&sensor_calibration, tracker_config, &tracker), "Body tracker initialization failed!");
    
        int frame_count = 0;
        do
        {
            k4a_capture_t sensor_capture;
            k4a_wait_result_t get_capture_result = k4a_device_get_capture(device, &sensor_capture, K4A_WAIT_INFINITE);
            if (get_capture_result == K4A_WAIT_RESULT_SUCCEEDED)
            {
                frame_count++;
                k4a_wait_result_t queue_capture_result = k4abt_tracker_enqueue_capture(tracker, sensor_capture, K4A_WAIT_INFINITE);
                k4a_capture_release(sensor_capture); // Remember to release the sensor capture once you finish using it
                if (queue_capture_result == K4A_WAIT_RESULT_TIMEOUT)
                {
                    // It should never hit timeout when K4A_WAIT_INFINITE is set.
                    printf("Error! Add capture to tracker process queue timeout!\n");
                    break;
                }
                else if (queue_capture_result == K4A_WAIT_RESULT_FAILED)
                {
                    printf("Error! Add capture to tracker process queue failed!\n");
                    break;
                }
    
                k4abt_frame_t body_frame = NULL;
                k4a_wait_result_t pop_frame_result = k4abt_tracker_pop_result(tracker, &body_frame, K4A_WAIT_INFINITE);
                if (pop_frame_result == K4A_WAIT_RESULT_SUCCEEDED)
                {
                    // Successfully popped the body tracking result. Start your processing
    
                    size_t num_bodies = k4abt_frame_get_num_bodies(body_frame);
                    printf("%zu bodies are detected!\n", num_bodies);
    
                    k4abt_frame_release(body_frame); // Remember to release the body frame once you finish using it
                }
                else if (pop_frame_result == K4A_WAIT_RESULT_TIMEOUT)
                {
                    //  It should never hit timeout when K4A_WAIT_INFINITE is set.
                    printf("Error! Pop body frame result timeout!\n");
                    break;
                }
                else
                {
                    printf("Pop body frame result failed!\n");
                    break;
                }
            }
            else if (get_capture_result == K4A_WAIT_RESULT_TIMEOUT)
            {
                // It should never hit time out when K4A_WAIT_INFINITE is set.
                printf("Error! Get depth frame time out!\n");
                break;
            }
            else
            {
                printf("Get depth capture returned error: %d\n", get_capture_result);
                break;
            }
    
        } while (frame_count < 100);
    
        printf("Finished body tracking processing!\n");
    
        k4abt_tracker_shutdown(tracker);
        k4abt_tracker_destroy(tracker);
        k4a_device_stop_cameras(device);
        k4a_device_close(device);
    
        return 0;
    }
    

    3. 结果展示

    在这里插入图片描述
    出现如图所示窗口,则说明运行成功。

    更多相关内容
  • 测试应该知道的15款最好的Bug跟踪管理系统.对某个项目来说,最重要的一件事情就是需要跟踪和梳理各种bug和问题,找到并解决问题,否则,项目就会花费超多的时间,导致整个项目的重心偏移。而且,用户总想标记未...
  • 一种基于深度学习的解决方案,可检测办公室中的人员并找出他们之间的距离以跟踪社交距离。 算法概念 预处理数据集 在YoloV3上进行火车模型以进行人员检测 框架中的人物检测 人们在与遥远的警报系统的框架。
  • 可以在此处找到示例数据: https://www.dropbox.com/s/4iun8ztwguwkms7/TrackingEx.zip?dl=0 跟踪示例可应用于其他视频输入数据,但可能需要调整阈值 (th = 0.1490;) 和初始化卡尔曼滤波器参数 (R、H、Q、P)。 ...
  • 「PoseNet」是一种视觉模型...这种姿势估计模型不会鉴别图像中的是谁,只会找到关键身体部位的 位置。 TensorFlow Lite 分享了一个安卓示例应用程序,该应用程序利用设备的摄像头来实时地检测和显示一个的关键部位
  • 是一个插件,它使该机器人可以找到负责损坏另一个实体的。 一个简单的用法示例可以在/ examples文件夹中找到 攻击类型支持: 近战伤害(剑,拳等) 射弹(箭头,药水等)-已计划 猎犬不是100%可靠的,在许多...
  • 当使用粒子群优化(PSO)进行人体运动跟踪时,由于不可靠的图像可能性,粒子可能会被误导并且无法找到最合理的姿势空间。 本文提出了一种新的基于PSO的人体运动跟踪算法,即基于PSO的退火粒子滤波器(APSOPF)。 ...
  • Matlab代码考克斯...使用上述轮廓跟踪代码找到的轮廓可以使用此代码分解为傅立叶模式。 随时间绘制每个模式的振幅,以显示曲率动力学。 基于Cox等的工作。 执照 原始FiberApp软件的许可证如下:版权所有(c)201
  • 技术对组织的影响更大,它迫使其基本功能发生变化,而不管行业功能如何。 为了赶上需求,公司被迫... 目的是通过主成分分析算法找到申请面部的重复。 该研究测试了申请预先录制的图像,并得出了进一步的研究思路。
  • 有多种方法可以查找和跟踪您喜爱的文件的作者。 该视频由马修·奥利芬特 (Matthew Oliphant) 创建。
  • 本文主要是针对目标跟踪算法进行一个学习编码,从比较简单的卡尔曼滤波器开始,到后面的deepsort 和最后与yolo算法进行整合,到最后手动实现目标跟踪框架的流程进行。本着,无法造轮子就没有彻底理解的原则进行学习...


    本文主要是针对目标跟踪算法进行一个学习编码,从比较简单的卡尔曼滤波器开始,到后面的deepsort 和最后与yolo算法进行整合,到最后手动实现目标跟踪框架的流程进行。本着,无法造轮子就没有彻底理解的原则进行学习。那么废话不多说开始了。(收藏>点赞?VIP:Free,白嫖可耻,拒接白嫖)

    单目标检测

    ok,我们先从单目标检测开始说起。假设我们用Yolo算法检测到了一个目标,假设我们的数据源是视频,我们要跟踪的是其中一个人,也就是下面这种图片:假设要跟踪红框当中的男子,现在的图片是摄像头某一个时刻某一帧的情况。

    在这里插入图片描述
    接下来当男子移动的时候,我还想再跟踪这个家伙,并且我还要把他的运动轨迹搞出来。

    假设这个目标框我们是使用yolo算法识别出来的,我们知道如果是这个yolo算法识别出来的话,那么我们得到的就是这个目标的bbox和对应的类别。

    当摄像头下一帧或者下一秒出现的时候,我们的算法得到的就只是它新的一个bbox也就是在图片当中他的坐标。
    那么问题来了周围那么多人,我肯定也是会识别出来的,也就是说,下一秒下一个时刻yolo算法识别得到的结果是一群人的坐标,我如何在中多bbox里面找到红色框的人的这个时刻的位置。

    IOU跟踪

    使用IOU显然是一个最容易想到的问题,也就是说,假设我们知道要跟踪的人一开始的bbox,那么在一个时刻,我可以去遍历所有的bbox,然后找到和上一个时刻bbox的IOU最大的一个框出来,那么是不是可以说是当前这个IOU最大的框就是这个男人的位置呢?

    理想状况下显然是这样的:
    在这里插入图片描述
    尽管这个时刻识别出了好几框,但是我们依然可以找到这个目标现在这个时刻的位置。

    然而显然这里面有很多问题。

    目标丢失

    首先最容易想到的问题是,目标丢失,也就是,如果在某一个时刻,遇到障碍物,那个目标的位置丢失了,那么下一个时刻我们再计算IOU的话显然计算的就是和别的目标的框,这样一来识别到的或者跟踪的目标就发生了偏移。假设就算是当前只有一个目标,没有其他的,一旦发生遮挡并且目标移动速度很快,下一个时刻目标框和上一个目标框的IOU计算值为0一样不行。

    人群密集

    这个问题在这张图当中很好演示,在2D平面是我们很容易发现,那个黄色衣服的女人和我们的目标的框的IOU是重合很大的,如果那个女人稍微走的慢一点,会发生什么?就很有可能那个女人在这个时刻的框和目标上个时刻的框重合,然后目标转移了。

    所以为了解决这个问题,我们显然需要记录更多的信息。

    我们现在先忽略人群密集的情况,并且只考虑单目标跟踪,并且我们还假设这个人是线性移动的。

    卡尔曼滤波直观理解

    所以为了解决我们假设的东西,我们这里需要有引入这个玩意,这个东西主要是用于线性的一个状态处理。

    用在我们这里的话其实是类似与根据当前的状态去预测一下目标后面可能存在的位置,这样的话下一次我们检测到的bbox可以和我们预测的进行iou计算,从而确定我们目标的一个运动状态。

    所以这里涉及到两个东西,上一个时刻的状态,和这个时刻的观察状态。

    因此咱们这里对卡尔曼来说刚好对应两个玩意。

    状态方程,观察方程。

    状态方程

    在这里插入图片描述
    其中wk 为过程噪声,A,B,C为系数 Uk 表示的是状态的一个变化量,vk是观察噪声。

    什么意思咧,我们假设人理想状态下做匀速直线运动,那么 xk = xk-1 + dt*v 但是实际上,人不可能真的做匀速运动,他一定有波动的,所以加上wk

    那么yk什么意思呢,xk 是我们算出来的,实际上我们还可以通过设备观察,那么观察和我们计算的xk存在一个C的系数关系,然后加上观察的一个噪声,也就是误差,最后我们的观察方程与状态方程呈现如上关系。

    他们之间的关系如下:
    在这里插入图片描述

    显然的话,我们的那个xk应该是作为估计值的。

    噪声

    之后是咱们的噪声,这个噪声说白了在这里就是误差的意思。默认假设是服从正太分布的一个误差。
    在这里插入图片描述

    现在我们大概知道了他的一个运作的,我们实际的一个X肯定是在我们预测的X和我们观察到的X之间的一个交集产生的。

    由于我们的过程和观察都是由加入噪声的,所以我们的的X,Y过程和预测也是各自满足一个高斯分布的。
    也就是下面这样的:
    在这里插入图片描述

    协方差

    前面我们对正规的过程有了了解,那么现在还有个问题就是这个对应的A,B,C的参数如何确定。

    那么这一点就需要使用到咱们的这个协方差了,无相关协方差为0 正相关(绝对)为1,负相关(绝对)为-1 这样一来就可以确定我们这个系数的一个样子。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    上面是来自于知乎大佬的一个解释:
    链接:https://zhuanlan.zhihu.com/p/266161140

    我们这里就简单提一下高纬度的,二维的一个情况,因为一维的话其实就是我们的方差,二维的话,一般情况下,也不会去没事当作线代去算(手算),所以要提一下。

    他的表示是这样的

    在这里插入图片描述
    同理如果是多维度的,比如三维是这样的:
    在这里插入图片描述

    卡尔曼公式

    说了这么多,对这个玩意进行初步总结就是:
    使用上一次的结果,去推测当前的值,然后使用当前的观测值去修正,最后得到结果。

    用公式表述就是这样的:
    在这里插入图片描述

    那个P就是咱们的协方差,我们前期提到的ABC系数。

    这个P显然是需要更新的,然后那个K和咱们的P是存在一个关系的,而这个K显然就是卡尔曼系数,Z是观测的值。 所以总体是就是这关系,我们如果用于目标跟踪的话,显然我们要的是观察和X预测的一个IOU。

    不过这里显然是矩阵的形式(干完这一票,说啥得把线代好好再过过)
    而且你也发现了,咱们这个还是基于统计学的一个玩意。感兴趣的我可以在来一篇推导VC维度的玩意(因为手稿整理很麻烦,所以no blog)

    案例运用

    ok,现在我们比啊目标追踪来看看咱们的一个用法,推导。

    我们依然是假设目标是线性运动的,所以影响X位置的变量有:

    在这里插入图片描述
    模型可以表示为:
    在这里插入图片描述
    提取出来:
    在这里插入图片描述
    得到第一个方程:
    在这里插入图片描述
    同理,第二个公式的话就是咱们的协方差的一个公式:

    在这里插入图片描述

    这部分的话,因为手稿和公式编辑的问题,先挪到下一部分

    展开全文
  • 该代码对由经验派生的人类操作员信息参数和现实世界的非线性组成的 ... 该工具为输入设备的设计(设计变量是控制增益)找到解决方案,该设备在加权复杂性的选择/跟踪任务期间将人类操作员与非线性机器连接起来。
  • 同一件商品,不同网站价格可能不同,价格跟踪可以比较多个网站的价格,帮您找到最的价格! 3、价格趋势 这个商品还会降价吗?价格跟踪可以告诉您该商品的价格变化趋势,帮您找到最佳的出手时机! 4、分享给...
  • 可以在此存储库的文件夹下找到Server Open API定义。 计算:AWS Lambda 数据存储:DynamoDB 路由和负载平衡:API网关 权限管理:IAM 服务器部署 基础设施设置自动化是使用完成的。 通过以下步骤,您将可
  • Unity使用虚拟相机实现人物跟踪移动

    千次阅读 2021-03-11 00:37:35
    可以使用Cinemachine包让摄像机一直跟随人物进行移动。 1.安装Cinemachine 在Package Manager中选中 Package :Unity Resgistry 搜素cinemachine进行安装,我使用的Unity是2020.2版本,所支持的cinemachine是2.6.3。...

    学习参考:b站Up主M_Studio(麦扣老师)的3DRPG系列教程

    当前游戏已经实现了人物可以移动到点击位置。在这里插入图片描述
    但是存在一个问题,镜头始终是固定的,如上图所示,当人物向前移动时,它会距离镜头越来越远。可以使用Cinemachine包让摄像机一直跟随人物进行移动。

    1.安装Cinemachine

    在Package Manager中选中 Package :Unity Resgistry 搜素cinemachine进行安装,我使用的Unity是2020.2版本,所支持的cinemachine是2.6.3。

    安装成功以后在菜单栏会显示cinemachine窗口,里面有很多种相机可以使用,这篇文章中使用第一个virtual虚拟相机。

    虚拟相机创建以后会替代原有的Main camera

    2.创建虚拟相机

    1.选中Mian camera相机,找到菜单栏GameObject选择Align view to Selected,将选择的物体锁定固定的Scene的窗口视角。

    2.选择菜单栏Cinemachine的第一个Create Virtual Camera创建虚拟相机,这是层级窗口中就会多出一个虚拟相机,它已经顶替了原有的MainCamera。

    如图MainCamera上已经有了CinemachineBrain即cinemachine的大脑,CM vcam1就是新建的虚拟相机。

    3.人物跟随选项设置

    1.在CM vcam1虚拟相机的设置里进行修改Body选择frame,Aim选择Do nothing

    2.设置跟随点,把人物拖拽到follow

    此时,选择游戏Game预览窗口,如下图所示

    现在的cinemachine已经锁定了人物的下半身位置,屏幕的中心有一个小黄点,这是摄像机跟随人物的点,这个点其实是游戏人物的中心点。可以在人物的预制体里看到,人物默认的坐标位置就是根据小狗脚下的点。

    4.适当调整跟随点

    如果希望跟随人物的中心点可以在人物稍微靠上的位置。可以给人物创建一个空的字物体,起名LookAtPoint,然后将这个字物体的位置向上,修改Y轴到达人物中心点的位置,然后在cinemachine里将这一个点重新拖拽到Follow里。

    再次选中虚拟相机在game窗口中预览,对比上一张图黄色的中心点从人物的脚底挪到了人物中间的位置。

    5.设置宽容度和相机距离

    设置一些相机宽容度可以实现人物移动的过程中相机有一个缓慢跟随的效果。
    调整Body里的DeadZoon,我这里设置宽和 搞都是0.05,并且我这里把相机距离设置为12,使相机视角稍微变大。

    与文章开始的效果图对比,已经实现了相机跟随人物移动的效果:
    在这里插入图片描述

    展开全文
  • 目标跟踪算法综述

    万次阅读 2021-11-30 13:49:15
    目标跟踪算法从构建模型的角度可以分为生成式(generative)模型和判别式(discrimination)模型两类;从跟踪目标数量可分为单目标跟踪和多目标跟踪。目标跟踪融合了图像处理、机器学习、最优化等多个领域的理论和算法,...

    前言:   目标跟踪是计算机视觉领域研究的一个热点问题,其利用视频或图像序列的上下文信息,对目标的外观和运动信息进行建模,从而对目标运动状态进行预测并标定目标的位置。目标跟踪算法从构建模型的角度可以分为生成式(generative)模型和判别式(discrimination)模型两类;从跟踪目标数量可分为单目标跟踪和多目标跟踪。目标跟踪融合了图像处理、机器学习、最优化等多个领域的理论和算法,是完成更高层级的图像理解( 如目标行为识别) 任务的前提和基础。

    目标跟踪的基本任务是在一段视频序列中给定目标的初始位置,在后续每一帧中对目标进行持续的跟踪定位,在此过程中不会提供关于目标的颜色、形状、大小等先验条件,即跟踪算法只有通过在第一帧中对目标进行学习才能进行跟踪。一般来说,跟踪过程中的技术难点主要包括以下几个方面:

            ① 遮挡与消失

            ② 形态变化

            ③ 运动模糊

            ④ 复杂背景

            ⑤ 准确性与实时性

    1 传统的目标跟踪方法

    传统的目标跟踪算法是目标跟踪领域出现最早的算法,虽然在如今看来,这些算法存在一定局限性,但我们不能忽视它们为目标跟踪领域蓬勃发展奠定的基础。其中的经典算法包括光流法、卡尔曼滤波、粒子滤波、均值漂移等。

    1.1 光流法:

    光流(optical flow)的概念于1950 年由 Gibson 首先提出,是目标、场景或摄像机在连续两帧图像间运动时造成的目标的运动。是空间运动物体在观察成像平面上的像素运动的瞬时速度,利用图像序列中像素在时间域上的变化以及相邻帧之间的相关性来找到上一帧跟当前帧之间存在的对应关系,从而计算出相邻帧之间物体的运动信息的一种方法。一般而言,光流是由于场景中前景目标本身的移动、相机的运动,或者两者的共同运动所产生的。其计算方法可以分为三类:

            (1)基于区域或者基于特征的匹配方法;

            (2)基于频域的方法;

            (3)基于梯度的方法;

    简单来说,光流是空间运动物体在观测成像平面上的像素运动的“瞬时速度”。光流的研究是利用图像序列中的像素强度数据的时域变化和相关性来确定各自像素位置的“运动”。研究光流场的目的就是为了从图片序列中近似得到不能直接得到的运动场。

    注:运动场,其实就是物体在三维真实世界中的运动;光流场,是运动场在二维图像平面上的投影。

    光流法的前提假设:

            (1)相邻帧之间的亮度恒定;

            (2)相邻视频帧的取帧时间连续,或者,相邻帧之间物体的运动比较“微小”;

            (3)保持空间一致性;即,同一子图像的像素点具有相同的运动

    光流法用于目标检测的原理:给图像中的每个像素点赋予一个速度矢量,这样就形成了一个运动矢量场。在某一特定时刻,图像上的点与三维物体上的点一一对应,这种对应关系可以通过投影来计算得到。根据各个像素点的速度矢量特征,可以对图像进行动态分析。如果图像中没有运动目标,则光流矢量在整个图像区域是连续变化的。当图像中有运动物体时,目标和背景存在着相对运动。运动物体所形成的速度矢量必然和背景的速度矢量有所不同,如此便可以计算出运动物体的位置。需要提醒的是,利用光流法进行运动物体检测时,计算量较大,无法保证实时性和实用性。

    光流法用于目标跟踪的原理:

            (1)对一个连续的视频帧序列进行处理;

            (2)针对每一个视频序列,利用一定的目标检测方法,检测可能出现的前景目标;

            (3)如果某一帧出现了前景目标,找到其具有代表性的关键特征点(可以随机产生,也可以利用角点来做特征点);

            (4)对之后的任意两个相邻视频帧而言,寻找上一帧中出现的关键特征点在当前帧中的最佳位置,从而得到前景目标在当前帧中的位置坐标;

            (5)如此迭代进行,便可实现目标的跟踪;

    1.2 卡尔曼滤波

    卡尔曼全名Rudolf Emil Kalman,匈牙利数学家,卡尔曼滤波器到底是干嘛的?我们来看下wiki上的解释:卡尔曼滤波的一个典型实例是从一组有限的,包含噪声的,对物体位置的观察序列(可能有偏差)预测出物体的位置的坐标及速度。例如,对于雷达来说,人们感兴趣的是其能够跟踪目标。但目标的位置、速度、加速度的测量值往往在任何时候都有噪声。卡尔曼滤波利用目标的动态信息,设法去掉噪声的影响,得到一个关于目标位置的好的估计。这个估计可以是对当前目标位置的估计(滤波),也可以是对于将来位置的估计(预测),也可以是对过去位置的估计(插值或平滑)。

            什么是卡尔曼滤波?

            ① 你可以在任何含有不确定信息的动态系统中使用卡尔曼滤波,对系统下一步的走向做出有根据的预测,即使伴随着各种干扰,卡尔曼滤波总是能指出真实发生的情况。 在连续变化的系统中使用卡尔曼滤波是非常理想的,它具有占用内存小的优点(除了前一个状态量外,不需要保留其它历史数据),并且速度很快,很适合应用于实时问题和嵌入式系统。

            ② 卡尔曼滤波器是一种高效的递归滤波器,它能够从一系列的不完全及包含噪声的测量中,估计动态系统的状态。

            ③ 对于一个线性系统,卡尔曼滤波器能够从不精确的预测状态和观测状态中,估算出高精度的系统状态,并且估计过程只需要保留最近一次的估算结果,具有速度快、资源需求低的特点。

            ④ 其滤波过程为:根据当前状态和系统方程估算下一状态 获取下一状态的观测结果 使用当前卡尔曼增益加权平均更新估计值 更新卡尔曼增益。整个过程迭代执行。

            ⑤ 更新估计值时预测值和观测值所占权重由其不确定性决定,基本卡尔曼滤波器擅长处理正态分布的误差。

    1.3 粒子滤波

            为什么要使用粒子滤波呀?首先。卡尔曼滤波有一个很大的前提,那就是: a:系统噪声必须是符合高斯分布(也就是正态分布)。b:必须是线性系统。

    粒子滤波(PFParticle Filter)是以贝叶斯推理和重要性采样为基本框架。

    贝叶斯推理就是类似于卡尔曼滤波的过程。而卡尔曼滤波是线性高斯模型,对于非线性非高斯模型,就采用蒙特卡洛方法(Monte Carlo method,即以某时间出现的频率来指代该事件的概率)。(粒子滤波从一定程度上,属于卡尔曼滤波的拓展)

    重要性采样就是根据对粒子的信任程度添加不同的权重,对于信任度高的粒子,添加大一点的权重,否则就添加小一点的权重,根据权重的分布形式,可以得到与目标的相似程度。

    粒子滤波的思想基于蒙特卡洛思想,利用粒子集来表示概率,可以用在任何形式的状态空间模型上 。1998年,Andrew 和 Michael 成功将粒子滤波应用在目标跟踪领域。在初始化阶段提取目标特征,在搜索阶段按均匀分布或高斯分布的方式在整个图像搜索区域内进行粒子采样,然后分别计算采样粒子与目标的相似度,相似度最高的位置即为预测的目标位置。后续帧的搜索会依据前一帧中预测的目标位置做重要性重采样。传统的粒子滤波跟踪算法仅采用图像的颜色直方图对图像建模,计算量会随着粒子数量的增加而增加,并且当目标颜色与背景相似时,往往会跟踪失败。

            具体过程:

    粒子滤波的核心思想就是基于奖励惩罚机制(强化学习)的优化首先,根据状态转移方程,对于每个粒子的位置进行更新。但这个更新只是基于航迹推算(dead reckon)得到的,我们要融合绝对定位与相对定位,绝对定位的信息并没有融合进去。根据状态转移方程得到的新状态到底行不行?能有多大的概率?这还取决于绝对定位的结果也就是输出方程。

    把状态转移方程得到的结果代入输出方程,得到一个输出,这个输出是估计值,而根据绝对定位的观测,这个值对应的观测值也是可以测量得到的,现在这两个值之间有个差额,很明显,这个差额越小,刚才的到的状态越可信,这个差额越大,状态越不可信。

    把这个差额指标作为评估函数(像GA,pso等优化算法里的evaluation function),来修正各个状态的估计概率。简单地说就是,一开始在整个地图上均匀分配一大波粒子(当然有改进的预处理算法,可以事先往正确点靠,减少计算量),每个粒子都可以算出一个估计值,然后再得到一个实际的观测值,将与观测值相差较小的粒子留下来。(具体留多少个粒子需要根据你系统模型,现在也有自适应的算法,可以自己改变留下来的粒子数目),这样每个粒子都有一个和观测值的差值,然后再进行下一次同样方法的更新(这个过程叫做重采样),最后我们就会留下可信度非常高的粒子。这一般就是最后的正确值。

            粒子滤波的应用

    粒子滤波技术在非线性、非高斯系统表现出来的优越性,决定了它的应用范围非常广泛。另外,粒子滤波器的多模态处理能力,也是它应用广泛的原因之一。国际上,粒子滤波已被应用于各个领域。在经济学领域,它被应用在经济数据预测;在军事领域已经被应用于雷达跟踪空中飞行物,空对空、空对地的被动式跟踪;在交通管制领域它被应用在对车或人视频监控;它还用于机器人的全局定位。

            粒子滤波的缺点

    虽然粒子滤波算法可以作为解决SLAM问题的有效手段,但是该算法仍然存在着一些问题。其中最主要的问题是需要用大量的样本数量才能很好地近似系统的后验概率密度。机器人面临的环境越复杂,描述后验概率分布所需要的样本数量就越多,算法的复杂度就越高。因此,能够有效地减少样本数量的自适应采样策略是该算法的重点。另外,重采样阶段会造成样本有效性和多样性的损失,导致样本贫化现象。如何保持粒子的有效性和多样性,克服样本贫化,也是该算法研究重点。

    1.4 均值漂移mean-shift

    Mean shift算法是Fukunaga于1975年提出的,其基本思想是利用概率密度的梯度爬升来寻找局部最优。到1995年,YizongCheng针对离x越近的采样点对x周围的统计特性越有效,定义了一族核函数,并根据所有样本点的重要性不同,设定了一个权重系数,扩大了Mean Shift的使用范围。

    meanshift算法的原理很简单。假设你有一堆点集,还有一个小的窗口,这个窗口可能是圆形的,现在你可能要移动这个窗口到点集密度最大的区域当中。如下图:

    最开始的窗口是蓝色圆环的区域,命名为C1。蓝色圆环的圆心用一个蓝色的矩形标注,命名为C1_o。而窗口中所有点的点集构成的质心在蓝色圆形点C1_r处,显然圆环的形心和质心并不重合。所以,移动蓝色的窗口,使得形心与之前得到的质心重合。在新移动后的圆环的区域当中再次寻找圆环当中所包围点集的质心,然后再次移动,通常情况下,形心和质心是不重合的。不断执行上面的移动过程,直到形心和质心大致重合结束。 这样,最后圆形的窗口会落到像素分布最大的地方,也就是图中的绿色圈,命名为C2。

    meanshift算法除了应用在视频追踪当中,在聚类,平滑等等各种涉及到数据以及非监督学习的场合当中均有重要应用,是一个应用广泛的算法。图像是一个矩阵信息,如何在一个视频当中使用meanshift算法来追踪一个运动的物体呢? 大致流程如下:

            1.首先在图像上选定一个目标区域

            2.计算选定区域的直方图分布,一般是HSV色彩空间的直方图。

            3.对下一帧图像b同样计算直方图分布。

            4.计算图像b当中与选定区域直方图分布最为相似的区域,使用meanshift算法将选定区域沿着最为相似的部分进行移动,直到找到最相似的区域,便完成了在图像b中的目标追踪。

            5.重复3到4的过程,就完成整个视频目标追踪。

    通常情况下我们使用直方图反向投影得到的图像和第一帧目标对象的起始位置,当目标对象的移动会反映到直方图反向投影图中,meanshift 算法就把我们的窗口移动到反向投影图像中灰度密度最大的区域了。

            直方图反向投影的流程是:

    假设我们有一张100x100的输入图像,有一张10x10的模板图像,查找的过程是这样的:

            1.从输入图像的左上角(0,0)开始,切割一块(0,0)至(10,10)的临时图像;

            2.生成临时图像的直方图;

            3.用临时图像的直方图和模板图像的直方图对比,对比结果记为c;

            4.直方图对比结果c,就是结果图像(0,0)处的像素值;

            5.切割输入图像从(0,1)至(10,11)的临时图像,对比直方图,并记录到结果图像;

            6.重复1~5步直到输入图像的右下角,就形成了直方图的反向投影。

            Mean shift视频追踪实现

    在OpenCV中实现Mean shift的API是:cv.meanShift(probImage, window, criteria)

    参数:probImage: ROI区域,即目标的直方图的反向投影

    window: 初始搜索窗口,就是定义ROI的rect

    criteria: 确定窗口搜索停止的准则,主要有迭代次数达到设置的最大值,窗口中心的漂移值大于某个设定的限值等。

            实现Mean shift的主要流程是:

            1.读取视频文件:cv.videoCapture()

            2.感兴趣区域设置:获取第一帧图像,并设置目标区域,即感兴趣区域

            3.计算直方图:计算感兴趣区域的HSV直方图,并进行归一化

            4.目标追踪:设置窗口搜索停止条件,直方图反向投影,进行目标追踪,并在目标位置绘制矩形框。

    由于均值漂移计算速度快,且对目标形变和遮挡有一定鲁棒性,均值漂移算法受到广泛重视。但提取的颜色直方图特征对目标的描述能力有限,缺乏空间信息,故均值漂移算法仅能在目标与背景能够在颜色上区分开时使用,有较大局限性。

    1.5 稀疏编码

    稀疏表示是智能信息处理的重要工具,目前在图像分类、人脸识别、图像的超分辨重建等方面得到广泛的应用。由于基于稀疏表示的目标观测模型对环境的变化具有一定的鲁棒性,因此,通常用稀疏表示解决复杂场景下的目标跟踪问题。稀疏表示应用于目标跟踪时,将跟踪问题的求解转化为在模板空间中寻求一个稀疏近似解。

    稀疏表示是获取、表示和压缩高维信号的重要工具, 其基本思想是:给定一个足够大的基集(也称作超完备字典),对于一个待编码信号,从基集中尽可能少地选择基向量线性重建待编码信号,同时使重构误差尽可能 小。在跟踪问题中,可以利用稀疏表示对干扰的不敏感特性建立目标观测模型。

    1.6 字典学习

    字典学习包括稀疏编码和字典更新两个阶段,先更新迭代稀疏系数矩阵,然后在迭代字典矩阵和 稀疏系数矩阵时更新字典,以得到符合优化目的的字典,对数量巨大的数据集进行降维,从中得到最能表现样本的特征,达到运算量最小的目的.目前较成熟的字典学习算法有正交匹配追踪(orthogonal matching pursuit, OMP)算法、最优方向法(method of directions, MOD)算法等.利用构建图像特征集合字典对目标特征信息进行分析对比,可解决目标长期静止时的跟踪问题,并利用实时更新目标模板,最大限度保证模板实时表征目标的各种特性。

    2 基于相关滤波的目标跟踪方法

    基于相关滤波(Correlation Filter )的目标跟踪算法是目标跟踪领域的一大研究热点,为目标跟踪领域带来重大变革。相关滤波源于信号处理领域,相关表示两信号相似性的高低,两信号越接近,相关响应越高。相关滤波跟踪算法就是通过建立一个相关滤波器,来寻找响应值最高的目标位置。2010 年, Bolme等人率先将相关滤波与目标跟踪相结合,提出了 MOSSE 跟踪算法,以其高速的跟踪速度和良好的跟踪性能,极大的促进了目标跟踪领域的发展,下面简要介绍目标跟踪领域发展过程中具有代表性的几种跟踪算法。

    2.1 误差最小平方和滤波器

    将信号处理领域的相关操作引入到目标跟踪领域,即可将跟踪问题描述为寻找视频序列中与初始目标最相似的区域,即计算滤波器 h 与输入图像 f 的相关性,得到响应图 g。计算过程如下图所示。

    为了减少计算量,加快运算速度,引入傅里叶变换,在一张图像上训练得到的滤波器可以精准拟合该图像,但在跟踪时,目标外观会由于快速运动、尺度变化、遮挡等因素发生改变,之前训练得到的滤波器应用于新图像时,往往不能适应目标的变化,导致跟踪失败。因此,滤波器需要能够随着视频序列的进行而自适应的更新。

    2.2 核相关滤波跟踪算法

    2014 年,Henriques 等人提出核相关滤波跟踪算法(Kernelized CorrelationFilters,KCF),对基于灰度特征的 CSK 算法做出改进,引入核函数、循环矩阵、HOG 特征,进一步提高了算法的跟踪性能。下面将对 KCF 跟踪算法的重要环节加以介绍。

            (1)构建训练样本集

    跟踪算法的一大难点在于样本数量过少,传统跟踪算法通常在目标位置周围随机采样获得样本,或者通过对目标做旋转、缩放获得样本。然而这两种方式获得的样本数量十分有限并且冗余度高,无法充分学习到目标信息,会导致跟踪器在后续跟踪时出现较大偏差,影响跟踪性能。

    KCF 跟踪算法创造性的引入循环矩阵,一方面通过目标样本的循环移位操作获得大量训练样本,另一方面,将目标特征的频域空间与岭回归相结合,实现目标特征的快速学习与检测。

            (2)训练分类器

    KCF 框架中训练目标分类器实际上是一个岭回归问题 ,也叫正则化最小二乘问题。目标是通过训练样本集找到最优分类函数,使得样本的预测值与样本真实值之间的平方误差最小,得到的损失目标函数,通过最小二乘法可以获得使上式损失函数最小的最优解。

    对于线性回归问题,可以通过上述步骤计算得到,大大提高计算速度。但在大多数情况下,需要解决的是非线性问题,由此 KCF 算法引入核函数的思想,将训练样本映射到高维空间,使其转化为线性可分问题,那么在高维空间内可以使用岭回归来寻找一个分类器。

            (3)目标快速检测

    在检测阶段,通常会逐个计算候选区域的响应值,选择其中响应值最高的样本作为目标。在 KCF 框架中,预测区域及其循环移位构成了候选样本集,由此可以得到候选样本集的响应值。

    响应值最大说明当前候选样本最接近训练样本,其对应位置即预测的目标位置。此外可以通过离散傅里叶变换对角化,提高计算效率。

            (4)模型更新

    为了使分类器对目标保持较高的辨别力,以应对跟踪过程中出现的各种干扰情况,需要及时更新算法模型,KCF 框架沿用了 MOSSE 的更新策略,在每一帧中更新外观模型与分类器参数,以提高算法的鲁棒性。

    3 基于深度学习的目标跟踪方法

    深度学习作为近年来的热门技术手段,在众多领域都能看到它的身影。深度学习凭借优异的特征建模能力在目标跟踪领域也取得了广泛应用。基于深度学习的目标跟踪大致可分为两类,一类是采用卷积神经网络提取目标特征,然后与其他跟踪方式进行融合来实现目标跟踪。另一类是训练出端到端的神经网络模型,目标跟踪的所有步骤均由神经网络来实现。下面将简要介绍神经网络的基本结构,典型的卷积神经网络模型,孪生神经网络工作原理,以及几种代表性的深度学习跟踪算法。

    3.1 神经网络

    神经网络是受生物神经系统启发而产生的一种数学模型,作为人工智能的底层模型,,神经网络有着许多复杂应用。一个基础的神经网络如下图所示:

    神经网络由输入层、隐藏层、输出层三部分组成,相邻层之间相互连接。其中,输入层负责数据输入,输出层负责数据输出,隐藏层负责一系列的数学运算,目的是为了更好地线性划分不同类型的数据,隐藏层的层数决定了神经网络的深度。

    神经网络中一个非常重要的概念是激活函数,它决定了某个神经元是否被激活,这个神经元接受到的信息是否有用。没有激活函数的神经网络就是一个线性回归模型,无论网络包含多少层,它的输出都是输入的线性组合。而激活函数引入了非线性变换,使得神经网络可以应用到非线性模型中,能够处理更复杂的任务。常用的激活函数有 sigmoid 函数、tanh 函数、ReLU 函数。

    3.2 卷积神经网络

    卷积神经网络(Convolutional Neural Network, CNN)是一种前馈神经网络,最早由 LeCun 提出并应用于手写字体识别上。由于 CNN 不需要预先处理图像,可以直接将原始图像输入到网络中,操作更简洁,因而得到广泛应用,经典的网络结构层出不穷。卷积神经网络包含卷积层、池化层、全连接层以及输出层。一个典型的卷积神经网络结构如下图所示。

    其中,卷积层是 CNN 中最核心的部分,主要功能是特征提取,底层网络能够提取如边缘、轮廓等低级特征,深层网络能够从低级特征中提取更复杂的特征。对二维图像做卷积操作,类似于滑动窗口对图像滤波,因此也把卷积核称为滤波器(filter)。卷积核的选择决定了特征图的质量,图像经由不同的卷积核处理能够得到不同的特征图。卷积核的数量越多,提取到的特征图也越多,但相应的计算复杂度增加,若卷积核的数量太少,则无法提取出输入图像的有效特征。使用卷积核提取图像特征的过程如下图所示。

    池化层,也称降采样层,由卷积层得到的特征图通常维度过高,因此在卷积层后连接一个池化层,用于降低特征维度。池化层的操作方式与卷积层基本相同,常用的池化方式有最大池化和平均池化,如下图所示。最大池化即取滑动窗口所对应区域的最大值作为池化输出,平均池化即取滑动窗口所对应区域的平均值作为池化输出。池化操作不仅可以降低特征维度,减少计算量,而且具备特征不变性,能够保留原始图像中最重要的特征。

    全连接层通常位于卷积神经网络的尾部,与传统的神经网络连接方式一致,主要负责将所有局部特征连接成全局特征,并将输出值传送给分类器。全连接层连接所有特征的方式是将卷积输出的二维特征图转化成一维向量,然后再乘一个权重,权重矩阵是固定的,且应与由特征图生成的一维向量大小一致,这就要求网络输入层图像必须固定尺寸,才能保证传送到全连接层的特征图的大小与全连接层的权重矩阵相匹配。最后将得到的图像特征通过 sigmoid 函数或其他类型的函数映射到输出层,完成分类任务。

    3.3 孪生神经网络

    孪生神经网络是一种包含两个或多个相同子结构的神经网络架构,各子网络共享权重。孪生神经网络的目标是通过多层卷积获取特征图后,比较两个对象的相似程度,在人脸认证、手写字体识别等任务中常被使用。其网络结构如下图所示,两个输入分别进入两个神经网络,将输入映射到新的空间,形成输入在新空间中的表示,通过损失的计算,评价两个输入的相似度。

    此外,该网络的特点是可以充分利用有限的数据进行训练,这一点对目标跟踪来说至关重要,因为在跟踪时能够提供的训练数据与目标检测相比较少。

    若子网络之间不共享权重,则称为伪孪生神经网络。对于伪孪生神经网络,其子网络的结构可以相同,也可不同。与孪生神经网络不同,伪孪生神经网络适用于处理两个输入有一定差别的情况,如验证标题与正文内容是否一致、文字描述与图片内容是否相符等。要根据具体应用进行网络结构的选择。

    3.4 典型的深度学习跟踪算法

    目前,完全基于卷积神经网络的目标跟踪主要有两种方式,一种是采用“离线训练+在线微调”的模式;另一种方式是不采用离线训练,而是通过构建更简洁的卷积神经网络达到在线跟踪的要求。以下选择代表性算法做简要介绍。

            (1)MDNet

    要提升 CNN 在目标跟踪中的表现能力,需要大量训练数据,大多跟踪算法解决训练数据不足的策略是使用辅助的非跟踪数据进行预训练,以获取对目标特征的通用表示,但这一策略与跟踪任务本身存在一定偏离。MDNet 创造性地提出多域网络(Multi-Domain Network),利用跟踪序列进行预训练,在线跟踪时将网络结构微调,MDNet 结构如下图所示。

    MDNet 网络为多域结构,采用来自 VGG-M 的卷积层提取特征,采用全连接层进行分类,这里的分类为二分类,即只区分前景与背景。采用多域结构是为了适应不同的跟踪序列,每个序列都对应一个单独的域,每个域内都有一个针对它的二分类层(fc6)进行分类,该层也称为特定域层。在 fc6 之前的所有层为共享层,会将序列进行共享。这样就实现了通过共享层学习目标的通用特征表达,通过特定域层解决不同序列分类目标不一致的问题。

    MDNet 通过离线训练得到卷积层参数,在线跟踪时,卷积层参数不变,根据第一帧样本新建一个 fc6 层,在跟踪过程中在线微调 fc4-fc6 的参数,以适应目标变化。同时通过难例挖掘重点关注背景中难以划分的样本,减轻跟踪漂移问题,增强网络判别能力。

    MDNet 获得了 VOT2015 竞赛的冠军,但由于跟踪过程中计算量较大,且在线更新全连接层参数耗时,使得 MDNet 即使在 GPU 上也只能达到 1fps,仍有进一步提升的空间。

            (2)FCNT

    大多数基于深度学习的跟踪算法都是先在海量数据上预训练,再传递到跟踪问题上,这些方法在评价基准上能达到 90%以上的精度,但这纯粹是利用了CNN 强大的特征表示能力。Wang 等人提出了基于全卷积网络的目标跟踪算法FCNT,通过分析各个层特征对跟踪的影响,更加合理的选择特征以减少计算量,提升跟踪性能,其跟踪框架如下图所示。

    FCNT 基于 VGG-Net 网络结构,做出了如下贡献:第一,分析了不同层次特征的特点,发现底层特征提供更多的细节信息,可以更好地区分外观相似的目标,而高层特征包含更多语义信息,对区分不同类别鲁棒性更强;第二,发现对目标来说,并非所有特征都对跟踪有用,可能会存在噪声特征,因此提出一种特征选择机制,去除噪声特征,使跟踪更精确。

     在跟踪过程中,对于输入的视频帧,首先利用 VGG-Net 提取 Conv4-3 及Conv5-3 的特征,然后将筛选出的特征分别传送给区分目标与相似背景的 SNet以及捕捉目标类别信息的 GNet。SNet 及 GNet 分别生成两个响应图独立执行目标定位,最终目标位置由检测器进行判定。FCNT 的跟踪精度达到了 85.6%,但跟踪速度仍然达不到实时性要求,仅有 3fps。

            另:一般来说,相比于光流法、KalmanMean shift等传统算法,相关滤波类算法跟踪速度更快,深度学习类方法精度高;具有多特征融合以及深度特征的追踪器在跟踪精度方面的效果更好;使用强大的分类器是实现良好跟踪的基础;尺度的自适应以及模型的更新机制也影响着跟踪的精度。

    附:        ① 生成式模型方法

    生成式模型方法,通过对目标模板进行建模,在当前帧寻找与模型最相似的区域作为目标预测位置。生成模型方法包括卡尔曼滤波 、粒子滤波、mean-shift 、PCA、稀疏编码 、字典学习等。基于生成式模型方法的目标跟踪算法着眼于对目标本身的刻画,忽略背景信息,在目标自身变化剧烈或者被遮挡时易产生漂移。

            ②判别式模型方法

    判别式模型方法,是以当前帧的目标区域为正样本,背景区域为负样本,通过正负样本训练分类器,把训练好的分类器用在下一帧中寻找最优区域,最优区域就是预测区域。与生成模型方法相比,判别模型方法利用背景信息训练分类器,使得分类器具有更强的辨别能力,能够更好区分前景和后景,所以判别模型方法普遍要比生成模型方法好 ,跟踪表现鲁棒性更强,逐渐在目标跟踪领域占主流地位,大部分基于深度学习的目标跟踪算法也归属于判别式模型。其中经典的判别模型方法有TLD(Tracking-learning-detection)和 Struck。

    展开全文
  • 在本教程中,我们将学习使用OpenCV跟踪对象。OpenCV 3.0开始引入跟踪API。我们将学习如何和何时使用OpenCV 4.2中可用的8种不同的跟踪器- BOOSTING, MIL, KCF, TLD, MEDIANFLOW, GOTURN, MOSSE和CSRT。我们还将学习...
  • 目标跟踪的过程: 1、获取对象检测的初始集 2、为每个初始检测创建唯一的ID...这些边界框可以由任何类型的对象检测器(颜色阈值 + 轮廓提取、Haar 级联、HOG + 线性 SVM、SSD、Faster R-CNN 等)生成,前提是它们是针对
  • 图像跟踪--概述

    千次阅读 2021-12-21 22:52:56
    图像跟踪
  • 介绍目标跟踪是计算机视觉领域的一个重要分支,是模式识别,图像处理,计算机视觉,机器学习等学科的交叉研究,有着广泛的应用,如视频监控,虚拟现实,机交互,图像理解,无人驾驶等。目前的目标跟踪的通常任务是...
  • 目标检测跟踪算法综述

    千次阅读 2019-07-09 16:19:22
    在特定的场景中,有一些经典的算法可以实现比较好的目标跟踪效果。本文介绍了一般的目标跟踪算法,对几个常用的算法进行对比,并详细介绍了粒子滤波算法和基于轮廓的目标跟踪算法。最后简单介绍了目标遮挡的处理、多...
  • 机器视觉——目标跟踪

    千次阅读 2022-03-02 21:39:28
    且在军事制导、视频监控、机器人视觉导航、机交互、以及医疗诊断等许多方面有着广泛的应用前景。随着研究人员不断地深入研究,视觉目标跟踪在近十几年里有了突破性的进展,使得视觉跟踪算法不仅仅局限于传统的机器...
  • 目标跟踪

    千次阅读 2019-11-27 19:54:52
    本篇是基于单目标跟踪的论述 目标跟踪概述 1.1 定义: 1,单目标,即在给定的视频中只跟踪一个目标 2,在第一帧中会通过矩形的bounding box将目标给出。给定后,使用tracker找出每一帧的目标。 3,短期 ...
  • AFK(“远离键盘”)你们中的一些将帮助编写观察者,以便我们可以收集更多)。 屏幕截图安装和使用下载可在我们的发布页面上找到。 有关如何开始的说明,请参阅文档中的指南。 有兴趣从源代码构建? 也有一个...
  • 该功能使用的darknet框架,训练的yolo-tiny人头模型,之后使用opencv4.5.1版本调用的yolo-tiny模型,跟踪使用KCF跟踪算法,整体上实现了三个功能: 1、区域内的人头统计; 2、区域内的绊线检测功能; 3、区域...
  • 目标跟踪的过程是: 1.获取对象检测的初始集(例如边界框坐标的输入集) 2.为每个初始检测创建唯一的ID 3.然后跟踪每一个在视频中移动的对象,保持唯一ID的分配 此外,对象跟踪允许我们为每个跟踪对象应用唯一 ID,...
  • SugarCRM 的模块使 SugarCRM 成为一个整体的申请人跟踪系统,负责简历管理的每个垂直领域。 只需 2 个简单步骤即可启动: 1. Install the PMR module in your SugarCRM within no time (Yeah! takes even less than...
  • 单目标跟踪综述

    千次阅读 2022-01-19 01:12:02
    点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达最近看了几篇关于单目标跟踪的paper,为了方便自己梳理脉络同时和大家交流讨论,将一些重要的paper整理在这。 首...
  • 分享 | 无监督视觉目标跟踪

    千次阅读 2021-11-22 18:52:08
    谈谈最近在CVPR2021和ICCV2021上看到的几篇无监督单目标跟踪算法。
  • 运动目标跟踪算法

    万次阅读 多人点赞 2019-02-17 12:53:17
    在特定的场景中,有一些经典的算法可以实现比较好的目标跟踪效果。本文介绍了一般的目标跟踪算法,对几个常用的算法进行对比,并详细介绍了粒子滤波算法和基于轮廓的目标跟踪算法。最后简单介绍了目标遮挡的处理、多...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 181,932
精华内容 72,772
热门标签
关键字:

哪里可以找到跟踪的人