李玉鵬,宋維,程超偉
(武漢東湖學院電子信息工程學院,武漢430212)
基于樹莓派的人臉識別考勤系統的開發與實現
李玉鵬,宋維,程超偉
(武漢東湖學院電子信息工程學院,武漢430212)
提出一種基于樹莓派的人臉識別考勤系統,該系統通過使用人臉識別云服務可實時地對人員進行考勤。文中詳細描述了該系統的搭建和實現過程,為相關產品提供了一套很好的解決方案。對所設計的系統進行模擬測試,其測試結果達到了設計目標。
樹莓派;人臉識別;考勤系統;云服務;Python
人臉識別[1]一度被認為是生物特征識別領域甚至人工智能領域最困難的研究課題之一,但隨著科學技術的發展,一系列關于人臉識別的難題相繼被攻克,人臉識別技術已被廣泛應用于公安刑偵破案、門禁系統、攝像頭監視系統、網絡應用、身份辨別、支付系統等與國計民生密切相關領域。
云計算[2]的興起,為人臉識別技術的廣泛應用鋪平了道路,各大互聯網企業相繼開發了人臉識別技術云服務,提供了人臉識別的一整套技術方案,開發人員可以方便高效地使用其提供的服務接口對系統進行開發和調試。本文利用人臉識別云服務技術的特點,基于樹莓派[3]開發了一個基于人臉識別云服務的考勤系統。
基于樹莓派的人臉識別考勤系統是將樹莓派采集到的實時待考勤人員的臉部圖像發送至云端服務,待其處理完畢后再從云端傳回考勤結果,并將考勤人員的出勤結果錄入數據庫進行保存以備查詢,管理員通過登陸樹莓派即可實現人機交互,在數據庫中查詢人員的出勤情況,因此,本系統包括本地的樹莓派終端和云服務部分。
為適應在樹莓派上進行測試及實際應用,本文采用編程語言Python2.7[4]進行系統的開發和設計,Python語言的高可讀性以及面向對象的特性很適合本系統的開發,同時人臉識別云服務也提供了基于Python的SDK。本系統總體結構圖如圖1所示,圖中的本地終端為樹莓派,云服務采用了騰訊優圖人臉識別云服務[5]。

圖1 系統總體結構圖
本系統的設計具有全自動考勤的特點,待考勤人員只需將其臉部適當的靠近考勤機攝像處,系統將自動檢測并鎖定人臉,即刻對其進行攝像并將圖像發送至云端服務進行處理,待處理完成后,管理人員可通過樹莓派終端或者通過遠程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數據庫,查看人員的出勤情況。
經過上述的設計和開發,本文最終實現了設計的預期,采用基于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