随着计算机和网络技术的发展,信息安全显示出前所未有的重要性,而身份识别作为保证信息安全的必要前提,也越来越受到重视。虹膜识别技术是基于眼睛虹膜的生物识别技术。虹膜的终生不变性以及信息提取的非接触性等特性,使其成为各项生物识别技术中最突出的一项。本文论述了在基于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,
};
(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平台上调试通过,符合设计要求。
本文作者创新点:完成了嵌入式系统上的虹膜图像采集及预处理。在目前国内虹膜识别产业仍处于起步阶段的情况下,本文就虹膜识别技术的实用化做了重要研究,具有重要的实用价值。
下图是实验中拍到的两幅图片
解码器的工作原理
德国Roboworker直角坐标机器人,应用于玻璃生产线的设计
宝马、高通取得巨大胜利 欧盟拒绝WiFi作为车联网技术标准的提案
屏幕专家预测苹果iPhone8:OLED屏是核心改动
浅谈6G智能超表面技术的先进算法与架构设计
基于嵌入式操作系统uClinux的虹膜图像采集以及预处理
食用油过氧化值检测仪的产品特点是怎样的
建博会完美收官 | 罗曼斯全面升级,绽放品牌实力!
汽车存储市场的国产机遇
盘古大模型是干什么的,一文浅谈盘古大模型
采用特殊工艺方法制备的硝基碳制成高功率电池 明显改善了电池的放电参数
亚太地区贯彻智能工厂的制造商数量,在未来5年内将增加近3倍
TI高精度、低功耗温湿度传感器 HDC1050加入Mouser产品阵营
华为欧拉大会最新消息:华为正式捐赠欧拉操作系统
K&S在Flip Chip以及Mini LED等方面的进展
2018 Qualcomm创投红杉中国种子基金前沿科技创业大赛在杭州成功举行
首款采用自主国产芯片的光威弈PRO DDR4内存条实现量产
iPhone8什么时候上市:iPhone8最新设计曝光,黑科技逆天
运算放大器关键术语
2020年对Zoom来说是个好年头