1. 程式人生 > 其它 >員工考勤打卡時,如何避免非本人代替打卡?

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

摘要:使用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桶

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

4.3.2 上傳物件

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

要求:檔案的路徑使用使用者標識(如userid)命名

4.4 Functiongraph搭建

4.4.1 建立委託

登入IAM控制檯(https://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下載路徑

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

2)下載整個Python-v3的SDK

https://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錯誤碼請參考:https://support.huaweicloud.com/usermanual-apig/apig-ug-180530090.html

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

問題定位:超過一分鐘無呼叫函式時,函式會銷燬。再次進行函式呼叫時,需要重新啟動例項,所以第一次呼叫時間會比較長。

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

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

5、後期思考

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

附件:index.zip2.62KB

 

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