将跟踪算法fDSST移植到Nanopi中

        将跟踪算法fDSST移植到Nanopi中

  fDSST跟踪算法在pc上速度大概为30ms,有着较好的尺度变化适应能力。之前我写的算法尺度变化

方面性能较差,我想将算法移植到nanopi中,测试一下其跟踪速度,看其是否有可能在嵌入式平台中实

时运行跟踪算法(25HZ)。这是我第一次将算法移植到嵌入式平台,移植过程中出了很多问题,通过此

博客将问题进行整理记录,若有不对的地方希望大家能批评指正。

  移植过程主要分为三步:跟踪算法的准备,makefile的编写,可执行文件的生成。

1. 跟踪算法准备

  从github上下载了一个开源的fdsst跟踪算法,将主函数进行了修改,增加了画框函数、最小面积判

断、改写算法等使之能循环起来。其余部分均从github上下载,并且暂时没有进行修改。

  在移植过程中,arm指令集加速的头文件SSE2NEON.h缺少函数,所以我从jratcliff63367/sse2neon

下载了项目,更换了fDSST中的SSE2NEON.h头文件

  一共准备了一下几个文件:

在这里插入图片描述
  Pc上fDSST的跟踪效果:
在这里插入图片描述

2. makefile文件的编写

  生成linux可以使用的可执行文件的过程为:源文件-> .o文件,再由.o文件->可执行文件 。Makefile

主要有三大块内容:链接库的链接,cpp文件的编译,可执行文件的链接。

  “首先要把源文件编译成中间代码文件,在Windows下也就是 .obj 文件,UNIX下是 .o 文件,即

Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作

叫作链接(link)

  编译时,编译器需要的是语法的正确,函数与变量的声明的正确。对于后者,通常是让我们告诉编

译器头文件的所在位置(头文件中放声明,而定义放在C/C++文件中),只要所有的语法正确,编译器

就可以编译出中间目标文件。一般来说,每个源文件都应该对应于一个中间目标文件(.O文件或是OBJ

文件)。

  链接时,主要是链接函数和全局变量,所以,我们可以使用这些中间目标文件(.O文件或.OBJ

文件)来链接我们的应用程序。链接器并不管函数所在的源文件,只管函数的中间目标文件。在大多数

时候,由于源文件太多,编译生成的中间目标文件太多,而在链接时需要明显地指出中间目标文件名,

这对于编译很不方便,所以,我们要给中间目标文件打个包,在Windows下这种包叫“库文件”(Library

File),也就是 .lib 文件,在Linux下,是Archive File,也就是 .a 文件”。

引用自(跟我一起写 Makefile

2.1 编译的书写方法:

将.cpp或者.c文件编写为.o文件

main.o: main.cpp
g++  -c  main.cpp  -o  main.o 

2.2 链接的书写方法:

  将生成的.o文件与依赖共同生成linux可以使用的可执行文件.

  Csdn有众多makefile的博客,makefile编写 讲了makefile的基础写法以及省略写法。经过众多版本

的测试后,最终在使用opencv第三方库的makefile文件示例的makefile上进行一定的修改,最终生成了可

执行文件。

INCLUDE = $(shell pkg-config --cflags opencv)  #opencv的include头文件路径
LIBS = $(shell pkg-config --libs opencv) -lm     #opencv的lib库文件路径
#OTHERLIB= -lxxx #其他依赖库
SOURCES = fdssttracker.cpp fhog.cpp main.cpp  #源文件
# 目标文件
OBJECTS =main.o fdssttracker.o fhog.o   #先生成目标文件.o
# 可执行文件
TARGET =Demo #生成的可执行文件名称
$(TARGET):$(OBJECTS)    #可执行文件的链接
	g++ -fopenmp -o $(TARGET) $(OBJECTS) -I $(INCLUDE) $(LIBS) $(OTHERLIB) -std=c++11
$(OBJECTS):$(SOURCES)		#.o文件的生成
	g++ -fopenmp -c $(SOURCES) -std=c++11
clean:
	rm $(OBJECTS) $(TARGET)

3. 实际操作及调试

3.1 使用finalshell连接上nanopi,新建文件夹mkdir fdsst
在这里插入图片描述

3.2 将程序放入fdsst文件夹,输入cd进入fdsst文件夹

在这里插入图片描述
3.3makefile编写时出现的问题

①头文件应为为#include<opencv2/core/core.hpp>

  注意为‘/’不是’\’,否则会报以下错误。

在这里插入图片描述
② 报错“sse.hpp:8:64: fatal error: emmintrin.h: No such file or directory”

  #include <emmintrin.h> 此头文件为windows下的指令集优化,在arm中无法使用,将指令集更换为

arm下的指令集优化(#include<sse2neon.h>)即可。

③ 报错sse2neon缺少函数

   github上下载了新的sse2neon.h头文件,替换后头文件改为小写sse2neon.h即可

3.4 可执行文件make生成

   输入make对工程进行编译,生成Demo可执行文件。

在这里插入图片描述

3.5 可执行文件运行

   由于需要有图像显示,所以在finalshell中使用远程桌面,cd进入文件夹,输入./Demo运行

可执行文件。至此,跟踪算法移植成功,但是速度较慢,耗时为70ms左右,后期将针对速度对跟踪算法

进行优化,使其能在嵌入式平台中实时运行。

在这里插入图片描述

  • 5
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
判别尺度空间跟踪算法FDSST)是一种用于目标跟踪的基于尺度自适应的算法。该算法通过在多个尺度上跟踪目标,有效解决目标在不同尺度下的形变和尺寸变化的问题。 FDSST算法的基本思想是将目标区域表示为分数行和分数列的形式,并利用傅里叶变换来提取特征。首先,在初始帧通过人工选择或自动检测的方式标定目标区域,并利用傅里叶变换将目标区域的分数行和分数列进行提取。然后,通过将目标区域的分数行和分数列与候选区域的分数行和分数列进行相关性比较,得到候选区域与目标区域的相似度得分。根据相似度得分,选择得分最高的候选区域作为当前帧的目标区域。 为了适应尺度的变化,FDSST算法利用尺度空间模型对目标进行跟踪。该模型通过将目标区域在不同尺度下进行采样,生成尺度空间响应图。然后,通过将尺度空间响应图与候选区域的分数行和分数列进行相关性比较,得到候选区域在不同尺度下的相似度得分。最后,根据不同尺度下的相似度得分,选择得分最高的尺度作为当前帧的目标尺度。 FDSST算法的优点是能够自适应地跟踪目标在不同尺度下的形变和尺寸变化,提高了目标跟踪的准确性和鲁棒性。此外,该算法还具有较快的运行速度,适用于实时的目标跟踪应用。 总之,判别尺度空间跟踪算法是一种用于目标跟踪的基于尺度自适应的算法,通过在多个尺度上跟踪目标,有效解决目标在不同尺度下的形变和尺寸变化的问题。该算法具有较快的运行速度和较高的跟踪准确性,适用于实时的目标跟踪应用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值