关注公众号

关注公众号

手机扫码查看

手机查看

喜欢作者

打赏方式

微信支付微信支付
支付宝支付支付宝支付
×

农业环境监测仪中多路图像采集系统的设计思路

2019.5.08

近年来,随着计算机图像处理技术、人工智能方法、图像模式识别和多光谱识别等高新技术的发展,计算机图像处理技术也日臻成熟,已经广泛深入农业领域,其主 要应用集中于农作物种子资源检测、农产品分级、农业机器视觉、农产品长势检测、精细灌溉、农业环境监测仪等。 作为图像处理的前端,图像采集是一个重要的环节,它将对象的可视化图像和特征转化为能被计算机处理的数据。所以,图像采集系统的稳定性对图像处理的效果具 有直接的影响。目前,图像采集有很多方法,最常用的图像采集方法是图像采集卡形式。图像采集卡工作过程是通过视频接口从视频源获取视频信号,然后视频信号 进行模数转换,并利用解码器进行解码,从而可处理视频数据。

本文研究并实现农业环境监测仪的一种嵌入式数字图像采集系统,该系统基于ARMS3C2440-Linux2.6.30.4平台,采用的USB2.0数字 摄像头来获取图像,视频编程采用V4L2API,通过移植USB gadget下USB device模块在flash存储器上开辟空间作为上位机和PC、下位机和其它处理终端的共享空间,在此空间中共享图像数据。这样上位机可以通过访问这块 空间实现图像的采集,为下一步图像处理提供稳定且高质量的图像来源。

1.png

本农业环境监测仪系统处理器采用s3c2440,该芯片是三星公司推出的16/32RISC处理器,采用ARM920T内核,整体设计融合 了MMU,AMBABUS和Harvard结构,具有独立的16kB指令Cache和16kB数据Cache。Linux内核采用 Linux2.6.30.4。图像采集设备采用中星微ZC301数字摄像头,该摄像头为USB接口。该终端的系统结构图如图1所示。

农业环境监测仪中ARM-Linux平台搭建:Linux内核移植及配置Linux内核是Linux操作系统的核心。它主要包括以下几个部分:存储管理、CPU和进程管理、文件系统、设备管理和驱动、网络通信以及系统的初始化(引导)和系统调用等。

本系统的软件部分包括系统初始化引导程序boot loader、Linux2.6.30.4操作系统内核、yaffs文件系统、USB摄像头驱动、Frame buffer设备驱动、V4L2API和USB device驱动等。Linux内核实现了系统内存管理、软件程序管理、硬件管理和文件系统管理等功能。随着内核的不断发展,内核的功能逐渐增强,但目录 变动不大。本文要想实现图像的多路采集,首先需要移植内核Linux2.6.30.4,主要步骤如下:因为需要用到yaffs2文件系统,首先要为内核增 加yaffs2补丁;修改机器码,使之与boot loader的机器码一致;指定目标板、编译器和编译器路径;增加devfs文件系统管理器的支持;修改晶振频率;修改mtd分区;修改 NandFlash驱动,支持K9F1G08的Nand Flash;把s3c2440的默认配置写入con fig文件;配置内核。

配置CPU选项:

2.png

当然也要选择上Support for Host-side USB,USB device file system,USB device class-devices,OHCIHCD support等选项来支持USBhost接口。最后make zIm-age,生成内核映像。

交叉编译工具安装在Linux系统中,工具链是生成内核映像必需的程序段,工具链的工作过程是从一个工具的输出再到下一个工具的输入。 Linux工具链包括3部分:Com-piler,Assembler,Linker。GCC是Linux下C/C++语言的编译器。本系统采用虚拟机中 安装RedHat9的方式作为交叉编译器3.4.1的编译环境,将编译器的压缩包cross-3.4.1.tar.bz2拷到Linux某目录下,进入该 目录解压,修改/etc/bashrc文件,将解压的3.4.1/bin目录添加到命名的默认路径。农业环境监测仪的模块的编译和加载使用命令make modulesM=./drivers/usb/gadget编译生成s3c2410_udc.ko和file_storage.ko;然后将其下载到目 标机中Linux2.6.30.4/lib/modules/2.6.30.4目录下,使用insmods3c2410_udc.ko和 insmodg_file_storage.kofile=floppy.Img removable分别加载;等待模块加载完后,重新插拔USBdevice接口,PC端出现可移动存储设备,至此Nand Flash模拟U盘成功;然后进行格式化,格式为FAT文件系统。

农业环境监测仪的V4L2图像采集部分:V4L2重要接口函数和数据结构Video for Linux(简称V4L),是Linux中支持影像设备的一组API,它配合适当的视频采集设备和相应的驱动程序,可以实现图像采集、AM/FM无线广 播、影像CODEC和频道切换等功能。现在已有的版本为Video4Linux2(简称为V4L2),是从V4L的基础上发展起来的,从2.5.x版本后 开始加入Linux内核。

所谓的V4L2有两层含义:应用程序可以按照此框架访问视频设备、获取图像信息;在Linux中,视频设备是设备文件,可以像访问普通文件 一样对其进行读写,摄像头在/dev/video0下。主要的函数有 open(),close(),ioctl(),mmap(),write(),read()等。主要涉及的数据结构 有:structv4l2_buffer,structv4l2_re- quest_buffers,structv4l2_capability,structv4l2_crop- cap,structv4l2_crop,structv4l2_format等。

农业环境监测仪用户空间视频采集过程首先在进行makemenuconfig操作时,将mul time-dia device菜单中的Video for Linux选项选上,这样内核就配置了为农业环境监测仪获取视频的设备提供接口的Video4Linux。V4L2下用户空间应用程序的流程如下:首先用 open系统调用打开视频设备,通过io ctl读取设备信息并初始化设备;更改设备当前设置。视频采集可采用两种方法:内存映射或直接从设备读取;对采集的视频进行处理;关闭视频设备。在视频数 据的传输中一般不使用read(),write()系统调用来直接运行,大多数情况下使用内存映射的流传输方式,流传输方式不要实际数据的拷贝,驱动和应 用程序之间只需要交换被映射内存的指针就可以了。

其流程图如2所示。

3.png

此时的用户程序需要包含头文件<Linux/video-dev2.h>,使用arm-linux-gcc编译,并下载到目标板运行。

农业环境监测仪的多路协调本文以两路视频为例。进程是运行着一个或多个线程线程的地址空间和这些线程所需要的系统资源。它是Linux运行 的基本单元,所有的进程都拥有自己独立的处理环境和系统资源。进程的环境由当前系统状态及其父进程信息决定并组成。对于单CPU系统来说,虽然Linux 操作系统是一个多用户多任务的操作系统,但在某一时刻,只能有一个进程处于运行状态,各任务根据调度算法在这些状态之间不停地切换。在Linux2.6内 核中,用户级进程拥有以下几种状态:就绪/运行态、等待状态(可以被中断)、等待状态(不可以被中断)、停止状态和僵死状态。每个进程都受调度策略和优先 级的控制。这些参数可以通过应用程序显示执行sched_setscheduler()和sched_setparam()函数来指定。

用户进程状态转换如图3所示。

4.png

实验结果采集流程:配置USB摄像头,连续抓取10幅图片,分别取第1和第10幅图像进行分析对比试验。效果如图4所示。

5.png

由图4可见,图像在灰度为200处右移,实际表现为亮度变大,图像质量越来越清晰,说明开始阶段图像采集设备前期具有短暂的调节过程,调节后的图形质量明显提高。

VC++界面设计Windows下,与USB外设的任何通信需通过设备驱动,该驱动知道如何与系统的USB驱动和访问设备的应用程序通信。Windows包含应用程序与USB通信需要的各种信息,不需要再安装驱动;Win32的应用程序接口(API)函数,使得设备驱动能与应用程序之间相互 通信,开发应用程序也不需要去了解复杂的USB协议。主要步骤有:建立MFC AppWizard(exe)工程;打开设备并返回设备句柄;获取设备信息;识别接口信息;识别设备路径名;设置设备等。与设备进行数据交换,首先把设备打开,windows下每个设备被当成一个文件夹来访问,每个文件都有一个文件名。文件打开后就可以使用Read File和Write File来读写文件了。

本系统采用Nand Flash模拟PC和下位机之间的交互区域,实现了图像的存储和访问。其具有如下优点:结构层次清晰;图像传输可连续;图像采集可控性强;图像质量高。但是,由于FAT不是为Flash设计,因此需要透过FTL来访问Nand Flash。此外,PC和下位机的同步问题也需要进一步的研究和改善。

图像处理和识别作为一种更加直观的途径正越来越多的应用在农业环境监测仪的农业领域里。本文设计了一种基于嵌入式Linux图像采集系统,重点研究了Nand Flash模拟USB device实现图像存储的过程。实验证明,本系统提供的高质量且稳定的图像来源能够应用于农业环境中。


推荐
热点排行
一周推荐
关闭