員工考勤打卡時,如何避免非本人代替打卡?

摘要:使用APP進行打卡時,為避免非本人及非真人現場打卡的情況出現,想結合華為雲的人臉識別能力,通過調用API,達成可檢測是否本人且真人現場打卡的效果。

本文分享自華為雲社區《員工考勤打卡時,如何避免非本人代替打卡?》,作者: HuaweiCloudDeveloper 。

1、背景

使用APP進行打卡時,為避免非本人及非真人現場打卡的情況出現,想結合華為雲的人臉識別能力,通過調用API,達成可檢測是否本人且真人現場打卡的效果。

2、雲服務介紹

華為雲FRS:人臉識別服務(Face Recognition Service),能夠在圖像中快速檢測人臉、分析人臉關鍵點信息、獲取人臉屬性、實現人臉的精確比對和檢索。該服務可應用於身份驗證、電子考勤、客流分析等場景。

華為雲FunctionGraph:函數工作流(FunctionGraph)是一項基於事件驅動的函數託管計算服務。通過函數工作流,只需編寫業務函數代碼並設置運行的條件,無需配置和管理服務器等基礎設施,函數以彈性、免運維、高可靠的方式運行。

華為雲APIG:API網關(API Gateway)是為企業開發者及合作夥伴提供的高性能、高可用、高安全的API託管服務, 幫助企業輕鬆構建、管理和部署不同規模的API。簡單、快速、低成本、低風險的實現內部系統集成、成熟業務能力開放及業務能力變現。

華為雲OBS: 對象存儲服務(Object Storage Service,OBS)是一個基於對象的海量存儲服務,為客戶提供海量、安全、高可靠、低成本的數據存儲能力,使用時無需考慮容量限制,並且提供多種存儲類型供選擇,滿足客戶各類業務場景訴求。

華為雲DNS:雲解析服務(Domain Name Service)提供高可用,高擴展的權威DNS服務和DNS管理服務,把人們常用的域名或應用資源轉換成用於計算機連接的IP地址,從而將最終用戶路由到相應的應用資源上。此服務默認開通,免費使用。

3 、方案設計

3.1 方案簡述

通過APIG調用functiongraph函數,在functiongraph上完成人臉識別-活體檢測、人臉識別-人臉比對等API的調用,並將響應結果通過API返回給APP。實現APP調用一次API即可完成人臉識別的功能。

  1. 人臉識別服務的人臉比對功能,可實現檢測是否其本人打卡。
  2. 人臉識別服務的活體檢測功能,可實現檢測是否活人打卡。
  3. 使用Functiongraph的函數,APP端只需考慮調用一個API,且只需考慮人臉識別的總體輸入和返回結果。
  4. Functiongraph由APIG來調用,利用APPkey、APPsecret及HTTPS,解決了APP端調用的安全認證等問題。
  5. OBS桶用來存儲人臉照片,通過約定的用戶標識做文件存儲路徑,易於管理和使用。

3.2 方案架構圖

0、初始化:前置準備工作,新建一個OBS桶做人臉庫,將員工的人臉照片存放到人臉庫,並把以user-id 或自定義字段作為路徑,標識員工。

1、員工登錄APP後,進行人臉識別時,將通過APIG來調用functionGraph,上傳關鍵信息:攝像頭捕獲的照片或視頻、員工的人臉庫標識(user-id)。

2、functionGraph調用活體檢測API,傳入照片/視頻(根據需求選擇動作活體檢測/靜默活體檢測,推薦靜默活體檢測)。

註:本方案採用靜默活體檢測方式,APP端上傳的照片提前轉換為base64格式

3、活體檢測API返迴響應:有confidence、picture(base64)。

4、在functionGraph中調用OBS接口,通過user-id從OBS人臉庫獲取庫中的員工照片。

5、通過代碼將從OBS獲取的照片文件,轉換為base64格式。

6、將兩個base64格式的照片作為輸入參數調用人臉比對API 。(備註:此處可根據需求,是否需要多次調用API,使用多個照片進行驗證)

7、人臉比對API返回包含了similarity的響應。

8、functionGraph將similarity、confidence傳回給APP/後端。(備註:也可直接在functionGraph完成判定,返回人臉識別結果)

3.3 Functiongraph實現代碼

代碼附件:(附件請見文章最後)

代碼時序圖:

4、方案部署

4.1 部署流程圖

4.2 前置準備

  • 擁有已實名認證的華為雲賬號,開通雲服務functiongraph、人臉比對、活體檢測、OBS
  • 註冊公網域名,完成ICP備案

4.3、創建OBS人臉庫

4.3.1 創建OBS桶

參考幫助文檔://support.huaweicloud.com/qs-obs/obs_qs_0007.html創建私有桶

4.3.2 上傳對象

參考幫助文檔: //support.huaweicloud.com/qs-obs/obs_qs_0008.html,上傳對象,建立OBS人臉庫。

要求:文件的路徑使用用戶標識(如userid)命名

4.4 Functiongraph搭建

4.4.1 創建委託

登錄IAM控制台(//console.huaweicloud.com/iam/?region=cn-north-4#/iam/agencies

1)創建委託

委託名稱:自定義

委託類型:雲服務

雲服務:函數工作流functiongraph

持續時間:永久

2)選擇策略

OBS:獲取對象等基本操作權限

FRS:fullaccess

APIG:fullaccess

3)設置最小授權範圍,此處選擇所有,實際可根據項目情況分配。

4)完成委託創建

4.4.2 上傳FRS依賴包

因functiongraph公共的依賴包中,FRS-SDK不是最新的(無靜默活體檢測API),故我們需上傳最新的FRS-SDK,作為依賴包。

1)從官網獲取FRS-SDK下載路徑

//sdkcenter.developer.huaweicloud.com/?language=python

2)下載整個Python-v3的SDK

//github.com/huaweicloud/huaweicloud-sdk-python-v3

下載後解壓,進入內部,找到frs後綴的SDK

進入SDK目錄,在setup所在的目錄,全部選擇進行壓縮。壓縮成功後,需要確保setup文件在壓縮包的根目錄下

將壓縮好的文件,上傳到functiongraph的依賴包管理。

依賴包名稱:自定義

運行時語言:2.7

描述:自定義

上傳方式:上傳ZIP文件

4.4.3 創建函數

1)進入functiongraph控制台創建函數。

Functiongraph版本:functiongraph v2

函數類型:事件函數

函數名稱:自定義

所屬應用:默認

委託名稱:選擇創建的委託(如無,請點擊右邊的 創建委託 前往創建,創建步驟參考4.4.1)

企業項目:自行選擇

自定義函數:關閉

運行時語言:Python2.7

函數執行入口:Index.handler

代碼上傳方式:靜默代碼

4.4.4 編輯函數代碼

將示例代碼複製進來,編輯相關默認變量的值

1)粘貼3.3節的代碼至index.py中

2)根據自己項目情況,設置默認Region、endpoint、buketname的值,若4.4.6節不設置環境變量的值,將默認取此處的默認值。如下默認是北京四

3)編輯完成後,點擊保存

4.4.5 添加依賴包

1)在函數菜單-代碼頁,點擊添加-依賴代碼包

2)在公共依賴包,搜索obs,勾選OBS-sdk

3)在私有依賴包,勾選前面步驟上傳的frs-sdk,然後確定保存

4.4.6 編輯環境變量

在函數菜單-配置頁,添加環境變量:region、bucketname(OBS桶名)、endpoint

若此處不設置環境變量,則函數會使用4.4.4節代碼設置的默認值。

4.4.7 調試函數

1)點擊配置測試事件

2)選擇apig的事件模板,添加body的內容和queryStringParameters的userid,進行保存。

3)點擊測試,運行完畢可查看執行結果。

4.5 添加APIG

4.5.1 添加APIG觸發器

1)在函數菜單-觸發器頁,點擊創建觸發器

觸發器類型:API網關服務(APIG)

API名稱:自定義

分組:選擇API分組(如無點擊右邊 創建分組 進行創建)

發佈環境:RELEASE(如無點擊右邊 創建發佈環境 進行創建)

安全認證:測試環境可選擇None(後面可編輯進行更改)

請求協議:測試環境可選擇HTTP(後面可編輯進行更改)

後端超時(毫秒):5000

2)創建完成後,在觸發器頁面會添加一個APIG觸發器,提供訪問URL

4.5.2 編輯APIG

1)點擊APIG觸發器名稱,前往APIG控制台,點擊編輯

2)編輯基本信息

此處可更改安全認證,為方便調試,此處保持無認證

3)定義API請求

此處需添加API的請求參數-用戶標識,用於functiongraph中,取在OBS人臉照片庫中的員工照片。

4)定義後端服務

添加後端服務參數,跟前面的入參做一個映射。

因為是在functiongraph創建的APIG,故此處已自動綁定functiongraph的函數為後端服務,故基礎定義保持默認即可。

5)返回結果基礎定義

返回結果的響應示例,暫設置為空即可,點擊完成。

4.5.3 調試API

1)API詳情頁,點擊調試,跳轉到API調試頁面

2)輸入相關請求參數,發起請求,進行調試。

4.5.4 發佈API

編輯完成後的API,需要進行發佈,公網才可訪問

4.6 綁定獨立域名

子域名僅供開發測試使用,每天最多訪問1000次。如需開發服務,則需為API所在分組綁定獨立域名。

4.6.1 添加記錄集

1、登錄雲解析控制台(也可使用其他平台,已完成ICP備案的域名),選擇域名解析》公網域名,點擊需要創建記錄集的域名名稱。

2、添加記錄集

填寫以下信息

主機記錄:域名前綴,如face-test

類型:選擇CNAME – 將域名指向另外一個域名

別名:默認即可

線路類型:默認即可

TTL(秒):默認即可

值:填寫要指向的別名(此處為APIG上的子域名)

添加成功

4.6.2 添加自定義域名

1、在API詳情頁-總覽,點擊添加增加自定義域名。

2、跳轉到API所在分組的域名管理控制台,點擊綁定獨立域名

3、輸入前面創建的記錄集,點擊確定。(如果是剛添加的記錄集需刷新,約等5分鐘)

添加完後,即可在公網通過自定義域名,訪問APIG。

4.7 問題記錄

1、並發測試API時,發現偶現以下錯誤

錯誤1:人臉比對傳入的base64字符串無法識別

錯誤2:數據傳輸被提前終止了

問題定位:因函數中的存儲到本地的文件用的是同一個路徑,並發操作時出現異步的同時佔用一個路徑,從而導致文件有丟失或文件轉碼有誤

解決方案:給函數中的文件路徑配置上時間戳,避免並發操作時,交叉操作同一個文件。

2、APIG錯誤碼請參考://support.huaweicloud.com/usermanual-apig/apig-ug-180530090.html

3、使用APIG觸發functiongraph時,發現第一個api請求響應時間較長(2s多),後面的請求就較短了(約500ms)。

問題定位:超過一分鐘無調用函數時,函數會銷毀。再次進行函數調用時,需要重新啟動實例,所以第一次調用時間會比較長。

解決方案:設置預留實例,來消除冷啟動效果。預留實例是為指定函數版本單獨預留的函數運行實例,不同於普通的函數實例,預留實例長期存活,可以達到消除函數冷啟動的效果。

預留實例需要提交工單開通,詳情請參考://support.huaweicloud.com/usermanual-functiongraph/functiongraph_01_0306.html

5、後期思考

本方案的人臉比對,只比對一次。若人臉庫中,用戶的庫照片有多個,是否需要遍歷對比,取總體對比的結果。如對比多次,需要考慮從OBS獲取照片、人臉比對的API要多次調用,性能下降、費用提升等。

附件:index.zip2.62KB

 

點擊關注,第一時間了解華為雲新鮮技術~