虹软最新版 python 接口 完整版

虹软最新版 python 接口 完整版

当前开源的人脸检测模型,识别不少,不少小伙伴也踩过很多坑。相信很多使用过dlib和facenet人脸识别的小伙伴都有这样的疑惑,为何论文里高达99.8以上的准确率,本身实际使用下来的准确率却并很差,甚至用来落实到百人之内的人脸识别,都常常出现误识别现象,形成这样的现象最主要的缘由来自于训练人脸识别模型的样本和国内人脸有差距。所以,这些看似准确率很高的模型,直接拿来作项目使用是不行的,测试两种模型在使用几百人的考勤图片上的表现,准确率上dlib和facenet 都很不理想。python

综合比较,发现使用虹软的人脸识别接口是目前开源,在国内人脸识别准确度上最好的选择。git

遗憾的是当前虹软暂时没有提供python 接口代码,目前网上也有部分使用python调用虹软接口的案例,可是相似文章千篇一概,基本都是同一个代码,反复转载,也并无能一个完整调用虹软所有功能的python接口,函数名称也随意定义并很差记,使用pycharm 开发也没有类函数成员代码编写提示,代码部分不合理的地方也重复出现… 实在是不能忍受当前已发布 的python api 接口良莠不齐的现象,为此,特地用了几天时间将虹软当前版本的所有功能写出一个完整好用的python api接口。github

出发点

本质上python接口是使用 ctypes 调用 虹软的动态连接库,须要去虹软官网 去选择 C/C++ 版本SDK 来下载依赖文件。为了在代码使用上 和 虹软 提供的 C/C++ 版本演示代码基本一致,此 python 接口 的函数名和虹软的函数名是同样的,而且demo.py的结构 基本就是 C/C++ 版本演示代码的 python 翻译版。api

代码地址:ArcFace-python
若是代码对你有帮助,给个star 吧!函数

优化点

1.重写了全部结构体对象类的打印属性 和 成员变量,方便 python 能够直接print 对象查看虹软返回的结果信息,以及 pycharm 编写代码时能够提供 提示信息。
2.在此以前其余博客中的 python 接口 在给虹软引擎传入图像时都使用了这种方式:

frame_byte=bytes(frame.data)测试

frame_byte_p=cast(framebyte,c_ubyte_p)优化

可是以上能够改成: frame.ctypes.data_as(POINTER(c_ubyte))翻译

这样能够减小 numpy 图像转换为字节流这一步的消耗code

注意

1.当前接口须要下载虹软最新的(2.2)C/C++版本 SDK。视频

2.虹软的C/C++接口支持不少图像格式传入,可是 python 使用opencv 作图像处理时基本都是 ASVL_PAF_RGB24_B8G8R8 这种格式(就是cv2.imread() 获得的numpy图像),而且默认使用该接口时 都是使用 这种图片格式。所以此接口 依赖 opencv,若是没有能够直接pip安装。

3.虹软的配个函数都会返回一盒状态码,要作好状态码的判断工做,确保使用正确,若是状态码 返回值不是 MOK(值为0),说明函数执行出错,能够对照 doc文档中的错误码解释对照。

4.第一次运行代码须要联网,由于会作激活操做,首次运行激活成功后会获得一个ArcFace64.dat文件,当有此文件之后,能够不用执行激活代码。

5.涉及到传入图片的函数操做,要确保送入的图片宽度为 4 的整数倍,若是不是则要提早作好裁剪,或者作resize操做。

6.当前默认为图片检测模式,人脸属性值中的faceID始终为空,当须要运行视频人脸检测的话能够将 初始化引擎 函数中 ASF_DETECT_MODE_IMAGE改成ASF_DETECT_MODE_VIDEO即表明追踪模式,这样能够减小人脸检测的消耗,而且此时返回的人脸信息中的faceID 将会有值,这在视频人脸识别中颇有用,能够减小人脸重复提取识别。

7.特征值和人脸属性检测可能会失败。虹软在作特征提取和属性提取这些功能时会对人脸区域有一个判断操做,若是人脸模糊,或者提供的人脸坐标位置不对有误差,会返回81925(人脸特征检测结果置信度低)错误码。因此必定要对返回状态码引发重视。

8.虹软有两个描述人脸检测位置和角度信息的对象ASF_SingleFaceInfo(单人脸信息)ASF_MultiFaceInfo(多人脸信息),人脸识别流程是先检测到人脸,再对人脸提取特征值信息,再用特征值信息比较类似度。虹软人脸检测时返回ASF_MultiFaceInfo对象(哪怕只检测到了一我的),用于提取人脸特征信息的函数须要 输入 ASF_SingleFaceInfo的对象,所以在提取特征信息时,须要根据 ASF_MultiFaceInfo中的信息 构建ASF_SingleFaceInfo对象来提取特征值,除了 提取特征值函数外,虹软的其余人脸属性 提取,好比:年龄/性别识别,活体检测,人脸3D角度 等功能都是要送入ASF_MultiFaceInfo对象,可是其中活体检测又要求单张大图片中只能检测一个活体,超出返回未知,而3D角度检测单张大图时最多返回4个 人脸的3D角度值,这些地方可能不太好控制,须要注意。

相关文章
相关标签/搜索