引言
目前,国内智能相机的开发还是处于起步阶段,但是它却在现实中拥有广泛的应用。典型的机器视觉系统是一般由光源、CCD或CMOS相机、图像采集卡、图像处理软件及一台PC机构成。其中,图像的采集功能由CCD/CMOS相机及图像采集卡完成;图像的处理则是在图像采集/处理卡的支持下,由软件在PC机上完成。由于基于PC机的机器视觉体积庞大、结构复杂,其应用系统的开发周期长、成本高,因此智能相机就应运而生。本文提出了一种基于ADSP-BF537嵌入式智能相机的设计方案,使它能够达到机器视觉检测低成本,高速率,高精度,易操作,小体积的目的。
1 硬件平台设计
嵌入式智能相机是一个微小的视觉检测系统,包含图像采集装置、图像处理算法、图像处理软件和通信控制装置。图像采集装置主要是获取图像数据,使用的是CCD/CMOS传感器。图像处理主要是在DSP中进行,是对图像进行预处理,识别、检测图像特征,分割图像特征,提取图像特征,最后得到图像处理结果。这主要是在数字信号处理器(DSP)中完成。图像通信装置主要是对图像处理过程进行控制,并且实现图像处理结果输出。图1为所设计智能相机的结构框图。
在本设计中,相机采用了ADI公司的ADSP-BF537作为控制核心。ADSP-BF537是具有较高性能的系列成员,拥有容量更大的嵌入式存储器,从而可满足诸如视频安全/监控和基于工业环境的分布式控制/工厂自动化应用等嵌入式应用的较高吞吐量需求。ADSP-BF537提供了卓越的性能,并专为诸如远程监视设备、VoIP、销售点终端以及生物特征识别/安全应用等低成本连接设备而设计。作为整个系统的核心,ADSP-BF537具有接口丰富,性能优良,价格便宜的特点,并具有强大的多媒体数据处理能力。
在图像采集模块中,相机使用了CMOS图像传感器。与CCD图像传感器的高成本相比,CMOS图像触感器具有低功耗,低成本的优势。随着CMOS传感器制造工艺的发展,其性能将会越来越接近CCD传感器。相机通过CMOS图像传感器采集图像数据,并且在DSP通过I2C的控制下,把数据传入DSP。
在通信控制模块中,相机通过以太网、串口RS 232,I/O端口与外部进行连接,从而实现相机的数据输出与控制。以太网用以实现上位机与相机的通信与控制,而I/O端口用来外部触发控制相机或者实现相机向外部输出控制信号。串口RS 232主要是用来不通过仿真器来烧写U_Boot引导程序和uClinux镜像文件。
2 软件设计
相机的软件程序设计使用了一个Oscar(Open source camera)框架平台和OpenCV视觉库,从而使软件设计更加的简单、方便、快捷,图2为Oscar框架与OpenCV的关系图。Oscar为软件的设计提供了简易的应用方法模块,并且隐藏了硬件接口的复杂性,从而使软件设计者不需要关心底层硬件程序的设计。而OpenCV构建了一个简单易用的计算机视觉框架,帮助并发人员更便捷地设计更复杂的计算机视觉相关的应用程序。
2.1 Oscar框架
Oscar软件框架嘲是为硬件平台的应用而抽取出来的。Oscar框架包含17个模块,如表1所示,每个模块都有相应的功能和所需的平台支持。在程序的编译过程中,应用程序只需要加载它需要的应用模块,从而节省了程序空间,提高了运行效率。
下面主要介绍几个重要的模块:
Bitmap模块提供从文件系统中读取/写入bmp图片的函数,支持24位BGR和Greyscale图片。
Cam模块实现了与CMOS传感器的交互。它包含了读/写相机寄存器和捕捉图片的功能,同时也能够对双缓冲器和进行自动管理。在目标板上,Cam模块直接与CMOS传感器的帧捕捉设备驱动相连接。它把API方法传输到IOCTL。在主机上,这个模块保存了传感器的一个寄存器集,并且时刻让它保持更新。由于必须从文件系统中加载,因此Cam模块使用一个文件名来读取得正确的图像文件区,并且通过Bitmap模块来从文件系统中加载图像。
Ipc模块提供了一种在相同应用程序进程间做内部交互的简单方法。这个交互是以客户-服务机的方式进行的。交互通道一面是发送读/写请求到客户端,然后服务端响应这些请求。这个通道使得低优先权的服务端和客户端的人机界面进程之间交互不会阻塞。两个进程都需要在一系列的参数和大小上保持一致。通过参数识别,通信才会执行。Ipc模块在文件系统中通过AF_UNIX套接字发送请求和相应信息。每个这样的套接字代表的是一个全双工接口,被称为一个Ipc通道。通过Ipc通道配置号的注册,从而允许同时与多个进程的交互。图3,图4为Ipc模块的读与写。
2.2 OpenCV
OpenCV(Open Source Computer Vision Library)是一个基于开源的跨平台计算机视觉库,可以运行在Linux、Windows和Mac OS操作系统上。它轻量级而且高效——由一系列C函数和少量C++类构成,同时提供了Python,Ruby,Matlab等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。OpenCV提供的视觉处理算法非常丰富,并且它部分以C语言编写,加上其开源的特性,处理得当,不需要添加新的外部支持也可以完整的编译链接生成执行程序,所以用它来做算法的移植很方便,OpenCV的代码经过适当改写可以正常的运行在DSP系统和单片机系统中。OpenCV主体分为5个模块,其中4个模块如图5所示。OpenCv的CV模块包含基本的图像处理函数和高级的计算机视觉算法。ML是机器学习库,包含一些基于统计的分类和聚类工具。HighGUI包含图像和视频输入/输出的函数。CXCore包含OpenCV的一些基本数据结构和相关函数。
2.3 程序设计流程
相机通过RS 232串口把编译好的U_Boot和μCLinux镜像文件烧写到里面的FLASH中,然后通过Eclipse集成开发环境进行应用软件设计。本设计实现了一个简单的应用,可以通过智能相机来检测条形码。流程图如图6所示。
在图像处理模块中,主要包含了图像图像预处理,分析条形码黑白条宽度,判断条形码类别,最后识别出条形码并且显示条形码数据,流程框图如图7所示。
3 实验结果及分析
下面4张图为在四种不同的速度情况下检测的条形码样本,它们是在相同的外界环境(光源、曝光时间等)下检测。图8是在单帧图片下的检测,图9是在15f/s的速度下检测,图10则是在20f/s的速度下检测。在三种情况下分别对100个条形码进行检测,图11是在30f/s的速度下进行检测。表2为检测结果。
由表2可知,在低速(即在15f/s以下)时,相机能够对条形码进行正确的检测,随着速度的增加,检测的合格率会逐渐的下降。
4 结语
此智能相机的设计是以ADSP-BF537为处理控制核心,结合Oscar框架和OpenCV视觉库而实现的。通过一个简单的检测条形码的应用程序可以看出,在检测速度不高的情况下,此智能相机能够准确地检测产品,并且操作简单,能够广泛地应用到生活和生产实践中。
-
芯片
+关注
关注
452文章
50142浏览量
420455 -
嵌入式
+关注
关注
5056文章
18954浏览量
301649 -
机器视觉
+关注
关注
161文章
4317浏览量
119957
发布评论请先 登录
相关推荐
评论