李玉鵬,宋維,程超偉
(武漢東湖學院電子信息工程學院,武漢430212)
基于樹莓派的人臉識別考勤系統(tǒng)的開發(fā)與實現(xiàn)
李玉鵬,宋維,程超偉
(武漢東湖學院電子信息工程學院,武漢430212)
提出一種基于樹莓派的人臉識別考勤系統(tǒng),該系統(tǒng)通過使用人臉識別云服務(wù)可實時地對人員進行考勤。文中詳細描述了該系統(tǒng)的搭建和實現(xiàn)過程,為相關(guān)產(chǎn)品提供了一套很好的解決方案。對所設(shè)計的系統(tǒng)進行模擬測試,其測試結(jié)果達到了設(shè)計目標。
樹莓派;人臉識別;考勤系統(tǒng);云服務(wù);Python
人臉識別[1]一度被認為是生物特征識別領(lǐng)域甚至人工智能領(lǐng)域最困難的研究課題之一,但隨著科學技術(shù)的發(fā)展,一系列關(guān)于人臉識別的難題相繼被攻克,人臉識別技術(shù)已被廣泛應(yīng)用于公安刑偵破案、門禁系統(tǒng)、攝像頭監(jiān)視系統(tǒng)、網(wǎng)絡(luò)應(yīng)用、身份辨別、支付系統(tǒng)等與國計民生密切相關(guān)領(lǐng)域。
云計算[2]的興起,為人臉識別技術(shù)的廣泛應(yīng)用鋪平了道路,各大互聯(lián)網(wǎng)企業(yè)相繼開發(fā)了人臉識別技術(shù)云服務(wù),提供了人臉識別的一整套技術(shù)方案,開發(fā)人員可以方便高效地使用其提供的服務(wù)接口對系統(tǒng)進行開發(fā)和調(diào)試。本文利用人臉識別云服務(wù)技術(shù)的特點,基于樹莓派[3]開發(fā)了一個基于人臉識別云服務(wù)的考勤系統(tǒng)。
基于樹莓派的人臉識別考勤系統(tǒng)是將樹莓派采集到的實時待考勤人員的臉部圖像發(fā)送至云端服務(wù),待其處理完畢后再從云端傳回考勤結(jié)果,并將考勤人員的出勤結(jié)果錄入數(shù)據(jù)庫進行保存以備查詢,管理員通過登陸樹莓派即可實現(xiàn)人機交互,在數(shù)據(jù)庫中查詢?nèi)藛T的出勤情況,因此,本系統(tǒng)包括本地的樹莓派終端和云服務(wù)部分。
為適應(yīng)在樹莓派上進行測試及實際應(yīng)用,本文采用編程語言Python2.7[4]進行系統(tǒng)的開發(fā)和設(shè)計,Python語言的高可讀性以及面向?qū)ο蟮奶匦院苓m合本系統(tǒng)的開發(fā),同時人臉識別云服務(wù)也提供了基于Python的SDK。本系統(tǒng)總體結(jié)構(gòu)圖如圖1所示,圖中的本地終端為樹莓派,云服務(wù)采用了騰訊優(yōu)圖人臉識別云服務(wù)[5]。
圖1 系統(tǒng)總體結(jié)構(gòu)圖
本系統(tǒng)的設(shè)計具有全自動考勤的特點,待考勤人員只需將其臉部適當?shù)目拷记跈C攝像處,系統(tǒng)將自動檢測并鎖定人臉,即刻對其進行攝像并將圖像發(fā)送至云端服務(wù)進行處理,待處理完成后,管理人員可通過樹莓派終端或者通過遠程PC登陸MySQL數(shù)據(jù)庫,查看人員的出勤情況,獲悉考勤結(jié)果。為便于讀者的各種終端對本系統(tǒng)進行測試和實際應(yīng)用,開發(fā)的基于人臉識別云服務(wù)的軟件完全可移植,即直接可在各種終端平臺上運行不需做其他改動。系統(tǒng)的實時性是用戶體驗的關(guān)鍵要素,系統(tǒng)正常工作時考勤人員感覺不到卡頓狀況,實時性良好。
2.1 人臉檢測功能的實現(xiàn)
在人臉檢測環(huán)節(jié),用戶無需進行其他操作,系統(tǒng)通過攝像頭自動捕捉屏幕中出現(xiàn)的人臉,在成功捕捉到人臉后,通過攝像頭進行拍照保存。以上過程通過在Python中使用SimpleCV[6]庫的函數(shù)find Haar Features來實現(xiàn),這是一個在圖像中搜索匹配某一特定模式的算法,在SimpleCV庫中自帶了一些模式,如臉、鼻子、眼睛、身體等。find Haar Feature可以分析攝像頭捕捉到的圖像,并從圖像中匹配出對應(yīng)的模式,然后返回匹配的部分在圖像中的坐標位置,使用此函數(shù)可以匹配圖像中的人。首先,利用SimpleCV庫中的Camera函數(shù)設(shè)置圖像尺寸;其次,通過循環(huán)語句不斷執(zhí)行faces=frame.find Haar Features' face')來捕捉用戶在考勤時的圖像,當攝像頭捕捉到人臉后,執(zhí)行frame.save()就可將檢測到的人臉圖像保存在樹莓派本地存儲空間中備用。如果攝像頭沒有捕捉到人臉,系統(tǒng)將繼續(xù)處于待工作狀態(tài),直至檢測到人臉,以上實現(xiàn)了本系統(tǒng)的自動觸發(fā)的功能。在樹莓派上連接好USB攝像頭后,測試結(jié)果如圖2所示。需要說明的是,讀者需了解人臉檢測和人臉識別概念的區(qū)別。
圖2 人臉檢測功能的實現(xiàn)
2.2 騰訊云優(yōu)圖人臉識別云服務(wù)介紹
人臉識別云服務(wù)的識別率及實時性是本系統(tǒng)所必須考慮的問題。本文采用了騰訊優(yōu)圖團隊提供的人臉識別服務(wù)。騰訊云優(yōu)圖人臉識別是由騰訊優(yōu)圖團隊推出的生物識別技術(shù),騰訊優(yōu)圖團隊立足騰訊社交數(shù)據(jù)大平臺,擁有海量數(shù)據(jù)分析與人臉訓練集,累計處理人臉已達數(shù)百億,積累數(shù)千萬人臉身份。
騰訊云優(yōu)圖人臉識別1:N人臉檢索技術(shù),即輸入一張人臉照片,可以從訓練時產(chǎn)生的特定的特征集數(shù)據(jù)庫中找出與之相似的候選人臉,可廣泛應(yīng)用在考勤、通關(guān)、門禁、簽到、黑名單等場景,可針對不同人臉檢索規(guī)模,為客戶提供穩(wěn)定、方便、快捷的人臉檢索解決方案。同時,該技術(shù)注重解決實際應(yīng)用中的問題,包括人臉姿態(tài)、人臉光照、人臉遮擋、人臉年齡變化,通過海量真實場景的訓練數(shù)據(jù),得到世界領(lǐng)先的人臉模型。在目前公開的LWF測試中,人臉驗證可達到99.5%的準確率。
2.3 本地終端與人臉識別云服務(wù)的交互實現(xiàn)
樹莓派與人臉識別云服務(wù)的交互是本文設(shè)計的核心,騰訊優(yōu)圖團隊為方便廣大開發(fā)者使用其技術(shù)服務(wù),開發(fā)了基于各種平臺的SDK,下面對其提供的基于Python的SDK的API進行調(diào)用以實現(xiàn)交互功能,主要包括服務(wù)鑒權(quán)簽名、訓練及識別過程。
首先是鑒權(quán)簽名,SDK的初始化過程中,需要使用項目id和密鑰獲取鑒權(quán)簽名,否則將無法使用上述服務(wù),人臉識別云服務(wù)通過簽名來驗證請求的合法性。登錄騰訊云項目密鑰管理頁面新建密鑰,選擇需要生成密鑰的項目即可產(chǎn)生簽名所需的SecretId,Secret Key。編程時使用函數(shù)Tencent Youtuyun.You Tu(appid,secret_id,secret_ key,userid,end_point)來完成簽名工作,其中的參數(shù)appid為業(yè)務(wù)中的應(yīng)用標識AppId,secret_id為秘鑰SecretId, secret_key為秘鑰Secret Key,userid為用戶id,end_point服務(wù)后臺路徑。上述參數(shù)可在騰訊云服務(wù)開發(fā)平臺的頁面中獲得。
接下來是訓練過程,即分類器的設(shè)計,此過程主要生成可用于識別的參數(shù)。騰訊優(yōu)圖提供的SDK的訓練過程包括新建個體和增加人臉。首先新建個體,使用接口NewPerson(self,person_id,image_path,group_ids,person_ name='',tag='',data_type=0)來完成,其中參數(shù)person_ id為新建的個體id,由用戶指定,需要保證app_id下的唯一性;person_name為個體對應(yīng)的姓名;group_ids為數(shù)組類型,由用戶指定(組默認創(chuàng)建)的個體存放的組id,可以指定多個組id;image_path為包含個體人臉的圖片路徑; tag為備注信息,用戶自解釋字段;data_type用于表示image_path是圖片還是url,0代表圖片,1代表url。
考慮到降低系統(tǒng)的復雜度,避免使用數(shù)據(jù)庫,本系統(tǒng)將url值設(shè)置為0,直接將圖片保存在本地后通過此函數(shù)進行上傳。在后期的管理當中,有事需要對系統(tǒng)進行管理,比如刪除個體或人臉等,此時接口函數(shù)DelPerson (self,person_id)和DelFace(self,person_id,face_ids)就可根據(jù)需要選用,其中參數(shù)person_id為待刪除的個體id, face_ids為數(shù)組類型,為待刪除的人臉id。
因為在進行識別之前,必須先對人臉庫進行訓練,所以實際上訓練和識別在服務(wù)器端是異步執(zhí)行的,相比其他人臉識別云服務(wù),騰訊優(yōu)圖團隊開發(fā)的服務(wù)可自動進行訓練操作,因此不需要開發(fā)者再進行訓練操作。
最后就是識別過程,即通過比對獲得的未知人臉參數(shù)和訓練所得的參數(shù)完成人臉的分類和判別,返回識別結(jié)果。需調(diào)用人臉識別接口FaceIdentify(self,group_id,image_path,data_type=0)將本地保存的待考勤人員的圖像上傳至云服務(wù)端,進行人臉的識別。其中參數(shù)group_id為識別的組id,image_path為待識別的圖片路徑,data_type用于表示image_path是圖片還是url,0代表圖片,1代表url。同理,本文將此函數(shù)的url值設(shè)置為0。
接口調(diào)用統(tǒng)一返回Json格式的返回結(jié)果,可以通過返回信息了解各個參數(shù)的具體意義。
2.4 考勤系統(tǒng)數(shù)據(jù)庫的建立
本次開發(fā)中使用的數(shù)據(jù)庫為MySQL[7],用于管理考勤人員的出勤信息,存入數(shù)據(jù)庫的信息只有管理員用管理帳號登錄后才能查詢。下面詳細介紹如何在樹莓派中建立考勤系統(tǒng)的數(shù)據(jù)庫。
首先需要在樹莓派上安裝MySQL,先使用管理員權(quán)限運行sudoapt-get update獲得最新的軟件包的列表,再繼續(xù)使用管理員權(quán)限運行apt-get獲取最新的MySQL及Python的編程接口(之后用于數(shù)據(jù)庫編程):sudo apt-get install mysql-server python-mysqldb,安裝過程中需要輸入root管理員的密碼,該密碼之后用于訪問數(shù)據(jù)庫系統(tǒng)。
在本地MySQL創(chuàng)建庫“test”,表“myfacetest”和3個列“id”、“name”“attend_time”,分別表示考勤人員的員工號、姓名和出勤時間。詳細的過程如下:使用“MYSQL-uroot-p;”命令登陸本地MySQL,“CREATE DATABASES test;”創(chuàng)建數(shù)據(jù)庫“test”,“USE test;”選擇數(shù)據(jù)庫“test”,“CREATE TABLE myfacetest;”創(chuàng)建表“myfacetest”,“CREATE TABLE myfacetest(idint(10),name varchar(20),attend_time char(25));”在表中創(chuàng)建3個列“id”、“name”“attend_time”,完成后查看建好的表“myfacetest”,如圖3所示。
圖3 建立的表“myfacetest”
上述過程詳細地描述了本系統(tǒng)考勤人員數(shù)據(jù)庫的建立過程,在本系統(tǒng)Python主程序中使用MySQL數(shù)據(jù)庫的Python編程接口“conn=MySQLLdb.connect(host=' localhost',port=3306,user='root',passwd='XXXXXX', db='test')”、“cur=conn.cursor()”、“cur.execute()”、“conn.commit()”進行編程,當人臉識別云服務(wù)通過json格式返回相關(guān)的信息后,根據(jù)相應(yīng)的考勤人員的相關(guān)信息進行匹配登記,即可將相關(guān)考勤人員的出勤信息進行入庫保存并且實時更新,管理人員可通過樹莓派終端或者通過遠程PC登陸MySQL數(shù)據(jù)庫,查看人員的出勤情況。
經(jīng)過上述的設(shè)計和開發(fā),本文最終實現(xiàn)了設(shè)計的預(yù)期,采用基于UVC協(xié)議的USB攝像頭,通過調(diào)用SimpleCV的相關(guān)算法,實現(xiàn)了系統(tǒng)無需進行任何人工干預(yù)的自動促發(fā)。由于本文提出的基于人臉識別云服務(wù)的考勤系統(tǒng),其人臉識別服務(wù)并不在樹莓派上進行,所以極大地節(jié)省了本地終端的資源耗費,本文采用的“樹莓派2B+”,其擁有32位ARM-Cortex-A7架構(gòu)的雙核CPU,并且配備了各種常用外設(shè),如以太網(wǎng)端口及USB端口等,配合攝像頭,實驗表明本系統(tǒng)可流暢地運行在樹莓派上,達到了高實時性的需求。
首先,需要說明的是,讀者需區(qū)分識別成功率與識別率概念上的區(qū)別,識別成功率表征的是總測試次數(shù)中成功地識別出該人員身份所占的次數(shù),而識別率表征的是各人員臉部特征與訓練時對相應(yīng)人員提取到的臉部特征的相近程度。顯然,識別率決定了識別成功率,一旦識別率達到系統(tǒng)所設(shè)定的閾值,該人員的考勤即被判為成功。在一般考勤系統(tǒng)的設(shè)計中,根據(jù)考勤場合的嚴格程度,一般此閾值在60%~99.9%之間。為充分而可靠地體現(xiàn)人臉識別云服務(wù)的識別率,本系統(tǒng)測試時通過分別對多個不同的人進行識別測試,識別結(jié)果如圖4所示,可以看出,對10人進行測試,識別成功率為100%。
圖4 系統(tǒng)識別成功率測試結(jié)果
圖5為本系統(tǒng)總體測試后服務(wù)器端返回的10位測試人員中其中一人的識別率及其他參數(shù),其余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。從測試結(jié)果可以看出,人員平均識別率在95.6%以上,最低為90.8%,本系統(tǒng)完全可以勝任單位的人員考勤工作。
本文依托人臉識別云服務(wù),基于樹莓派設(shè)計了一種考勤系統(tǒng),其識別率及實時性均可滿足設(shè)計者需求。通過詳細地描述基于樹莓派的人臉識別考勤系統(tǒng)的搭建和實現(xiàn)過程,為相關(guān)產(chǎn)品提供了一套解決方案,這方面的研究將有助于加速云服務(wù)及智能硬件發(fā)展的進程,具有較高的研究價值。
[1]沈理,劉翼光,熊志勇.人臉識別原理及算法——動態(tài)人臉識別系統(tǒng)研究[M].北京:人民郵電出版社,2014.
[2]Michael J kavis,陳志偉.云計算服務(wù)模式(SaaS、PaaS和IaaS)設(shè)計決策[M].北京:電子工業(yè)出版社,2015.
[3]Matt Richardson,Shawn Wallace.Getting Started with Raspberry Pi[M].Sebastopol:O'Reilly Media,2012.
[4]Magnus Lie Hetland.PYTHON基礎(chǔ)教程(修訂版)[M]. 2版.司維,曾軍葳,譚頻華,譯.北京:人民郵電出版社, 2014.
[5]騰訊云[EB/OL].[2016-01].https://www.qcloud.com/ doc/product/277/優(yōu)圖人臉識別簡介.
[6]NathanOostendorp,Anthony Oliver,KatherineScott.Practical Computer Vision withSimpleCV[M].Sebastopol:O'Reilly Media,2012.
[7]唐漢明,翟振興,關(guān)寶軍.深入淺出MySQL(數(shù)據(jù)庫開發(fā)優(yōu)化與管理維護第2版)[M].北京:人民郵電出版社,2014.
李玉鵬(本科),主要研究方向為單片機及嵌入式系統(tǒng)的開發(fā)。
(責任編輯:楊迪娜 收修改稿日期: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