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

网友投稿 554 2022-05-30

目录

1 背景

2 云服务介绍

3 方案设计

3.1 方案简述

3.2 方案架构图

3.3 FunctionGraph实现代码

4 方案部署

4.1 部署流程图

4.2 前置准备

4.3 创建OBS人脸库

4.3.1 创建OBS桶

4.3.2 上传对象

4.4 Functiongraph搭建

4.4.1 创建委托

4.4.2 上传FRS依赖包

4.4.3 创建函数

4.4.4 编辑函数代码

4.4.5 添加依赖包

4.4.6 编辑环境变量

4.4.7 调试函数

4.5 添加APIG

4.5.1 添加APIG触发器

4.5.2 编辑APIG

4.5.3 调试API

4.5.4 发布API

4.6 绑定独立域名

4.6.1 添加记录集

4.6.2 添加自定义域名

4.7 问题记录

5 后期思考

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即可完成人脸识别的功能。

人脸识别服务的人脸比对功能,可实现检测是否其本人打卡。

人脸识别服务的活体检测功能,可实现检测是否活人打卡。

使用Functiongraph的函数,APP端只需考虑调用一个API,且只需考虑人脸识别的总体输入和返回结果。

Functiongraph由APIG来调用,利用APPkey、APPsecret及HTTPS,解决了APP端调用的安全认证等问题。

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.zip 2.62KB 下载次数:0次

API IDE 上云必读 人脸识别服务 FRS

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:C#OOP之七 多态的学习和使用
下一篇:张小白教你如何在Ubuntu 18.04上源码安装MindSpore V1.0
相关文章