APP下载

基于Zynq与Qt的视频采集与图像边缘检测系统*

2019-03-08宁效龙何子力张昕昱徐景宏刘文

网络安全与数据管理 2019年2期
关键词:图像处理嵌入式边缘

宁效龙,何子力,张昕昱,徐景宏,刘文

(1.中国科学技术大学 微电子学院,安徽 合肥 230026;2.中国科学技术大学 物理学院,安徽 合肥 230026)

0 引言

目前大多数人工智能应用主要依靠的是云计算技术,然而基于云计算技术的人工智能由于需要与云端的服务器进行信息交互,而且对数据的处理与推断基本上都是依赖云端的服务器,因此在实时性与安全性方面有着先天的不足[1-2]。而某些特定场景下的人工智能应用(如自动驾驶、机器人、智能家居等)又对实时性与安全性有着较高的要求[3],基于云计算技术的人工智能显然不能很好地满足这一要求。为了解决这一问题,一种基于边缘计算与嵌入式技术的人工智能概念被提了出来,即将数据的处理与决策放到嵌入式终端去执行,以此获得更好的实时性与隐私性[4]。

人工智能与图像处理技术密不可分,无论是在自动驾驶、智能安防还是智慧医疗领域,人工智能若想大展身手,必定都离不开图像处理技术。现有的应用于图像处理领域的嵌入式处理器主要包括ARM、FPGA、DSP以及GPU,而以单一种类处理器为平台的嵌入式图像处理方法已经无法满足边缘人工智能中高速、低延时、数据吞吐量大的要求[5],因此需要用一款集成多种处理器优点的嵌入式平台来开展相关的研究。Xilinx公司推出的Zynq系列可扩展处理平台完美地解决了上述问题,该系列器件配备ARM Cortex-A9处理器与Artix-7 FPGA芯片,集成了ARM处理器的软件可编程性与FPGA的硬件可编程性,不仅可实现重要分析与硬件加速,同时还在单个器件上高度集成CPU、DSP以及混合信号功能。因此,本文决定使用该芯片进行边缘图像处理技术方面的探索。

1 边缘检测算法与相应IP核的实现

边缘检测是图像处理与机器视觉中的重要技术之一[6],其目的是检测识别出图像中亮度变化剧烈的像素点构成的集合。使用边缘检测技术可以大大减少源图像的数据量,提取出源图像中有用的信息,并保留图像的重要结构。边缘检测算法大致可以分为两类:基于一阶差分的方法和基于二阶差分的方法[7]。一阶差分方法通过计算图像的梯度值来检测图像边缘,二阶差分方法通过寻求二阶导数中的过零点来检测边缘。

1.1 Sobel边缘检测算法

Sobel边缘检测算子是应用最广泛的一阶差分算子之一,其最早于1968年由SOBEL I所提出[8]。对于一幅数字图像f(x,y),在像素(x,y)处的梯度可定义为向量

(1)

式中,Gx(x,y)与Gy(x,y)分别表示沿x与y方向上的梯度分量。

在边缘检测中,梯度的幅值相较于方向更为重要,梯度幅值可用下式来表示:

(2)

由式(1)可以看出,数字图像梯度的计算需要在每一个像素位置计算两个方向的一阶差分,这一操作可以通过将Sobel算子与源图像进行卷积来实现。图1(a)和(b)分别是Sobel算子大小为3×3的水平卷积核与垂直卷积核。

图1 Sobel边缘检测算子

图像f(x,y)中任一像素点(x,y)的水平梯度分量Gx(x,y)和垂直梯度分量Gy(x,y)可以按下式计算:

Gx(x,y)=f(x+1,y-1)+2×f(x+1,y)+f(x+1,y+1)-f(x-1,y-1)-2×f(x-1,y)-f(x-1,y+1)

(3)

Gy(x,y)=f(x-1,y+1)+2×f(x,y+1)+f(x+1,y+1)-f(x-1,y-1)-2×f(x,y-1)-f(x+1,y-1)

(4)

1.2 基于Vivado HLS的Sobel边缘检测IP核的设计

Vivado HLS是Xilinx公司推出的一款高层次综合工具,使用该工具可以实现直接使用C、C++以及System C语言规范对Xilinx系列FPGA进行编程,无需手动创建RTL,从而可加速IP创建[9]。

本文中使用Vivado HLS工具设计并实现了Sobel边缘检测IP核。IP核的工作流程如下:

(1)对输入的格式为AXI_STREAMD的视频流进行格式转换,转换为Mat类型图像数据;

(2)将图像数据中的每个像素点与Sobel算子进行卷积,得到边缘检测的图像;

(3)将得到的边缘检测图像进行二值化处理,使得图像中的边缘信息更加明显;

(4)将处理后的图像数据再转换为AXI_STREAMD视频流格式进行输出。

该IP核对图像的处理流程如图2所示。

图2 Sobel边缘检测IP核工作流程图

该IP核所占用的资源情况如表1所示。

表1 Sobel边缘检测IP核片内资源使用情况

使用图3对该IP核进行测试,并与软件方法实现的Sobel边缘检测进行比较,如图4所示。可以看出两种方法实现的Sobel边缘检测几乎都能很好地检测出物体的边缘情况,功能上没有显著的差异。

图3 Sobel边缘检测测试用图片

图4 基于软件与硬件方法实现的Sobel边缘检测比较

图5 系统硬件组成

2 系统硬件组成

图5大致描述了系统的硬件组成结构。

(1)图像采集模块。该部分由一个摄像头及其读写电路组成,摄像头的输出格式为YUV422,分辨率为640×480。

(2)视频复制模块。该部分由一个视频复制IP核及其控制电路组成,其输入端为摄像头采集到的视频数据,输出端为两路(A路和B路)完全相同的输入端视频数据的复制,其目的是将输入的视频数据进行复制,并得到两路完全相同的视频数据以供后面的图像处理使用。

(3)硬件Sobel边缘检测模块。该部分由Sobel边缘检测IP核及其控制电路组成,其对由B路输入的视频数据进行硬件Sobel边缘检测操作,并将处理完毕的数据输出。

(4)缓存模块。该部分使用视频直接内存访问(Video Direct Memory Access,VDMA)工具,通过AXI_HP接口将两路视频数据直接搬移到外部DDR3存储中进行缓存,以供PS端的ARM主控芯片对视频数据进行处理。

(5)软件Sobel边缘检测模块。该部分功能有PS端的ARM处理器实现,ARM处理器使用OpenCV库自带的Sobel边缘检测函数对A路视频数据进行Sobel边缘检测,并将处理完毕的数据再存储到DDR中。

(6)图像显示模块。该部分由HDMI输出端以及相应的输出时序控制模块组成,HDMI的输出时序控制由自带IP核VTC(Video Timing Controller)实现。

系统的工作流程主要如下:

由摄像头采集到的视频数据首先通过视频复制IP核处理生成完全相同的两路视频数据,一路(A路)视频数据直接经过AXI_HP接口写入DDR系统内存目录的缓冲区,另一路(B路)视频数据经过Sobel边缘检测IP核处理后再经过AXI_HP接口写入DDR系统内存目录的缓冲区。位于PS部分的ARM处理器利用OpenCV自带Sobel边缘检测函数对A路视频数据进行Sobel边缘检测处理,对B路视频则不做处理。经过处理后的两路视频数据再通过AXI_HP接口被传输到HDMI显示端进行输出,进而输出在显示屏上。

3 系统软件实现

3.1 基于PetaLinux工具的嵌入式Linux系统的搭建

PetaLinux是一款专为Xilinx SoC设备设计的嵌入式Linux系统开发工具。与以往通用的嵌入式Linux系统搭建方法相比,使用Petalinux工具为Xilinx SoC设备创建Linux系统可以大大减少开发时间以及避免繁琐的操作,同时更方便在后期对Linux应用程序的移植与拓展。

PetaLinux的开发流程主要包括以下几个步骤:

(1)创建PetaLinux工程。

(2)配置硬件信息。

(3)配置设备树文件。

(4)配置内核文件。

(5)配置文件系统。

(6)配置Uboot启动文件。

(7)生成Boot.bin与images.ub文件并复制到启动SD卡中。

3.2 基于Qt的Zynq可视化操作系统的搭建

Qt是一个跨平台C++ 图形用户界面应用程序开发框架,使用Qt开发的软件,相同的代码可以在任何支持的平台上编译与执行[10]。同时Qt支持的平台非常丰富,几乎涵盖所用常用的操作系统,包括Windows、UNIX、LINUX、Mac OS以及各类嵌入式平台。为了实现对Zynq的可视化操控,且基于Qt的这些便捷特性,考虑使用Qt 5.6.2工具作为开发板的控制系统。

首先,需要在PC Ubuntu环境下搭建Qt开发环境。可以从Qt官网上下载适用于x64 Linux系统的Qt IDE安装包,并进行安装。安装结束后便可以进行Qt应用程序的开发,需要注意的是为了能够编译出可以在Zynq开发板上运行的Qt程序,需要选择适配于Zynq开发板运行环境的qmake编译器。要想实现在Zynq开发板上运行编译好的Qt程序,还需要为开发板建立Qt运行环境。

4 系统测试

将使用PetaLinux工具生成的Uboot文件与image.ub文件拷贝到SD卡中,并将Zynq与PC端的串口相连接,同时将Zynq端的HDMI接口连接到外部显示器。打开超级终端工具(Hyper Terminal)并选择正确的串口号,给Zynq上电后便可以进入Zynq的Linux终端界面。然后,便可以在Zynq上运行已经在PC端编译好的测试程序。

采取两种不同的场景进行测试,测试图片如图6所示,Zynq通过摄像头(型号为OV5640)获取测试图片。两次测试的结果分别如图7(a)和(b)所示,其中Software(软件)指的是在ARM处理器上由OpenCV自带函数处理的结果,Hardware(硬件)指的是由边缘检测IP核处理的结果。

图6 测试用图

图7 系统测试结果

由图7(a)和(b)可以得出硬件与软件两种Sobel边缘检测方法的耗时情况,如表2所示。

表2 软硬件Sobel边缘检测耗时比较

由表2可以看出,所构造的Sobel边缘检测IP核比ARM处理器上基于OpenCV的软件Sobel边缘检测速度快了6倍多,在达到相同的图像处理效果的同时,极大地缩减了嵌入式系统的耗时。这说明基于Zynq的硬件图像处理方法可以有效加速在嵌入式ARM上的图像处理操作,这为嵌入式实时图像处理以及边缘人工智能提供了一个可行的方案。

5 结论

本文设计并实现了一套基于Zynq与Qt的嵌入式视频采集与边缘检测系统,在该系统中设计了一个基于Zynq PL部分的硬件Sobel边缘检测IP核,并将该硬件Sobel边缘检测方法的效果和耗时与基于Zynq PS端实现的软件Sobel边缘检测进行了比较。结果表明,基于Zynq硬件Sobel边缘检测IP核实现的图像边缘检测在效果上与软件Sobel边缘检测方法十分接近,但在耗时上却减少到后者的1/6,极大地缩减了图像处理的耗时,使得基于嵌入式系统的图像处理实时性得到了很大程度的提升。

综上,本文中所设计与实现的嵌入式边缘检测系统,充分证明了基于FPGA的硬件加速可以显著降低图像数据的处理耗时,这为边缘人工智能中边缘终端数据处理量大以及耗时长的问题提供了一个新的解决思路。该设计方案可以应用于诸如自动驾驶汽车、机器人以及智能监控等边缘人工智能场景,在减少嵌入式终端系统运行耗时、增强系统运行可靠性的同时,也极大地提高了数据的隐私性。

猜你喜欢

图像处理嵌入式边缘
海战场侦察图像处理技术图谱及应用展望
人工智能辅助冠状动脉CTA图像处理和诊断的研究进展
Focal&Naim同框发布1000系列嵌入式扬声器及全新Uniti Atmos流媒体一体机
基于ARM嵌入式的关于图像处理的交通信号灯识别
基于图像处理的废有色金属自动分选算法研究
TS系列红外传感器在嵌入式控制系统中的应用
一张图看懂边缘计算
在边缘寻找自我
走在边缘
边缘艺术