基于AM5728的嵌入式图像处理系统
2023-06-09霍凌峰
霍凌峰
(河北工程大学,河北邯郸,056000)
0 引言
嵌入式数字图像处理系统不仅计算性能不断提高,而且功能也越发完备丰富[1]。在当前国内外的各个研究领域中,嵌入式数字图像处理均具有广泛的应用场景。现今大多数的数字图像处理系统基本上都是通过计算机、图像采集卡和相应的图像处理件来实现,它的性能受到多方面的影响如计算机总线工艺的制约,CPU的体系架构的制约,印刷电路工艺的的制约等[2]。
根据嵌入式系统的功能需求以及嵌入式系统的性能需求,创龙科技使用双核ARMCortex-A15 处理器和浮点双核DSP 处理器进行集成,构成了AM5728 芯片。本文采用AM5728 芯片作为开发平台,ARM 处理器负责图像的采集与显示,DSP处理器完成图像的算法处理.该系统通过GStreamerAPI 连接各组件,拥有较高的计算性能,同时具有兼容性强,稳定性高的特点,同时在功能扩展上具有充足的灵活性。
1 系统硬件结构设计
系统硬件结构如图1所示,ARM 处理器接收USB 摄像头传输的图像数据,通过GStreamerAPI 同时传输到LCD显示屏和IVA-HD 处理器,IVA-HD 处理器将图像编解码处理后,系统通过OpenCL 调用DSP 对图像进行算法处理[3]。处理好的图像经ARM 处理器直接在HDMI 显示屏上显示。通过以上过程,图像数据既可在LCD 显示屏上直接显示,又可同时在系统算法处理完成后在HDMI 显示屏上显示,同时DSP 作为图像算法处理的专用处理器,提高了图像处理的速度和精度。本文所设计的视频采集、编解码、算法处理、显示以及存储等功能都基于GStreamer的使用才得以实现。Gstreamer 是一个多媒体框架,其可以在Windows操作系统或Linux 操作系统上跨平台使用,多媒体处理的各个步骤需要被该框架通过应用程序以管道(Pipeline)这种方式串联起来,进而达到我们想要的效果[4]。串联的各个步骤通过插件的方式来实现,这样一来,Gstreamer的应用打打提高了各项功能呢的扩展性。我们所使用的TL-5728 与GStreamer 所搭建的视频编解码框架具有清晰地结构及灵活的可扩展性能。目前在嵌入式系统中,视频的编解码通常是由处理器内的DSP 处理器来协助完成的,相比于传统的软解码,这种方法在编解码速度和性能上都有了极大地提升,但是由于DSP的运行特点,它在编解码过程中会占用过多的片上通信带宽,这就使得核间通信效率降低[5]。所以在本系统中,我们选择的AM5728 处理器集成了IVA-HD 多媒体硬编解码加速引擎,在该引擎内部有七个针对不同编解码格式的不同引擎,同时,每个引擎都拥有单独的数据存储器。
图1 系统硬件结构示意图
2 嵌入式开发及运行环境
在开发计算机程序时,不管是编写还是编译和调试软件,都可以在计算机上直接完成,包括最终的程序也可以直接在计算机上运行。与计算机程序开发不同的是,对于嵌入式开发来说,我们一开始的嵌入式设备的系统是空白的,我们需要在主机上为系统构建基本的软件系统,并将编写好的软件烧写到设备中。除此之外,由于嵌入式设备的高集成性,其本身具备的资源不能够用来开发软件,因此我们需要通过交叉开发模式来完成软件的开发,既编辑和编译软件在主机上完成,程序的运行和测试在目标机上完成。因此我们在嵌入式的开发过程中,不仅需要一块功能齐全的开发板,同时也需要有一个PC 主机。
通常来说,嵌入式系统由四个部分组成,分别为引导加载程序,系统内核文件,根文件系统和应用程序。系统的启动过程需要通过上述四个部分来完成。首先是引导加载程序的执行,以此对CPU 和其外部设备进行初始化处理,接着系统内核文件被调用使系统完成初始化过程,然后根文件系统会被挂载到内核上,这个系统负责的是一些必要模块的加载活动,最后自启动应用程序会运行。
■2.1 虚拟机
虚拟机顾名思义是一台虚拟的计算机,其中的虚拟系统指的是通过虚拟机软件在实际的计算机中,借用实际计算机的硬件资源,模拟出一台具有完整硬件功能的虚拟计算机。该虚拟计算机系统相对于实际的计算机系统来说是完全独立的。通过虚拟机软件,可在一台现有的物理计算机上模拟出另一台或多台虚拟的计算机。用户可在同一台计算机上安装多个 Linux 或 Windows 发行版,提高工作效率。
本论文安装的虚拟机软件 VMware 版本为 14.1.1。适用安装环境:Windows 7 64bit、Windows 10 64bit。
■2.2 Linux
经过筛选,我选择了Ubuntu4.04.03,让其成为我进行嵌入式开发的主机系统。Ubuntu 现今常用的嵌入式开发主机系统,它是基于Linux的一种开源桌面操作系统,该操作系统具有在Linux 环境下常用的软件工具,其特点在于使用便捷,面向对象界面友好等特点。我们经常需要安装多种多样的开发工具以便在Linux 环境下完成嵌入式开发,而Ubuntu 具有丰富的软件库,同时开发工具的安装也相对简单,因此,对于嵌入式开发环境的搭建来说也比较简单快捷。在设计系统时,软件设计是最复杂,最主要也是最费时的,同时软件设计也直接影响到整个系统的正常运行。根据之前的分析,我们需要的软件操作系统在图形用户界面应当友好,并且需要具有稳定性、安全性、高效性、简单操作性、强移植性等特点。
嵌入式系统主要分为嵌入式 Linux和嵌入式专用系统两类。根据对比我选择了嵌入式Linux 系统来完成本文系统的开发。综上所述,本文选择了Ubuntu 作为该嵌入式系统的操作系统。Ubuntu 是基于GNOME 桌面环境的Linux 操作系统,具有开源性。它在桌面应用的普及上具有巨大的贡献。对于普通的Linux 系统来说,Ubuntu的系统具有较高的易用性,在提高开发效率的同时又极大地方便了用户的操作。
■2.3 交叉编译工具
由于嵌入式系统的硬件资源受限,常常需要在PC 平台上建立交叉编译环境。针对 AM5728的开发设计,本文采用TL 提供的交叉编译工具链,该交叉编译工具的版本为gcc-6.2.1。在嵌入式系统中可执行的二进制文件需要由源文件转变过来,而这个转变需要经历编译、链接和重定位这三个过程。本文系统开发过程中使用gcc 编译器来完成上述转变过程。gcc 编译器是由GNU 推出的多平台编译器,其功能强大且可以将 C 语言、汇编语言程序以及目标程序编译链接成可执行文件。根据本文使用的硬件平台,系统的交叉编译工具链为arm-linux-gcc-6.2.1。
■2.4 系统调试工具
SecureCRT 是一款终端仿真程序,其不仅支持SSH 协议,同时也支持Telnet 和rlogin 协议,是在windows 系统下登录unix的软件,同时也可登录Linux 服务器主机。SecureCRT 是一款理想的系统调试工具软件。通过该软件,我们可以通过串口或者网口链接主机系统和嵌入式系统,可以传输加密文件,既可在命令行中运行也可在浏览器中运行,其具有应用性强,实用性强等特点。
在本论文中,我们主要通过SecureCRT 调试工具通过串口来对评估板系统信息进行查看,对评估板系统进行调试等。
3 系统程序流程
系统程序流程如图2所示,ARM 处理器接收到USB 摄像头采集到的图像,接收完毕后,将图像分别传输到LCD显示屏和IVA-HD 处理器。IVA-HD 处理器包含一套图像的编解码算法,将接收到的图像进行编解码处理,处理完后的图像去除了内部的时间冗余和空间冗余信息,提高了系统的传输运算效率。编解码完成后图像储存并等待下一步处理。系统通过OpenCL 调用DSP 处理器读取上述存储的图像,DSP 调用设置好的算法对图像进行算法处理,处理完成后将图像返回给ARM端。ARM 处理器接收到上述返回的图像后,将图像发送到HDMI 显示屏显示。经过测试,该系统程序在运行过程中可以实现ARM端和DSP端的并行处理,大大提高了系统的处理速度和精确度。
图2 系统程序流程图
图3 实物图
图4 GStreame 管道示意图
4 图像采集,显示与算法处理
■4.1 图像的采集与显示
系 统 使 用GStreamerAPI 创 建Pipeline, 并 使 用v4l2src、vpe(视频处理引擎)、 ducatih264enc(H.264编 码 器)、tee、udpsink、kmssink( 基 于 KMS/DRM的视频接收器)、filesink 等插件链接到Pipeline,实现ARM端从V4L2 视频设备节点获取YUV 视频流、视频显示、调用IVA-HD 进行H.264 视频硬件编码、视频保存、通过UDP网络传输视频等功能。
本系统支持display、save、dis-save 和udp 四种功能模式,具体说明如下:
(1)display:视频采集、显示。(2)save:视频采集后,进行H.264 编码并保存。(3)dis-save:视频采集、显示后,进行H.264 编码并保存。(4)udp:视频采集后,进行H.264编码并通过UDP 网络传输到接收端进行解码与显示。
■4.2 图像的算法处理
系统使用GStreamerAPI 通过ARM端从USB 摄像头获取MJPEG 格式视频流,并调用IVA-HD 将视频硬件解码为NV12 格式,然后通过OpenCL 调用DSP端对NV12 格式图像进行Sobel(边缘检测)算法处理,再将经过处理的图像在显示屏中实时显示,同时每隔1s 将最新的原始图像以及经过处理的图像保存到本地存储文件中。
Sobel 算法是边缘检测的一阶算法,是一个离散性差分算子,它的用处是用于对图像亮度函数的近似值的运算[6]。对图像的任何一点使用Sobel 算子,就会得到该点对应的灰度矢量或法向量。Sobel 算子由2 组3×3的矩阵构成,分别为横向及纵向,将两个矩阵分别与图像作平面卷积运算,就可分别得出横向和纵向的亮度差分近似值[7]。如果以A 代表原始图像,Gx 及Gy 分别代表经横向及纵向边缘检测的图像灰度值,如式(1)、(2)所示。
在得到G的数值后就可以进行阈值的比较,就是将定好的阈值与计算得到的定值进行比较,梯度G 大于阈值的点就可以认为该点为边缘点,同时将该点的值置为255,否则为置为0[8]。在中心像素梯度的计算过程中,与中心邻近的像素点有更大的权值[9]。Sobel 算子既有边缘检测的功能又具有一定的平滑和降噪效果[10]。
5 系统测试与验证
为了验证系统的稳定性与实时性,论文分别做了图像采集、显示与处理的功能测试以及时延测试。图5(a)为采集到的原始图像,图5(b)为经过边缘检测处理后的图像。使用模块采集PC 机显示屏的在线秒表图像,经过AM5728 处理后再将图像进行显示。PC 机显示画面与评估板显示画面的时间差,即为时延。进行多次测试,时延结果取其平均值。通过时延测试发现,该系统在对图像进行算法处理时虽然时延会有波动,但是波动也在可控范围中,并不会对处理结果产生影响。
图5 原始图与边缘检测图
6 结语
本文开发测试的基于AM5728的嵌入式数字图像处理系统,拥有较高的计算性能,同时具有兼容性强,稳定性高的特点,同时在功能扩展上具有充足的灵活性,这主要在图像处理应用上得以体现。完全可以满足嵌入式数字图像处理应用在现实中日益增长的性能需求和功能需求。