您的位置 首页 FPGA

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的使用也越来越广泛

随着嵌入式系统的高速发展 嵌入式机器视觉系统的应用也越来越广泛-嵌入式系统是以应用为中心,以计算机技术为基础,并且软硬件可裁剪,适用于应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。嵌入式机器视觉系统是指用嵌入式计算机处理由光学传感器接收到的图像信息,以实现对物体的检测和识别的装置,如数码相机、手持二维码识别设备,体感交互游戏机等。由于机器视觉系统需要进行大量复杂的数据运算,因此目前大多数的机器视觉系统还是基于PC系统构建,但随着近年来嵌入式系统的高速发展,嵌入式机器视觉系统越来越多地应用于工业检测与控制、智能交通、安防、医疗器械、机器人导航及消费电子等领域。

嵌入式体系是以运用为中心,以核算机技能为根底,而且软硬件可裁剪,适用于运用体系对功用、可靠性、本钱、体积、功耗有严格要求的专用核算机体系。嵌入式机器视觉体系是指用嵌入式核算机处理由光学传感器接收到的图画信息,以完结对物体的检测和辨认的设备,如数码相机、手持二维码辨认设备,体感交互游戏机等。由于机器视觉体系需求进行许多杂乱的数据运算,因而现在大多数的机器视觉体系仍是依据PC体系构建,但跟着近年来嵌入式体系的高速开展,嵌入式机器视觉体系越来越多地运用于工业检测与操控、智能交通、安防、医疗器械、机器人导航及消费电子等范畴。

嵌入式机器视觉体系的功用首要取决于硬件和软件两方面。现在运用于嵌入式机器视觉体系的硬件渠道首要有Intel依据x86架构的Atom渠道、TI依据ARMDSP的OMAP系列渠道、NVIDIA依据ARM—GeForce的Tegra系列渠道、IBM等依据PowerPC的处理渠道等,其间ARM—DSP是一种高性价比的、运用广泛的体系结构。除了硬件渠道之外,嵌入式操作体系的挑选对机器视觉体系的功用也很重要,如开机时刻,体系安稳性等。嵌入式操作体系的品种比较多,其间较为盛行的首要有μC/OS、Windows CE、VxWorks、AndroidiOS、Meego、QNX和Linux等。在许多嵌入式操作体系中,Linux以其内核安稳、支撑多种硬件渠道、彻底免费、源代码彻底敞开、可裁剪定制、易于移植的特性,成为大多数厂家的绝佳挑选。此外,由于嵌入式机器视觉体系具有处理数据量大,算法杂乱的特色,对嵌入式机器视觉运用程序的优化也至关重要。

文中以选用ARM—DSP结构的Beagleboard—xM开发板为例,构建了用于方针检测盯梢的嵌入式机器视觉体系,从操作体系和机器视觉运用程序方面临体系进行优化,并充分运用Cotex—A处理器的NEON加快技能,显着进步了嵌入式机器视觉体系的功用。

1 体系软硬件组成

文中所选用的嵌入式机器视觉体系的硬件组成如图1所示。其间DM3730处理器是由TI出产的单片体系(SoC)处理器,选用了POP(Package on Package)封装技能,内含1G主频的ARM Cortex—A8,主频800 M的TMS320C64+内核和512 M的LPDDR内存。该处理器有较强的多媒体图画、视频处理才干,特别适合于构建嵌入式机器视觉体系。Beagleboard—xM没有Flash,体系是从MicroSD卡发动的。PMIC为电源与音频办理模块,它通过McBSP总线与处理器衔接。摄像头和以太网数据通过USB接口传给处理器,处理器运转方针检测与盯梢程序,并将处理成果送到LCD显现。Minicom用于和上位机进行通讯,便于调试。

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的运用也越来越广泛

图2为体系的软件结构图。在嵌入式Linux内核中包含了对CPU、USB摄像头、电源办理设备及USB以太网等的驱动支撑。其间V4L是Linux内核中关于视频设备的API接口,UVC(USB Video Class)是为USB摄像头供给即插即用功用的驱动模块,在此根底上将开源的跨渠道机器视觉库OpenCV2.2移植到了嵌入式渠道上,并在运用程序中完结对视频信号的收集和处理。

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的运用也越来越广泛

2 嵌入式LinuX操作体系优化

嵌入式体系硬件资源较为有限,作为以运用为中心的专用核算机体系,需求对其在发动速度、实时性、体系尺度、电源办理等方面进行优化。近年来,Linux凭仗其优秀特性广泛地运用于嵌入式体系。可是,作为一种本来为PC机规划的操作体系,规划者开端并没有考虑嵌入式运用对发动速度的要求,导致其典型的发动时刻一般在几十秒或以上,这对用户来说是不能容忍的。此外,跟着Linux内核的不断胀大,发动时刻越来越长。因而,加快发动速度已经成为嵌入式Linux体系亟待解决的要害问题之一。

由于本钱的考虑,Beagleboard—xM渠道没有Flash,它是从MicroSD卡发动的。嵌入式Linux体系发动时序如表1所示。体系上电后,内部ROM程序会从SD卡加载x—loader到SRAM。x—loader担任初始化体系(如时钟、RAM等),并将u—boot从SD卡中加载到RAM。u—boot担任将内核镜像从SD卡加载到RAM中。内核解压并运转,挂载文件体系,履行init进程,登录体系,终究完结体系的发动。编写perl脚本记载串口输出的时刻,开机发动进程各部分耗时如图3所示。在体系发动进程中,内核解压与运转时刻、体系自发动项加载时刻占了整个体系发动的大部分时刻。

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的运用也越来越广泛

本文对嵌入式Linux操作体系采纳的优化战略如下。

1)修正偏重新编译u—boot源码,撤销开机3 s等候时刻

体系会检测在开机等候时刻内用户按钮是否被按下,假如被按下,则能够进行设置体系环境变量,修正发动选项等操作。这儿能够越过这一步,削减开机时刻。

2)裁剪内核中不必要的功用部分

嵌入式Ldnux操作体系内核中除了进程办理、内存办理、使命调度等中心部格外,还供给了多种文件体系、网络、硬件驱动、内核调试等功用模块,但它们并非必不行少,例如手持移动终端一般不需求NTFS等文件体系,也不需求RAID和SCSI设备支撑。所以,依据嵌入式体系运用的详细需求装备Linux内核才干减小Linux内核的静态映像体积,一起也能够相应削减这些功用模块运转时刻的开支。

3)选用“-Os – mthumb”编译选项进行优化以减小内核镜像巨细

-Os是gcc优化选项中最深层次的优化,恰当所以对代码进行了-O2的优化,但不添加代码尺度。-mthumb表明运用16位短指令集,它具有更高的代码密度,即占用存储空间小,仅为32位ARM代码标准的65%,但其功用却下降的很少。

4)去掉内核打印输出

Linux体系发动时,一般运用串口操控台或VGA操控台打印内核发动信息,打印速度取决于串口的速度和处理器的速度,这在大多数嵌入式体系中要用数百毫秒的时刻。

5)用buildroot构建轻量级的根文件体系

常用于构建根文件体系的东西有OE(OpenEmbedded)和buildroot等。OE是分量型的穿插编译体系东西,能够用来构建杂乱的根文件体系,但装备和定制进程难度很大,而且要耗费约20 G的硬盘空间和十几个小时的编译时刻。buildroot则是一个恰当细巧灵敏的穿插编译东西,用它定制和调整软件包十分便利,而且buildroot供给了相似Linux kernel装备选用的装备菜单,易于运用。

6)桌面环境运用X11而非Gnome或KDE

X11即X Window体系,它是一种能够用于Unix和类Unix操作体系的位图显现视窗体系。Gnome和KDE是两种相对杂乱的桌面环境。关于嵌入式机器视觉体系,假如用户界面不寻求富丽,能够运用更为简练的X11,以及简略的桌面办理器twm。

7)禁用或暂缓发动某些发动项

为了加快发动,能够禁用不必要的发动项,乃至一些必要的发动项能够在体系完结登录后再发动。详细能够通过修正/etc/init.d/下自发动项快捷方式称号的办法完结。

$cd/etc/init.d/

$mv S20network K20network

当体系完结开机发动后再发动该项目,能够用如下指令:

$K20network start

如表2所示,通过优化后,内核镜像巨细由3.046 MB减小到2.797 MB,体系的发动时刻(从复位到敞开运用程序)由35.171 s缩短到10.056 s,根本满意实践运用的需求。嵌入式Linux操作体系优化取得了显着的作用。

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的运用也越来越广泛

运用在移动载体上的嵌入式机器视觉体系一般对能耗也有较高的要求。Beagleboard—xM是一款功耗较低的产品,不需求电扇冷却。电源办理首要是由PMIC模块完结的。别的,通过更改体系的显现设置,如屏保时刻、待机时刻等,来下降能耗。

3 运用程序优化

机器视觉体系往往触及许多杂乱的核算,大多选用C/C++等高功率的言语进行开发。嵌入式体系对运用软件的质量要求很高,在嵌入式开发中须留意对代码进行优化,尽可能地进步代码功率。本文从算法、代码功率以及处理器的特性等方面动身,为开发高功率嵌入式机器视觉运用程序供给了些经历。

3.1 挑选适宜的算法

在机器视觉算法优化进程中,速度和内存不行兼得,要想得到较快的运转速度有必要恰当添加内存空间的运用量。例如,在JPG图画有Huffman编码表,从YUV到RGB的改换也有改换表,本文核算梯度方向直方图HOG时需求用到18个方向的三角函数。这些运算本来较杂乱,选用查表的办法之后,尽管占用了内存,但显着进步了运转速度。

3.2 代码功率的优化

代码功率优化的条件是要确保程序成果的正确性,在此根底上对空间杂乱度和时刻杂乱度进行调整,以到达功用的进步。代码功率优化能够选用多种办法。

1)选用较短的数据类型

本文试验中浮点数据类型用float替代double,方针检测成果根本不变,可是运算量和所占用内存空间都相应削减。

2)switch句子优化

关于switch句子,编译器是依照次序进行条件比较,发现匹配时,就跳转到满意条件的句子履行。为了进步速度,能够把发生频率较高的条件放在前面。

3)用指针替代数组

在许多情况下,能够用指针运算替代数组索引,编译后常常能发生又快又短的代码。与数组索引比较,指针一般能使代码速度更快,占用空间更少,这在运用多维数组时差异更显着。

4)用宏函数替代函数

函数和宏函数的差异就在于,宏函数占用许多的空间,而函数占用了时刻。当函数被屡次调用时,会重复进行压栈和弹栈操作,然后耗费一些额定的时刻。运用宏函数不会发生函数调用,所以只是占用了空间,不会添加额定的运转时刻。

5)循环优化:选用循环兼并与循环打开

当两个循环的负荷都不满时,能够把它们兼并在一起组成一个循环。循环打开便是把循环计数小的循环打开,成为非循环方式的串行程序,或许把循环计数大的循环部分打开,削减循环迭代次数,这样能够节约用于循环设置、初始化、添加和校正循环计数器的时刻。

6)选用Inline函数

在C++中,当函数前加要害字Inline的声明,编译器会用函数内部的代码替换一切对该函数的调用。这样能够省去调用函数指令需求的履行时刻以及传递变元和传递进程需求的时刻。一般,这种优化在Inline函数被频频调用而且只包含较短代码的时分最有用。

7)运用增量和减量操作符

在用到自增和白减运算时应尽量运用增量和减量操作符,由于增量符句子比赋值句子更快。

3.3 充分运用处理器特性进行加快

ARM+DSP的组合在嵌入式开发中可谓抱负架构。DSP可专门用于处理密集型信号处理需求、杂乱的数学函数以及图画处理算法,而ARM则可用于完结图形用户界面、网络衔接及体系操控等。上面的代码优化办法是通用的办法,假如针对处理器的特性对程序进行优化,能够得到更好的优化作用。

1)运用开发东西对DSP程序进行优化

有许多算法在DSP渠道能够完结,在ARM上也能够,但有些特定算法,如滤波、视频编解码等放在DSP上运转的功率较高。以往的开发中对DSP程序的优化更多是汇编程序的优化,但用汇编言语做开发和优化往往费时又吃力。可是跟着开发东西的更新,现在的C代码优化功率可到达手艺汇编的90%。TI供给的C6EZRUN东西能够使开发人员能在DSP上运转ARM代码,而无需修正,而且从ARM到DSP代码的转化功率十分高。TI的另一个开发东西C6EZAccel则供给了一个包含数百个DSP优化型信号处理算法的程序库,通过ARM API加快开发进度。开发人员能够将更多的精力投入到算法规划中。

2)充分运用ARM处理器的NEON技能进行加快

ARM高档单指令多数据(SIMD)扩展亦称NEON技能,它是一种由ARM开发的64/128位混合SIMD体系结构,能够进步多媒体和信号处理运用程序的功用。其要害功用包含对齐和未对齐数据拜访,支撑整型定点和单精度浮点数据类型、与ARM中心的严密耦合,以及具有多个视图的大型寄存器文件。NEON指令在ARM和Thumb-2中都可用。要生成NEON指令,有必要在指令行中指定选用NEON技能的Cortex处理器。ARMv7之前的体系结构不供给NEON支撑。假如要对进行优化,需求添加编译选项“-mcpu=cortex-a8-mfpu=neon”。

3.4 运用程序优化成果

在嵌入式实时程序规划时能够运用上面介绍的一种或多种办法来优化代码。以上办法首要是为了进步代码的履行功率,但会添加代码长度,下降可读性。在嵌入式程序规划中应合理地运用这几种技能以到达较好的优化作用。

运用上述办法,对依据HOG特征的物体检测算法进行优化,运转时刻如图3所示。该算法是现在公认的准确率最高的方针检测算法。对轿车、大巴、自行车、行人的检测成果如图4所示。考虑到该算法的杂乱性以及检测精度的要求,咱们选用的是浮点数优化。成果表明,通过优化后程序运转速度约为本来的2.5倍。

跟着嵌入式体系的高速开展 嵌入式机器视觉体系的运用也越来越广泛

4 结束语

跟着嵌入式体系的高速开展,嵌入式机器视觉体系的运用也越来越广泛。怎么把运算量大、算法杂乱的机器视觉运用程序移植到嵌入式渠道上并进行优化规划是重要的课题。本文针对嵌入式机器视觉体系的特色,在操作体系方面临内核和文件体系进行了精简,在运用程序方面做了许多的优化,并充分运用Cotex—A处理器的NEON加快技能,显着进步了嵌入式机器视觉体系的功用,对嵌入式机器视觉体系的开发具有学习含义。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/fpga/99001.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部