前言

整个项目都是用C语言实现的,算法这块参考了这位大佬的demo,采用粒子滤波的方法,由于能力有限,没有使用K210的KPU模块,所以整体来说,这个项目还有很大的改进空间,后续将继续尝试其他的方法,引入KPU模块,进一步发挥K210的性能。
另外就是,我用的开发板是亚博智能的k210开发板,以及他们提供的SDK,开发环境是VScode+CMake+kendryte-toolchain,具体按照官方给的教程走就是了。

使用方法

demo的具体内容我就不再具体分析,其实主要还是算法部分,这里主要说一下使用方法:

  1. 在屏幕上选中目标,也就是画框,画框不重要,只是一个形式,重要的获取方框的左上角坐标和方框的宽度、高度这些参数。
  2. 选中目标后,按下右上角的keypad键,注意是垂直按下,不是往左/往右拨。
  3. 按下keypad后,程序将跟踪方框目标
  4. 按下板子右下角的Boot键,将取消跟踪
    这里再贴上板子的图片,方便理解。

    使用方法大家可以按照自己的喜好修改。

比较鸡肋的点

文字有点多,还请耐心看完,相信会对你今后的开发有所帮助。
起初在弄目标跟踪的时候(不是用的粒子滤波),经常会出现内存爆掉的情况,一开始我以为是自己代码有问题,然后反复的检查修改,最后检查发现是官方给的关于动态内存分配的方法有问题…按照官方给的iomem.c文件提供的方法,就必须做到用完就要释放,如果你想定义一个全局指针变量指向这块内存,在整个执行程序期间都不释放的话,那么你之后申请的其它内存,将无法正常释放,因为在iomem.c文件里,它只是将我们申请的内存标记为占用,释放操作为取消标记,地址上的数据没有进行任何处理。
在这个文件中,有一个值得关注的指针变量,那就是_ioheap_line,这个指针变量指向的是我们最后一次申请的内存的首地址。举个例子,假设我依次申请了a、b、c三块内存,那么,按照官方给的方法,就必须按照c、b、a的顺序释放内存,这样更新_ioheap_line指针的位置,如果按b、c、a的顺序释放的话,由于_ioheap_line指针指向c的地址,那么在释放的时候,虽然这三块内存成功标记为未使用,但是_ioheap_line没有更新,下一次申请新内存d的时候,该指针将继续指向下一块内存,而之前释放的a、b、c这三块内存,由于在d之前,所以即使标记未未使用,但仍然用不了。如果不断申请的话,最终系统会提示内存爆了,但实际上之前的内存你并没有用上,或者用了,但是指针没更新,_ioheap_line指针会超除堆内存,导致停止运行。
这里加上我注释的代码,方便理解上面的文字
这个是iomem_malloc函数

这个k_free函数,iomem_free就是调用这个函数取消标记内存的

这里我在把我注释的代码文件链接贴出来,感兴趣的可以下载下来
链接:https://pan.baidu.com/s/1F2wW4VSH2HE6TaOFNsbgzQ
提取码:9vt9
注释若有理解错误的地方可以写在评论里,大家一起相互交流学习哈!

解决方案

只能自己设计一个内存池,然后所有程序需要的内存都在这里申请和释放。为了节省时间,当时没有将重心放在设计内存池上面,所以直接参考了现成的方法,代码很容易理解,可以选择BestFit(最佳适应算法)和NextFit(循环首次适应算法)两种分配内存大方法,各有利弊,大家根据自己项目选择合适的方法,当然也可以再添加其它方法,没有限制。
具体实现代码我和项目放在一起了,在mem_malloc文件夹里面。
参考链接

项目demo

整个项目的demo都在这里,如果感兴趣的话可以下载下来,自己实现一下,因为整个代码都是c语言实现的,没有使用OpenCV库函数,移植代码应该不难。

总结

整个项目还有很多值得优化的地方,考虑到时间问题,所以很多地方就没有优化处理。当然这还只是version1.0,后续将采用更高效的方法实现目标跟踪,比如引入KPU,进一步挖掘K210的潜力。
链接:https://pan.baidu.com/s/1SRwkZSM8rtT4C5TH2afnJw
提取码:10o7

K210实现单目标跟踪相关推荐

  1. 352万帧标注图片,1400个视频,亮风台推最大单目标跟踪数据集

    CVPR 2019期间,专注于AR技术,整合软硬件的人工智能公司亮风台公开大规模单目标跟踪高质量数据集LaSOT,包含超过352万帧手工标注的图片和1400个视频,这也是目前为止最大的拥有密集标注的单 ...

  2. python 粒子滤波目标追踪_Python实现基于相关滤波的单目标跟踪算法

    最近在阅读一些单目标跟踪的算法论文,主要看了一系列基于相关滤波的算法,尝试着用python实现了其中一些比较经典的算法,地址在https://github.com/wwdguu/pyCFTracker ...

  3. CVPR 2019 | 亮风台发布全球最大单目标跟踪数据集LaSOT

    点击我爱计算机视觉标星,更快获取CVML新技术 CVPR 2019 正在美国加州举行,发布交流来自全球的工业界与学术界最新研究成果. 会上,亮风台公开大规模单目标跟踪高质量数据集LaSOT,包含超过3 ...

  4. 单目标跟踪——个人笔记

    单目标跟踪--个人笔记 以<Handcrafted and Deep Trackers: A Review of Recent ObjectTracking Approaches>为主线看 ...

  5. 基于嵌入式设备的 单目标跟踪算法

    基于嵌入式设备的单目标跟踪实现 最近基于嵌入式设备(Khadas Vim3)做了一套单目标跟踪算法,跟踪效率可以做到每秒25帧左右. 算法运行耗时记录 time is:37.6241 ms time ...

  6. 视觉单目标跟踪任务概述

      视觉目标跟踪的主要目的是:模仿生理视觉系统的运动感知功能,通过对摄像头捕获到的图像序列进行分析,计算出运动目标在每一帧图像中的位置:然后,根据运动目标相关的特征值,将图像序列中连续帧的同一运动目标 ...

  7. 单目标跟踪SiamMask:特定目标车辆追踪 part2

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) CNN:RCNN.SPPNet.Fast RCNN.Faste ...

  8. 单目标跟踪——【数据集基准】RGB数据集OTB / NFS / TrackingNet / LaSOT / GOT-10k / UAV123 / VOT 简介

    入手单目标跟踪的三个方面之数据集简介 目前单目标跟踪领域有哪些公认比较好的数据集? 这可以从一些优秀论文中找,看他们在验证自己的tracker用到哪些数据集.这些数据集的侧重不一,有的会包含快速移动: ...

  9. 单目标跟踪通过CAM绘制heatmap图像(以SiamCAR为例)

    论文链接: SiamCAR: Siamese Fully Convolutional Classification and Regression for Visual Tracking Group-C ...

最新文章

  1. .gitignore文件如何编写?
  2. C#程序员转android开发
  3. 大学最后一个学期了,感觉没对头。。。
  4. mysql视图_mysql之视图详解
  5. zcmu1710(dp)
  6. 命令行运行vbs脚本并传参数给vbs中的变量简单示例
  7. Linux服务器---安装bind
  8. Fiori as a Service - FaaS - Creation of inline task option is not available
  9. python tts 保存_Python 文件和目录操作学习
  10. python scrapy框架基如何实现多线程_Python实现在线程里运行scrapy的方法
  11. linux查看u盘的分区,在Linux下访问windows分区以及U盘
  12. iOS 数组模型排序
  13. 基于vue-cli的快速开发框架
  14. unix环境高级编程(第三版)-读书笔记1
  15. 计算机中级应用,计算机办公软件应用: 中级
  16. PR剪辑视频画面翻转缩放滑动特效转场PR预设
  17. Visual Studio Ultimate 2013(VS2013旗舰版 下载地址及哈希校验)
  18. AcWing每日一题 1934贝茜放慢脚步
  19. Windows基础 主机加固
  20. 创新创意ssm计算机毕业设计题目300例之java农村电商网站3252s

热门文章

  1. 欧洲杯案例(数据过滤和排序)
  2. 直播预告|【芯咖秀▪第六期】MCU热的前因后果以及未来到底如何发展!
  3. JavaScript - 在函数中修改参数值、用对象实例作为参数传递修改参数
  4. C语言串口编程教程PDF
  5. Lotus Notes常见问题答疑(转)
  6. 淘宝爆款打造,爆款布局公式,店铺标签
  7. 权利的角斗场中 Web3 终将得胜
  8. 洛谷:珠心算测验(P2141)C语言
  9. 微信公共账号推广方法
  10. 模拟黑客思维对网站进行CC压力测试!(二)