基于树莓派的人脸识别考勤系统的开发与实现

2016-03-20 09:14李玉鹏宋维程超伟
单片机与嵌入式系统应用 2016年11期
关键词:树莓考勤识别率

李玉鹏,宋维,程超伟

(武汉东湖学院电子信息工程学院,武汉430212)

基于树莓派的人脸识别考勤系统的开发与实现

李玉鹏,宋维,程超伟

(武汉东湖学院电子信息工程学院,武汉430212)

提出一种基于树莓派的人脸识别考勤系统,该系统通过使用人脸识别云服务可实时地对人员进行考勤。文中详细描述了该系统的搭建和实现过程,为相关产品提供了一套很好的解决方案。对所设计的系统进行模拟测试,其测试结果达到了设计目标。

树莓派;人脸识别;考勤系统;云服务;Python

引 言

人脸识别[1]一度被认为是生物特征识别领域甚至人工智能领域最困难的研究课题之一,但随着科学技术的发展,一系列关于人脸识别的难题相继被攻克,人脸识别技术已被广泛应用于公安刑侦破案、门禁系统、摄像头监视系统、网络应用、身份辨别、支付系统等与国计民生密切相关领域。

云计算[2]的兴起,为人脸识别技术的广泛应用铺平了道路,各大互联网企业相继开发了人脸识别技术云服务,提供了人脸识别的一整套技术方案,开发人员可以方便高效地使用其提供的服务接口对系统进行开发和调试。本文利用人脸识别云服务技术的特点,基于树莓派[3]开发了一个基于人脸识别云服务的考勤系统。

1 系统总体方案

基于树莓派的人脸识别考勤系统是将树莓派采集到的实时待考勤人员的脸部图像发送至云端服务,待其处理完毕后再从云端传回考勤结果,并将考勤人员的出勤结果录入数据库进行保存以备查询,管理员通过登陆树莓派即可实现人机交互,在数据库中查询人员的出勤情况,因此,本系统包括本地的树莓派终端和云服务部分。

为适应在树莓派上进行测试及实际应用,本文采用编程语言Python2.7[4]进行系统的开发和设计,Python语言的高可读性以及面向对象的特性很适合本系统的开发,同时人脸识别云服务也提供了基于Python的SDK。本系统总体结构图如图1所示,图中的本地终端为树莓派,云服务采用了腾讯优图人脸识别云服务[5]。

图1 系统总体结构图

2 系统主要功能实现

本系统的设计具有全自动考勤的特点,待考勤人员只需将其脸部适当的靠近考勤机摄像处,系统将自动检测并锁定人脸,即刻对其进行摄像并将图像发送至云端服务进行处理,待处理完成后,管理人员可通过树莓派终端或者通过远程PC登陆MySQL数据库,查看人员的出勤情况,获悉考勤结果。为便于读者的各种终端对本系统进行测试和实际应用,开发的基于人脸识别云服务的软件完全可移植,即直接可在各种终端平台上运行不需做其他改动。系统的实时性是用户体验的关键要素,系统正常工作时考勤人员感觉不到卡顿状况,实时性良好。

2.1 人脸检测功能的实现

在人脸检测环节,用户无需进行其他操作,系统通过摄像头自动捕捉屏幕中出现的人脸,在成功捕捉到人脸后,通过摄像头进行拍照保存。以上过程通过在Python中使用SimpleCV[6]库的函数find Haar Features来实现,这是一个在图像中搜索匹配某一特定模式的算法,在SimpleCV库中自带了一些模式,如脸、鼻子、眼睛、身体等。find Haar Feature可以分析摄像头捕捉到的图像,并从图像中匹配出对应的模式,然后返回匹配的部分在图像中的坐标位置,使用此函数可以匹配图像中的人。首先,利用SimpleCV库中的Camera函数设置图像尺寸;其次,通过循环语句不断执行faces=frame.find Haar Features' face')来捕捉用户在考勤时的图像,当摄像头捕捉到人脸后,执行frame.save()就可将检测到的人脸图像保存在树莓派本地存储空间中备用。如果摄像头没有捕捉到人脸,系统将继续处于待工作状态,直至检测到人脸,以上实现了本系统的自动触发的功能。在树莓派上连接好USB摄像头后,测试结果如图2所示。需要说明的是,读者需了解人脸检测和人脸识别概念的区别。

图2 人脸检测功能的实现

2.2 腾讯云优图人脸识别云服务介绍

人脸识别云服务的识别率及实时性是本系统所必须考虑的问题。本文采用了腾讯优图团队提供的人脸识别服务。腾讯云优图人脸识别是由腾讯优图团队推出的生物识别技术,腾讯优图团队立足腾讯社交数据大平台,拥有海量数据分析与人脸训练集,累计处理人脸已达数百亿,积累数千万人脸身份。

腾讯云优图人脸识别1:N人脸检索技术,即输入一张人脸照片,可以从训练时产生的特定的特征集数据库中找出与之相似的候选人脸,可广泛应用在考勤、通关、门禁、签到、黑名单等场景,可针对不同人脸检索规模,为客户提供稳定、方便、快捷的人脸检索解决方案。同时,该技术注重解决实际应用中的问题,包括人脸姿态、人脸光照、人脸遮挡、人脸年龄变化,通过海量真实场景的训练数据,得到世界领先的人脸模型。在目前公开的LWF测试中,人脸验证可达到99.5%的准确率。

2.3 本地终端与人脸识别云服务的交互实现

树莓派与人脸识别云服务的交互是本文设计的核心,腾讯优图团队为方便广大开发者使用其技术服务,开发了基于各种平台的SDK,下面对其提供的基于Python的SDK的API进行调用以实现交互功能,主要包括服务鉴权签名、训练及识别过程。

首先是鉴权签名,SDK的初始化过程中,需要使用项目id和密钥获取鉴权签名,否则将无法使用上述服务,人脸识别云服务通过签名来验证请求的合法性。登录腾讯云项目密钥管理页面新建密钥,选择需要生成密钥的项目即可产生签名所需的SecretId,Secret Key。编程时使用函数Tencent Youtuyun.You Tu(appid,secret_id,secret_ key,userid,end_point)来完成签名工作,其中的参数appid为业务中的应用标识AppId,secret_id为秘钥SecretId, secret_key为秘钥Secret Key,userid为用户id,end_point服务后台路径。上述参数可在腾讯云服务开发平台的页面中获得。

接下来是训练过程,即分类器的设计,此过程主要生成可用于识别的参数。腾讯优图提供的SDK的训练过程包括新建个体和增加人脸。首先新建个体,使用接口NewPerson(self,person_id,image_path,group_ids,person_ name='',tag='',data_type=0)来完成,其中参数person_ id为新建的个体id,由用户指定,需要保证app_id下的唯一性;person_name为个体对应的姓名;group_ids为数组类型,由用户指定(组默认创建)的个体存放的组id,可以指定多个组id;image_path为包含个体人脸的图片路径; tag为备注信息,用户自解释字段;data_type用于表示image_path是图片还是url,0代表图片,1代表url。

考虑到降低系统的复杂度,避免使用数据库,本系统将url值设置为0,直接将图片保存在本地后通过此函数进行上传。在后期的管理当中,有事需要对系统进行管理,比如删除个体或人脸等,此时接口函数DelPerson (self,person_id)和DelFace(self,person_id,face_ids)就可根据需要选用,其中参数person_id为待删除的个体id, face_ids为数组类型,为待删除的人脸id。

因为在进行识别之前,必须先对人脸库进行训练,所以实际上训练和识别在服务器端是异步执行的,相比其他人脸识别云服务,腾讯优图团队开发的服务可自动进行训练操作,因此不需要开发者再进行训练操作。

最后就是识别过程,即通过比对获得的未知人脸参数和训练所得的参数完成人脸的分类和判别,返回识别结果。需调用人脸识别接口FaceIdentify(self,group_id,image_path,data_type=0)将本地保存的待考勤人员的图像上传至云服务端,进行人脸的识别。其中参数group_id为识别的组id,image_path为待识别的图片路径,data_type用于表示image_path是图片还是url,0代表图片,1代表url。同理,本文将此函数的url值设置为0。

接口调用统一返回Json格式的返回结果,可以通过返回信息了解各个参数的具体意义。

2.4 考勤系统数据库的建立

本次开发中使用的数据库为MySQL[7],用于管理考勤人员的出勤信息,存入数据库的信息只有管理员用管理帐号登录后才能查询。下面详细介绍如何在树莓派中建立考勤系统的数据库。

首先需要在树莓派上安装MySQL,先使用管理员权限运行sudoapt-get update获得最新的软件包的列表,再继续使用管理员权限运行apt-get获取最新的MySQL及Python的编程接口(之后用于数据库编程):sudo apt-get install mysql-server python-mysqldb,安装过程中需要输入root管理员的密码,该密码之后用于访问数据库系统。

在本地MySQL创建库“test”,表“myfacetest”和3个列“id”、“name”“attend_time”,分别表示考勤人员的员工号、姓名和出勤时间。详细的过程如下:使用“MYSQL-uroot-p;”命令登陆本地MySQL,“CREATE DATABASES test;”创建数据库“test”,“USE test;”选择数据库“test”,“CREATE TABLE myfacetest;”创建表“myfacetest”,“CREATE TABLE myfacetest(idint(10),name varchar(20),attend_time char(25));”在表中创建3个列“id”、“name”“attend_time”,完成后查看建好的表“myfacetest”,如图3所示。

图3 建立的表“myfacetest”

上述过程详细地描述了本系统考勤人员数据库的建立过程,在本系统Python主程序中使用MySQL数据库的Python编程接口“conn=MySQLLdb.connect(host=' localhost',port=3306,user='root',passwd='XXXXXX', db='test')”、“cur=conn.cursor()”、“cur.execute()”、“conn.commit()”进行编程,当人脸识别云服务通过json格式返回相关的信息后,根据相应的考勤人员的相关信息进行匹配登记,即可将相关考勤人员的出勤信息进行入库保存并且实时更新,管理人员可通过树莓派终端或者通过远程PC登陆MySQL数据库,查看人员的出勤情况。

3 功能测试

经过上述的设计和开发,本文最终实现了设计的预期,采用基于UVC协议的USB摄像头,通过调用SimpleCV的相关算法,实现了系统无需进行任何人工干预的自动促发。由于本文提出的基于人脸识别云服务的考勤系统,其人脸识别服务并不在树莓派上进行,所以极大地节省了本地终端的资源耗费,本文采用的“树莓派2B+”,其拥有32位ARM-Cortex-A7架构的双核CPU,并且配备了各种常用外设,如以太网端口及USB端口等,配合摄像头,实验表明本系统可流畅地运行在树莓派上,达到了高实时性的需求。

首先,需要说明的是,读者需区分识别成功率与识别率概念上的区别,识别成功率表征的是总测试次数中成功地识别出该人员身份所占的次数,而识别率表征的是各人员脸部特征与训练时对相应人员提取到的脸部特征的相近程度。显然,识别率决定了识别成功率,一旦识别率达到系统所设定的阈值,该人员的考勤即被判为成功。在一般考勤系统的设计中,根据考勤场合的严格程度,一般此阈值在60%~99.9%之间。为充分而可靠地体现人脸识别云服务的识别率,本系统测试时通过分别对多个不同的人进行识别测试,识别结果如图4所示,可以看出,对10人进行测试,识别成功率为100%。

图4 系统识别成功率测试结果

图5为本系统总体测试后服务器端返回的10位测试人员中其中一人的识别率及其他参数,其余9人的识别率分别为:97.749 105、98.173 032、98.686 947、90.844 358、 93.997 826、92.598 704、98.000 685、94.314 138、30 99.106 476。从测试结果可以看出,人员平均识别率在95.6%以上,最低为90.8%,本系统完全可以胜任单位的人员考勤工作。

结 语

本文依托人脸识别云服务,基于树莓派设计了一种考勤系统,其识别率及实时性均可满足设计者需求。通过详细地描述基于树莓派的人脸识别考勤系统的搭建和实现过程,为相关产品提供了一套解决方案,这方面的研究将有助于加速云服务及智能硬件发展的进程,具有较高的研究价值。

[1]沈理,刘翼光,熊志勇.人脸识别原理及算法——动态人脸识别系统研究[M].北京:人民邮电出版社,2014.

[2]Michael J kavis,陈志伟.云计算服务模式(SaaS、PaaS和IaaS)设计决策[M].北京:电子工业出版社,2015.

[3]Matt Richardson,Shawn Wallace.Getting Started with Raspberry Pi[M].Sebastopol:O'Reilly Media,2012.

[4]Magnus Lie Hetland.PYTHON基础教程(修订版)[M]. 2版.司维,曾军葳,谭频华,译.北京:人民邮电出版社, 2014.

[5]腾讯云[EB/OL].[2016-01].https://www.qcloud.com/ doc/product/277/优图人脸识别简介.

[6]NathanOostendorp,Anthony Oliver,KatherineScott.Practical Computer Vision withSimpleCV[M].Sebastopol:O'Reilly Media,2012.

[7]唐汉明,翟振兴,关宝军.深入浅出MySQL(数据库开发优化与管理维护第2版)[M].北京:人民邮电出版社,2014.

李玉鹏(本科),主要研究方向为单片机及嵌入式系统的开发。

(责任编辑:杨迪娜 收修改稿日期:2016-05-10)

Attendance System of Face Recognition Based on Raspberry Pi

Li Yupeng,Song Wei,Cheng Chaowei
(College of Electronic Information Engineering,Wuhan Donghu University,Wu Han 430212,China)

An attendance system of face recognition based on Raspberry Pi is proposed,which can realize the attendance using the face recognition cloud service.The construction and implementation process of the system are introduced,it provides a good solution for the related products.The test of the system is simulated,and the results achieves the design goal.

Raspberry Pi;face recognition;attendance system;cloud service;Python

TP11

:A

猜你喜欢
树莓考勤识别率
基于类图像处理与向量化的大数据脚本攻击智能检测
基于人脸识别技术的考勤应用研究
基于树莓派的骑行智能头盔设计
基于真耳分析的助听器配戴者言语可懂度指数与言语识别率的关系
智能人脸识别考勤系统
浅谈电子考勤的优势及简介
提升高速公路MTC二次抓拍车牌识别率方案研究
基于树莓派的远程家居控制系统的设计
便携式指纹考勤信息管理系统设计
高速公路机电日常维护中车牌识别率分析系统的应用