应用于纳型无人机视觉场景数据集构建的图像采集系统

2023-03-04 13:25付洪硕吴瑞东陈浩林
计算机测量与控制 2023年2期
关键词:按键分辨率传感器

凤 雷,付洪硕,吴瑞东,陈浩林,刘 冰

(哈尔滨工业大学 电子与信息工程学院,哈尔滨 150001)

0 引言

无人机具有无人员伤亡、成本低、尺寸小、机动性高等优点[1-2],现如今在地理测绘[3]、灾害救援[4]、遥感监测[5]、农业辅助[6]等多方面有着广泛应用,而无人机的小型化是近年来重要的发展方向之一[7-10]。纳型无人机是一种10厘米尺寸级别的无人机[11],其具有尺寸更小、功耗更低的特点。纳型无人机可以到达管道内部、狭小室内、建筑缝隙等人类或标准尺寸的无人机难以到达的地方,具有更高的隐蔽性。多个无人机之间可以组合成为无人机集群使用[12],与人工智能算法相结合可以增强其自主能力[13],在物联网等领域有广泛应用。

对于具有自主能力的纳型无人机而言,在全板载行人跟踪或目标检测的应用场景下,由于纳型无人机对功耗重量的严格限制,一般需要采用轻量化的深度学习算法,该类算法的性能常常依赖训练数据集与应用场景的匹配度。但对于目标检测领域常用的诸如VOC和COCO等数据集而言,虽然这些数据集的目标类型较多、场景丰富、图像质量高[14-16],但是这些数据集中的图像与纳型无人机视觉系统感知到的应用场景图像并不匹配。由于受到功耗约束,纳型无人机上的视觉传感系统采集到的应用场景图像数据类型通常为低分辨率的灰度图像数据(例如Crazyfile 2.0上的视觉传感系统采集的图像是320*320分辨率灰度图像[9]),相比于VOC和COCO等数据集中的图像数据,这些灰度图像能够提供的信息较少,同时还会受到应用场景的光照等条件影响。因此,纳型无人机处理的图像与现有目标检测数据中的图像并不匹配,不能使用常见的目标检测数据集进行机载目标检测算法的训练。所以,构建一个与纳型无人机视觉系统相匹配,图像内容和图像参数可以适用于纳型无人机视觉场景的数据集是有必要的。在上述需求下,本文目的是设计一个基于嵌入式处理器的,能够应用于纳型无人机视觉场景数据集构建的图像采集系统。

当前对于基于嵌入式处理器的图像采集系统的研究主要聚焦于低功耗和通用性上,例如付东等人基于stm32设计了低功耗图像采集系统[17],系统主要注重于低功耗的无线传输,单次采集只能传输一帧图片;甄国涌等人基于国产Hi3516D芯片设计了低功耗采集系统,系统功耗为2.1~2.3 W,但系统帧率固定为25帧[18]。这些研究工作中图像采集的帧率较低,不适用于在行人跟踪等对图像帧率需求较高的任务中使用。陈锐弦基于FPGA实现了MIPI接口的高帧率图像数据采集[19]。唐宇枫等使用ZYNQ UltraScale+完成了LVDS接口的80帧/s的图像数据传输[20]。上述研究主要适配高速视频传输接口的图像传感器,这类图像传感器功耗较高,无法应用在纳型无人机视觉场景的图像采集中。综上所述,这些研究工作与纳型无人机应用场景不匹配,不适用于纳型无人机应用场景数据集的构建。而纳型无人机自身携带的视觉系统由于其设备的功耗限制以及使用场景,只能通过无线的方式传输帧率有限且经过压缩的图像,不满足构建数据集的要求。因此本文针对没有适配于纳型无人机视觉场景下的高帧率图像数据采集系统的问题,设计了一个能够应用于构建纳型无人机视觉场景数据集的高帧率图像数据集采集系统。系统采用ZYNQ作为主控芯片,将ARM的控制功能与FPGA的并行处理的优势相结合[21],实现图像的采集、存储、实时显示以及图像传感器的控制功能。文章从系统的硬件设计和软件设计两方面进行介绍,最后对系统的帧率和功耗等各项指标进行测试,验证了方案的有效性。

1 系统硬件设计

1.1 硬件总体设计

图像采集系统的设计需要满足以下几个要求:1)以QVGA分辨率下最高60帧的帧率及320*320分辨率下最高45帧的帧率取图像数据;2)单次连续存储超过20 S以上的图像数据;3)具有图像实时显示功能,用于调整采集系统的拍摄角度、拍摄内容和图像传感器的曝光度等参数;4)摄像头参数可调(如曝光度,分辨率,输出帧率等)。

系统设计如图1所示,其中圆角矩形代表ZYNQ的PL端使用的模块。系统以ZYNQ为主控芯片,通过Himax HM01B0摄像头模组完成图像获取,DDR完成图像缓存;通过VGA接口在屏幕上完成实时显示;通过按键来调整摄像头参数;通过理论传输速度98 MB/S的高速SD卡实现高速图像存储。

图1 系统设计框图

1.2 图像采集

1.2.1 图像传感器

图像传感器作为图像获取的重要一环,决定了采集到的图像的分辨率、传输格式等重要参数。为了保证机载目标检测、目标追踪等算法的效果,在图像传感器感器选取上要求采集到的图像数据与纳型无人机平台上获取到的实际图像一致,因此我们选取了Himax公司的HM01B0作为图像传感器获取图像数据。

HM01B0支持RGB和灰度格式的45帧320*320分辨率的图像以及60帧QVGA分辨率图像输出,其图像输出接口采用常见的DVP(digital video port)接口。HM01B0的主要特点在于其重量轻、功耗低,正常工作时的平均功率为2 mW,与常见的功率为数十至数百毫瓦的摄像头如OV7670、OV5640等相比功率降低了数十倍。

1.2.2 摄像头模组设计

图像传感器在工作时一般需要提供多个不同的电压以及一个稳定的时钟源,因此在将图像传感器接入ZYNQ最小系统板或开发板之前,需要完成电压转换和时钟源的供给工作。例如HM01B0在工作时需要为其提供2.8 V,1.5 V电压以及一个3~36 MHz的时钟。

为了提高系统的通用性,本文设计了一个HM01B0图像传感器模组,引出必要的数据和同步信号,并使其无需额外的外围电路和时钟配置,仅提供3.3 V供电即可使HM01B0正常工作。该模组内部主要包括供电电压转换、数据线引出以及向图像传感器提供独立稳定时钟的功能。模组如图2所示,图像传感器引脚通过柔性PCB接入模组,模组供电脚及数据引脚通过间距为2.54 mm的连接器引出。

图2 HM01B0模组

1.2.3 初始化及参数配置

在开始传输图像数据之前,需要对图像传感器进行初始化和参数配置,具体过程如下。

使用xlinx提供的AXI-IIC模块,通过IIC接口向模块发送要写入的寄存器值,完成对图像传感器的初始化以及对分辨率、曝光度等内部参数的配置。HM01B0关键寄存器配置如表1所示。表中为图像传感器以320*320分辨率输出最高速率45帧的灰度图数据的关键寄存器配置值。

表1 HM01B0关键寄存器配置

2 系统固件设计

根据1.1节中的系统设计框图可知,系统在逻辑功能上需要完成格式转换和HM01B0模组配置两个任务。格式转换任务的目的是将图像数据分别转换成为DDR缓存和屏幕显示相匹配的数据格式。HM01B0模组配置任务则是通过IIC来完成HM01B0初始化并改变其配置参数。因此下面主要从图像缓存和屏幕实时显示两部分阐述系统固件设计。

2.1 图像缓存

由于图像数据的采集速度与图像处理和储存速度不一致,无法直接将采集到的数据直接存储到SD卡中,因此图像缓存机制是十分重要的。图像缓存通过开辟一块缓冲区的方式将图像采集和图像数据使用分离开来,从而解决存取数据的同步问题。下面将具体阐述图像缓存的相关设计。

2.1.1 VDMA缓存

图像数据在存储进入SD卡之前,通过其外置的DDR进行缓存,PL端不经过ARM,直接通过VDMA(video direct memory access)对图像数据进行存取。

VDMA是专用于图像数据存取的DMA模块,DMA可以实现不经过CPU的直接访问存储,从而达到加快存取速度和节约CPU计算资源的目的。系统中获取到的图像数据通过VDMA缓存进DDR中,供后续图像显示和存储使用。

VDMA的输入为AXI总线形式。AXI总线是一种通用的串行总线协议,在ZYNQ中被广泛用于模块间的数据传输以及PL端和PS端之间的数据传输。因此DVP数据在输入VDMA之前,需要通过DVP转AXI stream模块将其转换为AXI stream格式。

2.1.2 多帧缓冲机制

由于SD卡存储的速度与图像获取的速度不一致,为了避免在单个存储空间中,图像数据的存入与读出同时进行而导致的图像撕裂问题,不能同时进行读取和写入操作。因此将VDMA设置为多个帧缓冲模式,只要保证写入区域与读出区域不一致,读写操作就可以同时进行,这保证了图像数据获取的实时性。

如图3所示。在存储空间内开辟3个帧缓冲区域,配置VDMA循环存入3个存储空间。每次VDMA完成存入后会输出当前存入的存储空间位置信号,供数据读取使用。图中实线表示为当前时刻的图像数据的流向,虚线表示上一次向缓冲区写入和读出数据时图像数据的流向。

图3 多帧缓冲机制示意图

若当前存入和读取的缓冲区号相同,则仍然会产生图像撕裂问题,因此在每次循环存入前,会首先获取VDMA当前正在读取的缓冲区号,若即将存入的区号与其相同,则跳过当前区域,避免同读同写的问题产生。如图4所示,某时刻写入图像数据的区号为1,读出图像数据的区号为2,若写入图像数据操作完成后,读出操作仍未结束,则下一帧图像写入将跳过2号缓冲区,向3号缓冲区写入数据。

图4 动态缓冲机制示意图

2.2 屏幕实时显示

为了保证实际采集和存储到的图像内容,位置、角度、曝光度等参数符合预期,便于使用者实时观察到采集到的图像的效果和当前系统运行的状态,系统增加了屏幕实时显示功能。

在VDMA存储到完整一帧图像后,仍通过VDMA读取该帧的图像数据。VDMA的输出也为AXI-stream格式,通过xilinx官方提供的AXI stream转DVP模块,将AXI stream转换为DVP格式图像数据。图像显示部分通过VGA接口输出,在图像数据输出到屏幕显示前,需要进行如下改动。

首先,VGA接口输出的图像数据应为一组RGB值。但是实际图像获取和存储过程均以灰度值的形式进行,因此在输出为VGA之前需要将灰度值转换为RGB。因此定义一个模块将灰度值的高五位作为R和B两个通道的值,高六位作为G通道的值完成图像数据转换。

其次,由于320*320分辨率不是常见的屏幕分辨率,输出图像的分辨率大小应与实际屏幕的分辨率相适应。因此设置VDMA读取的存储空间大小为实际屏幕分辨率大小,实际画面大小以外的存储空间的数据应在初始化时清空,这部分多余空间可以将其加以利用于图像获取的状态显示功能。

3 系统软件设计

根据上文对硬件系统设计的介绍可知,采集系统需要实现的软件功能包括VDMA模块初始化配置数据传入、IIC传输给摄像头模块的数据传入、SD卡的数据写入以及按键检测和对应功能的执行。因此系统软件设计的主要目的是控制ARM与硬件进行交互和信息传递,共同完成系统的功能。

软件系统设计流程如图5所示,系统中的软件设计部分主要阐述在PS端即ARMcortex-A9中运行的软件程序,包含有外设及模块初始化、按键检测和按键后对应功能处理3个部分。外设及模块初始化主要包含有HM01B0的初始化操作以及VDMA的初始化操作,在HM01B0初始化完成后再初始化VDMA以获得稳定的图像。按键检测方面,为了便于按键后的事件处理以及按键功能的修改,本系统采用了freeRTOS操作系统实现。对于按键后的功能处理部分,系统将按键功能分为了录像功能和更改图像传感器参数的其他功能。

图5 系统软件流程图

3.1 RTOS任务调度

ARM Cortex-A9是单核处理器,其内部程序执行为串行方式,为了充分利用计算资源,使得多个任务之间协同工作,本文采用了RTOS(real time operating system)实时操作系统作完成任务和任务之间的调度。

我们根据实际功能需求分析,将软件划分为以下几类任务:初始化、按键检测和功能执行任务。将这三类任务分别赋予不同的任务优先级:初始化任务为最高优先级,在任务创建结束后即开始执行初始化任务,且令该任务仅执行一次。按键检测为第二优先,单次按键检测完成后任务即挂起一段时间供其他任务执行。按键各类功能的执行设为第三优先,各按键功能之间的任务优先级一致。在按键检测的空闲时间完成功能执行任务,若按键未被按下则将任务挂起直至有按键按下。

为完成按键检测和功能执行两个任务之间的调度,系统设置了多个信号量,每个信号量对应一个任务,并将信号量获取失败后的等待时间设为无限。此时初始化后由于没有按键按下,功能执行任务无法获取信号量全部挂起,直至按键检测任务检测到按键后,释放对应信号量,此时相应的功能执行任务开始执行。任务优先级设置如图6所示。

图6 任务优先级设置

下面根据图6中的任务划分分别介绍每个任务的具体实现内容。

3.2 系统初始化设置任务设计

系统初始化任务主要可以分为系统外设初始化和PL端的模块初始化两个方面。外设初始化完成对图像传感器HM01B0的配置,模块初始化完成对VDMA的配置工作。

在系统外设初始化上,我们建立了一个图像传感器初始化数组,存放初始化的寄存器地址和寄存器值。遍历初始化数组,向AXI IIC模块寄存器写入发送数据和发送命令控制其通过IIC与图像传感器通信,启动图像传输。在PL端模块初始化上,我们首先开辟好VDMA所需的帧缓冲空间,之后通过修改VDMA寄存器来完成写入缓冲空间地址、读写数据尺寸以及VDMA的工作模式的工作。

3.3 按键检测任务设计

按键检测任务主要完成按键的检测以及按键按下后的任务调度功能。该任务的主要流程如图7所示。

图7 按键检测任务流程图

由于系统通过机械按钮进行输入,在按键检测任务探测到按键按下后需要进行消抖操作,即在按下延迟一段时间后再次探测按键是否被按下。在完成消抖仍探测到按键被按下后,开始信号量指示当前按下的是哪个按键,引导系统进入正确的任务中。

3.4 图像采集状态显示流程

为了方便使用者操作并直观地观察到当前图像数据获取状态,系统添加了状态显示功能。由于显示图像的分辨率为320*320,而显示器支持的最相近的分辨率为480*640,即显示屏上存在一片空白区域,我们利用了这部分空白区域对图像采集状态进行显示。图像采集状态显示流程如图8所示。

图8 图像采集状态显示流程图

首先,为了显示当前图像是否正常显示,在320*320分辨率的画面显示部分以外的存储区域里选取一小块区域,给3个不同的缓冲区赋予不同的值,用于区分当前缓冲区号。此时若观察到屏幕在该区域的值循环变化,说明VDMA在循环地将图像数据写入存储空间中,且能够正确地按照顺序将其读出,以此判断图像获取功能正常运行。

其次,在使用者按下录像键后,在3个缓冲区赋予相同的“REC”字样,表明当前正在记录连续图像数据,录像结束后将该处的“REC”清空,以此来标识当前是否在进行连续图像采集。同时,对于其他按键我们采用同样的方法来标识当前按下的按键要执行的功能。

3.5 图像存储任务设计

系统的图像存储任务通过FatFs文件系统完成,FatFs是为嵌入式系统设计的独立于硬件架构的通用FAT(file allocation table)文件系统模块,其具有占用资源少、支持RTOS和可以不做任何修改直接应用于PS端的ARM中的优点。

以一次视频数据存储过程为例,其主要流程如下,首先创建一个FIL文件对象,用于后续操作使用,新建文件类型为.bin文件,假设第N次进入视频存储功能,则将该次视频文件命名为“Nvideo.bin”。之后以帧为单位向该FIL对象写入图像数据,写入来源为最近一次完成存储的图像缓冲区位置的数据。在写入之前要校验当前写入数据的缓冲区位置与上一次写入数据的缓冲区位置是否一致,若一致则认为当前帧图像数据未写入完成,待其位置变化后再进行写入。

由于存储格式为.bin文件,因此实际使用时在PC端用python语言设计了一个文件转换工具,通过该工具将.bin文件根据图像分辨率以帧为单位拆分并转换为jpg格式的图像,再以特定帧率将图像拼接成为最终的视频数据输出到指定位置。

4 实验结果与分析

系统设计的主要目标是完成一个能够应用于构建纳型无人机视觉场景数据集的高帧率图像数据集采集系统,因此本文的实验主要从系统的帧率、图像质量、功耗3个方面进行评价。

4.1 实验装置

本文设计的图像采集系统实物如图9所示。在该系统中,使用ZYNQ XC7Z020与HM01B0模组相连接,获取图像数据,VGA接口连接显示屏作为实时图像输出,使用SanDisk ultra 32 GB的SD卡进行图像存储。

图9 图像采集系统实物图

4.2 实验方法

实验主要分为以下几个部分:

1)测试获取到的图像数据的帧率。令系统采集并存储200帧图像,计算读取全局计时计数器对应的寄存器值的差值,将差值换算得出存储完成这些帧图像时所需的时间,进而换算得出其平均帧率。全局计时计数器转换为时间间隔的公式如式(1)所示:

(1)

其中:t的单位为μs,nend和nstart分别为结束和起始时间的全局计时计数器值;N为每秒计数的数量,对于给定型号芯片N为定值。

测量传感器硬件可以输出的最大帧率下系统存储的图像帧率,根据纳型无人机视觉场景的应用要求,系统的帧率应达到图像传感器硬件所能够传输的最大帧率。

2)在纳型无人机视觉场景下无法获得理想的标准图像作为图像质量评价的参考,因此该图像质量评价属于无参考图像质量评价问题,常用方法为主观评价或对图像的统计特性进行分析的方法间接评价图像质量。

在采集到的图像数据集中任选其中一帧图片,对图片进行主观评价,再计算该图片的均值、标准差和梯度来评价图像的平均亮度、灰度值分散程度和细节纹理。其中图像亮度应处于像素值范围的中间位置、标准差应尽可能大、梯度图应能够较为清晰地分辨每个物体的轮廓信息。实验以320*320分辨率配置下获取到的某一帧图像为例评价图像质量。

3)通过vivado进行功耗评估,并根据供电电源提供的电压和电流值得出实际运行时系统的功耗。

4)以调整图像传感器的曝光参数为例,测试图像传感器参数调整的功能是否能够正常运行。

4.3 实验流程及数据分析

1)依据上文的实验方法,将图像传感器初始化配置为320*320和QVGA分辨率下的最高输出帧率,记录某一时刻起20 s内的图像数据。通过串口打印出每存储完成200帧图像后全局计时计数器增加的数量,根据式(1)换算得出系统运行的帧率。

帧率测试得到的结果如表2所示。可见将HM01B0设置为320*320分辨率最大输出帧率的情况下,获取到的图像帧率可达45帧以上,QVGA分辨率最大输出帧率时图像帧率可达60帧以上,达到了图像传感器硬件所能够传输的最大帧率。

表2 系统连续采集帧率测试结果 帧/秒

2)分别选取人、水杯和盒子作为画面主要内容,根据上文的实验方法,记录图像采集系统获取到的图像数据。任选其中的某一帧图片对图像质量进行主观评价,并计算图像的均值、标准差和梯度。

图像采集系统获取到的图像及计算后的梯度如图10所示。在图像数据集中分别选取第244、10、10帧作为评价对象,对图像的统计数据进行计算。由梯度图可见图片的边缘部分轮廓较为清晰。图像的像素均值和标准差的计算结果如表3所示。

图10 图像采集系统获取的图像及计算后的梯度图

表3 图像采集系统获取图像的均值、标准差

由计算结果可得,a图片均值位于灰度图取值0~255范围的较中间位置,图片的亮度适中,b、c两张图片像素均值处于中上位置,主要原因在于其背景颜色较浅;三张图片的标准差较大,表明其灰度值较为分散,综合来看,系统采集到的图像质量较好。

3)将系统接入电源,观察电源供给的电压和电流值,并计算得出系统实际运行功耗。

将图像传感器设置为45帧320*320分辨率时,系统实际运行的功耗测量结果如图11所示。此时系统运行的供电电压为5.00 V,电流为0.48 A,系统整体的功耗为2.40 W。

图11 系统实际运行功耗测试结果

4)在图像采集系统运行过程中按下曝光度修改按键,观察屏幕显示的图像前后区别来验证按键功能运行情况。

按键后的结果如图12所示,可见按下按键后不同曝光度下对灯光的拍摄效果有明显差别。

图12 图像传感器曝光度修改前后对比

综上所述,图像采集系统的帧率满足设计要求,采集到的图像质量较好,图像传感器参数调整功能可以正常运行。

5 结束语

本文针对纳型无人机视觉场景下的获取的图像与常用图像数据集不匹配的问题,设计了一个应用于构建纳型无人机视觉场景数据集的图像采集系统。系统采用了HM01B0模组作为图像获取、异构芯片ZYNQ作为主控芯片、SD卡作为存储介质,软件上通过FreeRTOS实现任务控制。经测试,系统可以完成45帧320*320分辨率和60帧QVGA分辨率的连续图像数据采集存储,且获取到的图像质量较好,通过显示屏可以进行实时图像和系统状态显示,通过按键完成图像传感器的参数调整。系统采用DVP接口作为图像传输接口,具备一定的通用性,可以广泛应用于小型机器人等其他场景下的高帧率灰度图像数据的采集当中。

猜你喜欢
按键分辨率传感器
康奈尔大学制造出可拉伸传感器
基于有限状态机的按键检测程序设计
简述传感器在物联网中的应用
“传感器新闻”会带来什么
EM算法的参数分辨率
跟踪导练(三)2
原生VS最大那些混淆视听的“分辨率”概念
基于深度特征学习的图像超分辨率重建
一种改进的基于边缘加强超分辨率算法
一种多方向导光按键结构设计