嵌入式虹膜图像采集及预处理

发布者:qazwsx007最新更新时间:2012-05-17 来源: 微计算机信息 关键字:虹膜图像采集  DMA  PPI 手机看文章 扫描二维码
随时随地手机看文章

0 引言

随着计算机和网络技术的发展,信息安全显示出前所未有的重要性,而身份识别作为保证信息安全的必要前提,也越来越受到重视。虹膜识别技术是基于眼睛虹膜的生物识别技术。虹膜的终生不变性以及信息提取的非接触性等特性,使其成为各项生物识别技术中最突出的一项。本文论述了在基于Blackfin561的嵌入式操作系统uClinux的虹膜图像采集以及预处理。为后期在嵌入式平台上进行虹膜图像运算提供了图像来源。

1 Blackfin561中的DMA

Blackfin系列DSP产品是ADI公司的基于微信号体系结构的DSP,适用于各种视频、音频、通信领域。 ADSP-BF561有多个独立的DMA控制器,能够以最小的DSP内核开销完成数据自动传输。DMA传输可以发生在ADSP-BF561的内部存储器和任一有DMA能力的外设之间。此外,DMA传输也可以在任一有DMA能力的外设和已连接到外部存储器接口的外部设备之间完成(包括SDRAM控制器、异步存储器控制器)。有DMA传输能力的外设包括SPORT、SPI端口、UART和PPI端口。每个独立的有DMA能力的外设至少有一个专用DMA通道。 BF561内部专门为适应视频数据处理而增加了二维DMA。

2 PPI接口驱动的具体实现

uClinux是针对微控制领域而设计的Linux系统,面向没有MMU(Memory Management Unit)的硬件平台。它是Linux的一个变种,一方面它继承了Linux的大部分优点,例如稳定性,强大的网络功能;另一方面其内核相当精简,内核体积小于512KB,内核加文件系统小于900KB。uClinux同标准Linux主要的区别在于两者的内存管理机制和进程调度管理机制,另外它采用了romfs文件系统,并对Linux上的C语言库glibc做了简化。uClinux完全符合GNU/GPL公约,完全开放源代码,因此在嵌入式领域得到广泛应用。

为管理各种外围硬件设备,uClinux系统对其采取面向对象的封装机制。uClinux将所有的外围设备看成是一类特殊文件,称为“设备文件”,它抽象了对硬件的处理,用户进程只需通过标准的系统调用如open(),read(),write(),close()而无需了解设备在硬件层上实现的细节即可实现对设备的访问控制。驱动程序则负责这些系统调用的具体实现。

针对具体应用,在驱动程序中实现了模块注册注销函数,open,release接口函数和read接口函数(如图1所示)。驱动程序采用了中断方式,对PPI和DMA进行了配置,采用BF561提供的二维DMA功能。详细介绍如下:

 

 

(1)模块初始化函数init_module()。该函数是每个内核模块加载的时候首先调用的一个默认函数。程序中使用了module_init()宏来显式命名模块的注册函数为 ppi_init(),在该函数中完成了设备’ppi’的注册,当模块加载完毕之后,内核即知晓该设备的存在。

(2)模块卸载函数cleanup_module(),该函数与init_module()做相反的工作,在内核中取消设备的登记。与模块注册类似,程序中使用module_exit()宏来显式命名模块的注销函数为 ppi_exit()该函数在模块卸载的时候自动调用。

(3)设备驱动程序的file_operations结构。由于所使用的PPI接口只用来做数据采集,因此file_operation结构定义如下:

static struct file_operations ppi_fops = {

owner:     THIS_MODULE,

read:        ppi_read,

open:       ppi_open,

release:    ppi_release,

};[page]

(4)open,release接口函数。在这两个函数中分别使用了MOD_INC_USE_COUNT和 MOD_DEC_USE_COUNT宏,被操作系统内核用来记录当前访问设备文件的进程数。由于要使用中断方式,所以在open和release中要分别实现中断的申请和释放。设备驱动程序通过调用request_irq()函数申请中断,将一个硬件处理函数挂到相应的处理队列中,通过调用 free_irq()函数释放中断。在open函数中初始化了PPI和DMA的部分相关寄存器。择要描述如下:

*pDMA1_0_Y_COUNT = 625; 二维DMA的外层循环计数寄存器,用于保存外层循环的数目。

*pDMA1_0_X_COUNT = 1728/4; 二维DMA的内层循环计数寄存器,用于保存内层循环的数目。

*pDMA1_0_X_MODIFY= *pDMA1_0_Y_MODIFY = 4; 内层外层循环地址增量寄存器。为有效利用DMA带宽,设置了PPI使之能处理32位DMA,且数据缓冲区是连续的,此处两个增量寄存器都被设置为4。

*pPPI0_FRAME = 625; 在PPI被设置成ITU-656输入模式下,该寄存器用于保存每帧的数据线路数。

(5)read接口函数。在该函数中初始化PPI控制寄存器和DMA配置寄存器及DMA地址寄存器。

*pDMA1_0_START_ADDR = buf;

*pDMA1_0_CONFIG = 0x109B;

*pPPI0_CONTROL = 0x01C5;

设置好寄存器后,使进程进入睡眠队列,等待DMA结束产生的中断将其唤醒。

数据缓冲区在用户区定义,因一帧数据大小确定,所以在用户应用程序中定义的数据存储区大小指定为625*1728B。通过调用函数时传递指针的方式通知数据缓冲区的位置。在该函数中不再使用copy_to_user()函数,此方式节省了内存空间,对于嵌入式应用来说意义重大。事实上每次DMA开始传送的头4个字节总是被忽略掉的,这4个字节是第一个活动视频开始(EAV)代码。即需要的一帧图像数据比实际传送的要少4个字节,但是为了数据处理的方便,仍将数据缓存区定义为完整一帧图像的大小,这样数据缓存区的最后4个字节是下一帧图像的EAV代码。到此,虹膜图像采集的驱动程序基本完成,可以看出,驱动程序与应用程序联系紧密,这也反应了嵌入式系统的一个特点,面向应用,专用性极强。

3 图像数据的预处理

在用户程序中,定义二维数组buf[625][1728]作为图像数据的数据缓冲区,然后通过标准系统调用获取一帧虹膜视频图像数据。虹膜视频图像数据是以ITU-656模式输入的,一帧图像分为奇场和偶场,且原始数据中还有颜色信息、消隐信息和控制字等,因此要获得一幅虹膜图像还需对原始数据进行预处理。提取原始数据中的所有亮度信息,并把两个场的数据有规则的合并到一起,然后按照BMP的图像数据存放顺序重新排列,添加相应的文件头生成灰度BMP图像文件。

BMP文件是Windows保存图像的一种通用位图文件格式,自带颜色信息,调色板管理非常容易,在数字图像处理方面占有重要的地位。

BMP文件大体上分成如下4个部分,位图文件头+位图信息头+调色板+图像数据。

(1)第一部分为位图文件头,长度固定,为l4个字节。

(2)第二部分为位图信息头,长度固定,为40个字节。

(3)第三部分为调色板。需要注意的是真彩色图不需要调色板,它们的位图信息头后面直接是图像数据。而其他位图,包括本文所讨论的8位位图,都需要调色板。

(4)第四部分就是实际的图像数据。

在实际调试过程中还要注意字节对齐问题。比如位图文件头长度固定为l4个字节,但若不注意字节对齐,定义后的结构体实际大小为16个字节,因此定义位图文件头时用__attribute__((packed)),使该结构体长度为14个字节。

4 结论

本文简略概述了Blackfin561处理器的DMA相关寄存器,叙述了在uClinux下PPI接口的驱动程序实现过程及功能,对BMP文件格式进行了简要介绍。所有代码已经在BF561的嵌入式uClinux平台上调试通过,符合设计要求。

本文作者创新点:完成了嵌入式系统上的虹膜图像采集及预处理。在目前国内虹膜识别产业仍处于起步阶段的情况下,本文就虹膜识别技术的实用化做了重要研究,具有重要的实用价值。

下图是实验中拍到的两幅图片

图2 实验中拍到的两幅图片

 

参考文献

[1]杨瑞亚,肖璋嵌入式uClinux内核启动过程分析与设计[J].中文核心期刊《微计算机信息》(嵌入式与SOC )2005 年第21 卷第8-2 期32-33

[2]ADSP-BF561 Blackfin Hardware Preliminar.pdf [EB/OL]. /upload/eWebUpload/200705/20070510112235534.pdf

Analog Devices Ine.02/2005.

[3]陈峰.Blackfin系列DSP原理与系统设计[M].北京:电子工业出版社,2004. 61-72

[4]JONATHAN CORBET,ALESSANDRO RUBINI,GREG KROAH-HARTMAN.《LINUX DEVICE DRIVERS》[M].东南大学出版社,2005.1-70,258-287

关键字:虹膜图像采集  DMA  PPI 引用地址:嵌入式虹膜图像采集及预处理

上一篇:嵌入式MIDI文件格式解析设计与实现
下一篇:基于嵌入式系统的隔离硬件设计

推荐阅读最新更新时间:2024-03-16 12:59

STM32的PWM输入模式设置并用DMA接收数据
环境: 主机:WIN7 开发环境:MDK4.72 MCU:STM32F103 说明: 项目中需要进行红外学习,如果采用输入捕获的方式,因为定时器只能捕获上升沿或者下降沿,所以只能获得周期,而不能得到具体的红外波的高低电平的时间.所以采用PWM输入的方式进行捕获. 采用的是PA8脚,对应TIM1的通道1. 源代码: /********************************************************************* * 函数 ***********************************************************
[单片机]
STM32之ADC实例(基于DMA方式)
ADC简介: ADC(Analog-to-Digital Converter,模/ 数转换器)。也就是将模拟信号转换为数字信号进行处理,在存储或传输时,模数转换器几乎必不可少。 STM32在片上集成的ADC外设非常强大,我使用的奋斗开发板是STM32F103VET6,属于增强型的CPU,它有18个通道,可测量16个外部和2个内部信号源。各通道的A/D转换可以单次,连续,扫描或间断模式执行,ADC的结果可以左对齐或右对齐方式存储在16位数据寄存器中。 ADC工作过程分析: 我们以ADC规则通道转换过程来分析,如上图,所有的器件都是围绕中间的模拟至数字转换器部分展开的。它的左端VREF+,VREF- 等ADC参考电
[单片机]
S3C2440-DMA
[单片机]
stm32F4 配置串口+DMA 接收不定长数据 串口空闲中断
串口是一种很常见的通讯接口,通过串口回传数据是很多智能型的传感器都拥有的特点。 很多智能型传感器内置单片机 通过单片机将原始的数据处理,然后以串口的形式发送给用户单片机,用户单片机在利用串口得来的信息进行决策。 那么有没有一种简化通讯的方式呢 ?那就是串口 +DMA了! 主要思想: 配置一个串口DMA接收 任务,任务搬运的数据量要大于一次通讯的总数据量(也就是DMA 的搬运工作还没结束 我们的数据就已经搬完了) 然后这时候因为串口的总线 没有数据传输了(数据传输频率不是特别高 完全占用总线的情况下,总线肯定会有一段时间空闲!) 这时候 因为串口的总线空闲会触发一个 串口总线控线中断,在这个中断里面 我们进行数据处理(获取感兴趣
[单片机]
stm32F4 配置串口+<font color='red'>DMA</font> 接收不定长数据 串口空闲中断
Nios系统基础上的UItra DMA数据传输模式
引 言   随着消费类电子,如MP3、3G手机、视频终端以及宽带无线网络的普及,对大容量存储设备的需求越来越强烈。传统的SRAM、SDRAM以及DDR SDRAM等存储设备的价格与容量比,远远比硬盘高;光存储设备虽然更加廉价,但是在便携性上却远逊于硬盘解决方案。现在硬盘厂商提供了各种适用于不同用途的廉价海量存储设备,如1 in(英寸)的微硬盘可以应用于各种小巧的便携设备中,2.5in硬盘可以应用于笔记本和移动存储中,3.5in硬盘可以应用于个人PC和工业自动化中等等。   目前,硬盘支持的最为广泛的IDE接口协议中,规定了PIO、DMA以及Ultra DMA三种数据传输模式,其传输速率PIO 多字DMA   Ultra DMA
[嵌入式]
STM32 USART串口DMA 接收和发送的源码详解
硬件平台:STM32F103ZET6; 开发环境:KEIL 4; 先说说应用通讯模式,串口终端的工作方式和迪文屏差不多,终端被动接受MCU发的指令,终端会偶尔主动发送一些数据给MCU(像迪文屏的触摸信息上传)。 串口DMA发送: 发送数据的流程: 前台程序中有数据要发送,则需要做如下几件事 1.在数据发送缓冲区内放好要发送的数据,说明:此数据缓冲区的首地址必须要在DMA初始化的时候写入到DMA配置中去。 2.将数据缓冲区内要发送的数据字节数赋值给发送DMA通道,(串口发送DMA和串口接收DAM不是同一个DMA通道) 3.开启DMA,一旦开启,则DMA开始发送数据,说明一下:在KEIL调试好的时候,D
[单片机]
通过STM32外部中断触发DMA传输
目前STM32家族中的很多系列,比如STM32G0/STM32G4/STM32L4+/STM32H7等都内置了DMAMUX模块。有了它一方面使得DMA请求与DMA控制器之间的映射关系更为灵活方便,另一方面也大大拓展了DMA请求事件,不再局限于外设事件,比方基于GPIO的外部中断事件、或者DMA事件本身来触发DMA传输。 关于DMAMUX的基本结构及功能原理,这里就不说了,这里重点介绍基于STM32G4芯片,使用GPIO的外部中断事件触发DMA传输,通过DMA将内存数据传输到GPIO端口的实现过程,包括基于CubeMx的配置、关键代码及注意点。 本演示例程基于STM32G4系列的Nucleo板进行,按键【PC.13】用来触发
[单片机]
STM32中的DMA的实际应用
DMA部分我用到的相对简单,当然,可能这是新东西,我暂时还用不到它的复杂功能吧。下面用问答的形式表达我的思路。 DMA有什么用? 直接存储器存取用来提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。无须CPU的干预,通过DMA数据可以快速地移动。这就节省了CPU的资源来做其他操作。 有多少个DMA资源? 有两个DMA控制器,DMA1有7个通道,DMA2有5个通道。 数据从什么地方送到什么地方? 外设到SRAM(I2C/UART等获取数据并送入SRAM); SRAM的两个区域之间; 外设到外设(ADC读取数据后送到TIM1控制其产生不同的PWM占空比); SRAM到外设(SRAM中预先保存的数据送入DAC产生各种波形)
[单片机]
STM32中的<font color='red'>DMA</font>的实际应用
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved