APP下载

基于嵌入式和OpenCV 技术的人脸识别考勤系统

2019-11-18严正国王家冰

现代计算机 2019年28期
关键词:开发板跨平台内核

严正国,王家冰

(西安石油大学光电油气测井与检测国家教育部重点实验室,西安710065)

0 引言

当今社会,大多数公司、企业都会对员工的上、下班进行考勤。当前的卡片打卡机防作弊机制不完全,只要手中有他人的卡片就可以替代打卡,市面上也出现了指纹式打卡机,这种打卡机指纹容易磨损,同时指纹套等物品的出现也说明了指纹打卡的不可靠性。如今,生物特征识别技术应用需求广泛,而人脸识别技术又以其非强制性、非接触性、并发性和普遍性的特点,得到了广泛的应用。嵌入式系统作为时下最流行的智能设备开发平台,通过OpenCV 这个资源丰富的跨平台计算机视觉库,将人脸识别技术与嵌入式系统相结合,显著提高了开发的效率。

1 系统整体框架设计

系统总体设计方案主要包括以下两个内容:

一是嵌入式硬件系统的搭建,主要包括了硬件平台的选择、Bootloader 的移植,Linux 内核的裁剪与移植和根文件系统的构建。

二是软件系统的编程,主要涵盖了对基于OpenCV的人脸识别技术的研究与应用程序的设计和编写。

2 系统硬件设计

本设计选用了mini2440 开发板,其采用的微控制器是三星公司推出的S3C2440A,基于ARM920T 核心,具有性能高、功耗低、成本低的特点。

2.1 Bootloader的移植

Bootloader 是开机启动系统时的一小段程序,通过这段程序来初始化硬件与建立内存空间的映射表,从而建立适当的软硬件环境。u-boot 是最常用的一种Bootloader,它是一个开源的通用引导程序,同时支持x86、ARM 和PowerPC 等多种处理器架构。

(1)网上下载相应版本的u-boot.bin 到虚拟机的tftpboot。

(2)在开发板上配置TFTP 服务器的IP 地址,setenv serverip 192.168.1.xx(虚拟机ip 地址),并通过tftp 把u-boot.bin 下载到开发板内存。

图1 系统流程图

(3)在开发板上烧写u-boot.bin。

2.2 Linux内核的裁剪和移植

需要对内核进行适当的修改才能更好适配开发板,需要对内核进行配置并重新Makefile。

(1)官网下载与开发板对应的内核版本,make${PLATFORM}_defconfig 确定平台。

(2)make menuconfig 进入图形化界面配置内核信息,进行内核裁剪。

(3)make uImage 编译内核源码。

(4)tftp 0x30008000 uImage 在uboot 环境下载内核镜像,bootm 0x30008000 启动内核。

图2 内核裁剪界面

2.3 根文件系统的构建

在Linux 系统我们也需要把磁盘和Flash 分为多个分区,便于日常的使用,常用的存储设备文件系统类型有jffs2、yaffs2、ubifs、ramdisk、nfs,等等。在网上下载一个常用的根文件系统放到虚拟机nfs 目录中,然后通过nfs 挂载的方式实现根文件系统的搭建。

图3 开发板根文件系统

3 系统软件设计

根据设计的需求决定采用Qt Creator 作为图形应用程序开发工具,Qt Creator 是一个跨平台的C++图形用户界面应用程序框架,它为应用程序开发者提供建立艺术级图形界面所需的所有功能。使用Qt Creator主要是因为它跨平台,支持Windows 和Linux 等平台;函数接口简单,易于编程;开发效率高,有成熟的软件框架,可以快速地编写应用程序;支持嵌入式开发。

OpenCV 是一个开源的跨平台计算机视觉库,它为我们提供了大量的图像处理的C 语言函数和C++类,供学习者免费使用。我们可以在嵌入式Linux 环境下对OpenCV 库进行编译,将编译好的OpenCV 库移植到开发板的根文件系统的/usr/lib 目录,人脸识别的具体识别方法将利用OpenCV 的函数进行编写。

图形的界面的开发主要使用QtGUIApplication 的进行设计,主要界面包含了摄像头、人脸识别方法以及必要的功能按钮。

图4 Qt Creator设计界面

图5 软件流程图

人脸识别模块的编写主要使用了OpenCV 中的FaceRecognizer 类,主要的功能是实现了对于摄像头采集的图片的训练和预测,分别对应train 和predict 函数。训练的时候,将照片的信息保存在vectorsrcVec 中,照片的标签保存在vectorlabels里,训练完成后将以XML 格式来保存训练的结果。预测的时候,将新获得的图片与XML 特征值文件进行比对,返回识别到的图片在人脸库的分组、用户名与预测值。程序中的关键代码如下:

//创建人脸识别类

Ptr faceClass = EigenFaceRecognizer::create();

PtrfisherClass=FisherFaceRecognizer::create();

PtrlpbhClass=LBPHFaceRecognizer::create();

//训练

faceClass->train(images,labels);

fisherClass->train(images,labels);

lpbhClass->train(images,labels);

//保存训练的分类器

faceClass->save("faceClass.xml");

fisherClass->save("fisherClass.xml");

lpbhClass->save("lpbhClass.xml");

//加载分类器

faceClass->load("faceClass.xml");

fisherClass->load("fisherClass.xml");

lpbhClass->load("lpbhClass.xml");

//使用训练好的分类器进行预测。

int faceResult=faceClass->predict(src_5);

训练和预测时使用的人脸识别方法是特征脸EigenFace、Fisher 脸FisherFace、LBP 直方图LBPHFace,分别调用函数cv::face::EigenFaceRecognizer::create、cv::face::FisherFaceRecognizer::create 和 cv::face::LBPHFaceRecognizer::create 建立模型。

识别结果如图6 所示,正确识别了组名、用户名并返回了预测值,我们可以看到预测值达到91.35。根据笔者试验,一般预测值达到80 以上时,识别结果均准确无误,成功实现了人脸识别。

图6 人脸识别结果

4 结语

通过开源的OpenCV 计算机视觉库,使得人脸识别技术在嵌入式系统得以实现,可以根据实际需求具体定制人脸识别设备,在嵌入式生物识别领域具有一定的应用前景。但本设计亦有考虑不足之处,在实际工程中还需要进一步优化与改进。

(1)系统在经过长时间的运行之后,是否还能保持设备可靠的运行。

(2)信息采集模块由于实际应用的不确定性,如果获取的照片角度不佳或光照不足,是否会对人脸识别模块造成影响。

猜你喜欢

开发板跨平台内核
跨层级网络、跨架构、跨平台的数据共享交换关键技术研究与系统建设
强化『高新』内核 打造农业『硅谷』
一款游戏怎么挣到全平台的钱?
活化非遗文化 承启设计内核
潜力双跨平台:进阶:谁将跨入下一个“十大”?
基于STM32H7的FDCAN通信系统设计与实现∗
微软发布新Edge浏览器预览版下载换装Chrome内核
开发板在单片机原理及接口技术课程教学中的应用
ARM宣布mbed Enabled Freescale FRDM—K64F开发板通过微软认证
基于C++语言的跨平台软件开发的设计