您的位置:首页 > 运维架构

基于 树莓派&opencv&face++开发考勤机(一)

2017-03-12 16:24 288 查看

基于 树莓派&opencv&face++开发考勤机(一)

简述:这是我大创内容的一部分。年前用opencv+qt实现了一个人脸识别的考勤机,但效果不理想,不
说你也明白为什么。于是开始尝试利用face++的服务来实现人脸的检测与识别,树莓派仅作为一个图像
采集端与简易控制端。在一台pc上进行识别数据的管理。


本文主要简述FACE++ API的使用,所有APIT_KEY等都已修改

使用设备

1.树莓派

2.face++(测试应用才能免费使用API)

3.opencv

4.curl(以前做监控报警信息上传时,就用的curl,当时没系统学习html,对于上传图片时的,curl用的

表单,不甚理解,费了很大的劲,才上传成功)

5.rapidjson(腾讯开源的js解析器,秩序使用头文件即可)

face++

API文档:Face++人工只能开放平台(新版)

API介绍

最开始看API很简单,但是看了半天没找到我要用的API,我就纳闷了!后来学习发现,确实这几个API就能满足需求。**有个概念要明确,FaceSet人脸集,我们可以认为是人脸组可以制定一个人,亦可以一定一堆人。不管是组的人脸集还是一个人的人脸集,face_token都是唯一,只要拿到识别率高的face_token,就可以和本地数据库比较确定这个人。**


人脸识别:

Detect API:调用者提供图片文件或者图片URL,进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。 利用Detect API实现人脸库。在我们设备注册人脸时,可以利用API返回的唯一字符串标识一个人,记录在我们本地的数据库中。待后续人脸识使用。

Search API:在Faceset中找出与目标人脸最相似的一张或多张人脸。支持传入face_token或者直接传入图片进行人脸搜索。使用图片进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。人脸注册后,我们就利用这个API来进行人脸识别,达到确认这个人是谁的目的。

FaceSet API:这是一个API组,包含人脸创建,添加等信息。利用该API创建人脸组。

Face API:这也是一个API组,可以分析人脸,获取详细信息。

图片识别&证件识别:在这个项目中没有使用。

API使用简要说明:API测试文件

1.detect:上传一个图片,检测人脸并返回一个唯一face_token(要记录下来)

API_KEY=bu7xZSoAVDAnT6dW
API_PASSWD=VWGf4qc8jFyLq
curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/detect" \
-F "api_key=$API_KEY" \
-F "api_secret=$API_PASSWD" \
-F "image_file=@2.jpg" \   #说明如果上传图片数据要加 @
-F "return_landmark=1" \
-F "return_attributes=gender,age"

#会返回上传图片的face_token,记录下来。


#curl 参数 -F, --form CONTENT  Specify HTTP multipart POST data (H)
#detect api 参数image_file要求:一个图片,二进制文件,需要用post multipart/form-data的方式上
传。


2.create

API_KEY=bu7xZSoAVDAnT6dW3tUW
API_PASSWD=VWGf4qc8jFyLq_nzd
curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/faceset/create" \
-F "api_key=$API_KEY" \
-F "api_secret=$API_PASSWD" \
-F "outer_id=obama" \
-F "tag=person,male" \
-F "face_tokens=j2p6wwE1WDraMtnMgfMPLayp"


3.verify

API_KEY=bu7xZSoAVDAnT6dW3tUW
API_PASSWD=VWGf4qc8jFyLq_nzd

#注意是https:若使用http会访问不到服务器

curl -X POST "https://api-cn.faceplusplus.com/facepp/v3/search" \
-F "api_key=$API_KEY" \
-F "api_secret=$API_PASSWD" \
-F "image_file=@ma/ma1.jpg" \
-F "outer_id=obama"

#返回的比对信息

{
"image_id": "SPzkP8wphY0ljOzW2F0y9w==",
"faces": [{"face_rectangle": {"width": 159,"top":119, "left": 153, "height": 159},
"face_token": "9b287bd71b547329f369d16"}],
"time_used": 389,
"thresholds": {"1e-3": 65.3, "1e-5": 76.5, "1e-4": 71.8},
"request_id": "1489305828,c193406c-25a-cf102173d6",
"results": [{"confidence": 96.46,
"user_id": "",
"face_token": "993c7efe8d2f61673fc6ffa"}]
   }


返回中confidence值比较高我们就是认为这是一个人,并利用返回的face_token在本地数据库中查找注册的人及face_token,然后对该数据处理。

参考

url team人脸识别考勤机

极客学院:codelast的树莓派课程(其中face++ v2接口已经失效,参考官方文档及上述代码修改即可)

codelast github主页

Face++ API
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息