欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

(九)基于face++的人脸识别功能

程序员文章站 2022-07-12 20:46:51
...

上一章我们使用完成了人脸的检测功能,这一次我们要完成人脸识别,也就是识别不同的人脸。当摄像头识别到有人脸的时候,就会抓拍这张图片,并在事先准备好的人脸库中进行查找匹配,判断这张人脸是否与库中的某一人脸匹配,如果有,匹配成功,如果没有,匹配失败。

OpenCV有官方的人脸检测haar算子,检测的人脸还算比较准确,但是官方的人脸检测算法的正确率就比较低了,这在正式投产的时候是绝对不允许的,所以我们不能使用官方的人脸识别算法。那么只有两条路可以走了,第一,自己写一个识别率较高的人脸识别算法,还有人脸查找比对算法,这种方法对工程师的要求就极其的高了,一般光一个人是难以完成的。第二,使用别人已经完善的算法,通过API接口进行调用。

第二种方法是比较可行的,在对比了互联网上几家比较有名的机器视觉公司,我最后选择了旷视科技的face++来完成这次的任务。

首先,face++可以申请开发者账号,并且有一个免费的key**,而且大部分功能都可以使用,速度和正确率都很不错。(最重要的是可以免费使用,对于在校开发者来说,实在无法抵御)

二话不说,感觉先去官网注册个账号

https://console.faceplusplus.com.cn

至于API文档我就不细说了,这个还是要大家仔细看一遍才能领悟。

Face++的API是基于HTTP的POST方法进行访问,并且会返回JSON格式的数据。而且官方友好的给出了实例和SDK,SDK都给了,还有比这更友好的吗?二话不说,赶紧下载一个。

(九)基于face++的人脸识别功能

我使用QT进行开发,所以下载C++接入工具,这个接入工具是一个打包好的代码包,用户不需要知道POST的具体格式,也不需要知道如何发起POST访问,只需要通过调用SDK里面的函数,将需要的参数传进去,SDK就会帮你完成所有与网络访问有关的代码,并且返回JSON格式的字符串。是不是十分的友好,减少了很多开发遇到的问题。


接下来我说一下识别一个人脸的具体流程。代码我这里就不展示了,可以直接去github里下载。API参数自己看官方给的文档吧。

 

首先我们要创建一个人脸库,免费用户可以创建1000个库,每个库可以存放1万个人脸,肯定是足够用了。创建人脸库的API文档如下

https://console.faceplusplus.com.cn/documents/4888391

创建完成后会返回一个标识符face_tokens,这个一定要记下来,他是这个人脸库的唯一标识符,之后的添加人脸,删除人脸,搜索全部要用到他。

然后往人脸库添加一个人脸

https://console.faceplusplus.com.cn/documents/4888373

使用detect API,传入一张图片(这张图片可以从本地读取,传入图片的地址),他会返回这张图片的唯一标识符face_token,接着使用增加人脸的API

https://console.faceplusplus.com.cn/documents/4888389

将刚刚返回的faceset_token传入,face_tokens传入人脸库的,这样就将这张照片中的人脸特征添加到了人脸库中。

 

如何搜索人脸

使用人脸搜索的API

https://console.faceplusplus.com.cn/documents/4888381

image_file传入需要对比的图片,faceset_token传入人脸库的识别符。

返回值是人脸库中与传入图片最相思的face_token标签,可以通过confidence和thresholds参数来确认是否为同一个人,也可以将人脸库中的face_token都记录在本地,然后进行遍历,就可以确认扫脸人的身份了。

 

注意的问题

因为我是在Ubuntu环境下进行开发,在移植SDK的时候碰到一些问题,官方给的SDK中,curl的库是不能用的,导致编译时报错,我的解决方法如下

apt-get install libcurl4-openssl-dev

然后在qt的.pro文件中加入

/usr/lib/x86_64-linux-gnu/libcurl*.so*

(九)基于face++的人脸识别功能

还有JSONCPP库在Ubuntu环境下也有问题,但是QT自带了JSON库,所以我就没有用官方SDK中的JSON库。

 

完整的源码放在github上,有需要可以自行下载。 代码名称为190526.zip

https://github.com/ljy980330/opencv_face_sys

 

有任何问题可以在下面给我留言!大家一起学习!