金绍勋,黄继小,赵志刚,吕德远,黄浩文,付 存,刘文擎,屈军乐
(1.深圳大学物理与光电工程学院,广东深圳 518060;2.深圳技术大学新材料与新能源学院,广东深圳 518118)
高光谱仪作为一种物质结构和成份分析的测量仪器,在食品安全检测、医学诊断、农产品分类、材料分析以及遥感成像等方面得到了广泛的应用[1-4]。随着高精度加工技术、传感器技术及微电子技术等技术的发展,高光谱仪逐渐克服体积大、对环境检测要求度高等缺点,向微型化、智能化、多用途等方向发展[2-4]。
微型高光谱仪大多通过USB接口与PC机终端进行有线数据传输,需要在PC机上使用专门软件对所获取的高光谱数据进行处理,不能实现远程的数据采集,显著限制其便携性[3-5]。随着移动智能化技术的迅速发展,通过WIFI无线传输高光谱数据,并利用移动终端进行控制信号发送与结果显示,可显著增强微型高光谱仪的便携性,扩展其应用范围。高光谱数据量庞大,会对无线传输造成很大的压力[6-7],如何在调焦和目标捕获等阶段进行实时的高光谱图像视频预览,是目前需要解决的问题。
针对以上问题,本文设计基于Zynq平台的微型高光谱仪,搭建Socket服务器建立微型高光谱仪与移动终端之间的通信连接,采用H.264的编码方式对视频数据进行编码,并利用RTSP协议与TCP协议将高光谱数据实时传输至移动终端。用户可在移动终端实时地预览被测样本的高光谱视频和原始高光谱图像。
设计的微型高光谱仪实时视频预览系统由微型高光谱仪和移动终端两部分组成。微型高光谱仪实物如图1所示,包括高光谱图像传感器、Zynq处理平台、无线传输模块等。
图1 微型高光谱仪实物图
微型高光谱仪外壳采用铝合金材质,体积为144 mm×57 mm×63 mm,总体质量为229 g。硬件电路采用12层高器件密度PCB设计,包含Zynq-7020芯片、JTAG接口、高光谱传感器、DDR3 SDRAM等。硬件电路PCB实物如图2所示。
图2 微型高光谱仪硬件电路图
高光谱图像传感器为比利时微电子研究中心(IMEC)的新型马赛克面阵高光谱传感器。该传感器通过在标准CMOS图像传感器感光面中镀可滤过不同波段光的周期性排布滤光膜,来获取不同波段的高光谱数据。光谱分辨率为12 nm,成像速度可达340帧/s,满足高速实时高光谱数据采集的要求。马赛克高光谱传感器芯片如图3所示。
图3 IMEC马赛克高光谱传感器芯片及周期排布滤光膜示意图
Zynq处理平台的主控芯片使用Zynq-7020芯片,分为PL(programmable logic)和PS(processing system)两部分。PL部分即FPGA,主要负责驱动高光谱传感器采集待测物的高光谱数据,并将采集到的原始数据放置DDR3 SDRAM中储存;PS部分为2个ARM Cortex-A9核,主要负责控制放置在DDR3 SDRAM中的高光谱数据的传输与处理。
设计的微型高光谱仪在Zynq处理器的PS部分搭载了嵌入式Linux操作系统平台,为后续高光谱数据传输与处理提供了开发环境。嵌入式Linux平台搭建主要包括以下工作:搭建Linux开发环境、BOOT.bin的制作以及映像文件系统移植。
搭建Linux开发环境需要在PC机上构建虚拟机环境,在虚拟机中安装Linux操作系统。由于微型高光谱仪中的Linux操作系统与Windows虚拟机中的Linux操作系统是基于2个不同的平台,为了能够让微型高光谱仪正常运行应用程序,需要安装交叉编译环境,这是生成不同平台上的可执行代码的工具。交叉编译环境安装与配置步骤如下。
运用tar命令将下载好的交叉工具链解压到设定好的目录下;运用nano命令编辑.profile文件,为其配置环境变量。修改交叉工具链路径,并在终端输入命令:arm-linux-gnueabihf-gcc-v,以检查是否配置成功。配置成功,则会显示如下信息:
Using built-i n specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/opt/gcc-arm-linux-gnueabi/bin/…/libexec/gcc/arm-linux-gnueabihf/6.2.1/lto-wrapper
Target:arm-linux-gnueabihf
…
Thread model:posix
gcc version 6.2.1 20161114 (Linaro GCC Snapshot 6.2-2016.11)
BOOT.bin是系统上电后第一个要运行的程序,Linux操作系统需要通过BOOT.bin引导启动。BOOT.bin的制作需要在PL部分运用Vivado软件建立工程生成比特流文件、FSBL文件、u-boot文件。比特流文件是工程编译实现成功后生成的二进制文件。FSBL文件为Linux第一阶段的启动加载器,可以通过Xilinx提供SDK软件生成FSBL文件。u-boot文件引导Linux内核和文件启动,可以通过Xilinx官方网站下载。由SDK软件将上述3个文件打包生成BOOT.bin文件,通过微型高光谱仪上的JTAG接口下载到QFLASH中。
为了在Zynq上运行Linux系统,需要将对应的Linux内核和文件系统移植至微型高光谱仪的Zynq中。映像文件系统移植步骤为:从Xilinx官网下载与微型高光谱仪的Zynq对应的Linux内核;用已经搭建好的交叉编译环境对内核重新编译,生成能够在Zynq上运行的Linux系统;将构建好的文件系统中的所有文件,利用交叉编译环境对文件系统进行编译;利用交叉编译工具将Linux内核文件与文件系统打包成映像文件(uImage)文件,烧录到FLASH中指定地址。
为实现移动终端远程实时访问微型高光谱仪,在Zynq中的ARM上搭建Socket服务器。Socket最初由加利福尼亚的伯克利大学开发,用作Unix系统环境下的一个编程接口[8-9],是维持Internet的基本技术之一[8-11]。应用程序可以通过它发送或接收数据,进行类似于文件系统的打开、读写和关闭等操作。
图4为设计的微型高光谱仪视频流实时预览系统框图。微型高光谱仪首先与移动终端通过Socket服务器的无线通信方式进行连接,建立连接后移动终端通过Socket服务器对微型高光谱仪发送采集控制指令,将已经采集到的数据从DDR3 SDRAM取出;高光谱处理模块处理得到高光谱数据,并将视频数据发送至视频编码模块,或将高光谱图像数据发送至Socket服务器无线传输移动终端;视频编码模块对高光谱数据进行视频编码,将处理后的视频数据推送至Socket服务器的移动终端;移动终端接收视频数据和高光谱图像数据的显示参数,并在显示屏上显示预览视频或高光谱图像。
图4 微型高光谱仪视频流实时预览系统框图
高光谱数据的无线传输流程如图5所示。移动终端在与Socket服务器建立连接后发送指令,Socket服务器接收并解析移动终端的指令,微型高光谱仪将根据指令执行数据采集、数据处理类调用等操作,然后返回移动终端请求的数据。移动终端的请求分为视频流请求和高光谱图像数据请求两类。视频流请求时,得到的视频数据仅提供预览功能;高光谱图像数据请求时,返回的数据包括图片(tif,jpeg,bmp)和图片各点的像素值。图片各点的像素值保存在一个csv文件里。最终微型高光谱仪将处理完成的高光谱数据由Socket服务器发送至移动终端,至此完成一次高光谱数据的无线传输。
图5 高光谱数据的无线传输流程图
Socket服务器传输的视频流使用H.264编码方式,根据RTSP协议推送视频流至无线网络,移动端的应用输入服务器的地址就可获取微型高光谱仪的视频流。H.264编码出来的视频流解码兼容性好,数据量也显著减少,非常适用在Socket服务器无线网络上传输。
Socket服务器系统的建立,实现了微型高光谱仪与移动终端高光谱数据的无线传输。同时,H.264编码方式对该服务器设备要求较低。设计的Socket服务器系统满足高光谱数据实时视频无线传输条件。
测试系统实物如图6所示。移动终端为Android手机平台,通过APP实现了移动客户端与微型光谱仪Socket服务器的交互,完成实时视频预览。
图6 测试系统实物图
图7 视频预览APP界面
视频预览APP界面如图7所示。点击左下角的“播放”按钮可预览微型高光谱仪所拍摄的视频,调节微型高光谱仪镜头的光圈和焦距进行对焦。最终得到视频预览信息如图8所示。
图8 视频预览
根据视频预览信息可以看出微型高光谱仪获取的视频帧率28 fps,满足视频的实时预览。
如图9所示,在APP中调节图像的尺寸与类型,可获取原始高光谱图像或25波段的单通道高光谱图像。
若需要读取原始高光谱图像,可将“尺寸”选项选择为2048×1088,“类型”选项选择tif,点击“拍照”按钮后等待“1”出现在视频预览窗口的底部。即可获取原始高光谱图像。同理,将“尺寸”选项选择为408×217,“类型”选项选择需要保存的文件类型(这里选择bmp),点击拍照后等待“25”出现在视频预览窗口的底部即可获取25波段高光谱图像。
获取到的图像存放在文件管理中,如图10所示。
本文在研制的微型高光谱仪中搭建了Socket服务器,控制微型高光谱仪与移动终端进行交互,完成了高光谱数据的无线传输,并在移动终端APP上实现了实时的视频预览。设计的基于Socket服务器的Zynq平台微型高光谱仪实时视频预览系统,既可在移动终端实时预览视频,也可获取原始高光谱图像数据。
(a)原始高光谱图像
(b)25波段高光谱图像图9 原始高光谱图像与25波段高光谱图像的获取
图10 文件管理中查看25波段图像