当前位置: 首页 > 后端技术 > Python

ArcSoft最新版python界面完整版

时间:2023-03-25 19:40:25 Python

ArcSoft最新版python界面完整版目前开源的人脸检测模型有很多认可,也让很多小伙伴踩了很多坑。相信很多用过dlib和facenet人脸识别的朋友都有这样的疑惑。为什么论文中的准确率高达99.8以上,而我实际使用中的准确率并不好,甚至用来实现一百人以内。在人脸识别中,经常会出现误识别的情况。造成这种现象的主要原因是训练人脸识别模型的样本与国内人脸存在差距。因此,这些看似高精度的模型并不能直接用于项目。测试了两个模型在上百人的考勤图片上的表现,dlib和facenet的准确率都不理想。综合对比发现虹软的人脸识别接口目前是开源的,是目前国内人脸识别准确率的最佳选择。可惜虹软暂时没有提供python接口代码。目前网上有一些使用python调用Arcsoft接口的案例,但是类似的文章大同小异,代码基本相同,反复转载,并没有完整调用Arcsoft所有函数的python接口,函数name也是随意定义的,不好记,用pycharm开发也没有提示写类函数成员代码,而且代码不合理的地方还反复出现。。。实在受不了目前发布的pythonapi接口参差不齐为此,花了几天的时间写了一个完整易用的pythonapi接口,涵盖虹软当前版本的所有功能。出发点本质上是python接口使用ctypes调用虹软的动态链接库。需要到虹软官网选择C/C++版本SDK下载依赖文件。为了使用与虹软提供的C/C++版本demo代码基本一致的代码,这个python接口的函数名与虹软相同,demo.py的结构基本是C的python/C++版本演示代码翻译版。代码地址:ArcFace-python如果代码对你有帮助,给个star吧!优化点1、重写所有结构体对象类的打印属性和成员变量,使python可以直接打印对象查看虹软返回的结果信息,pycharm可以在写代码时提供提示信息。2.在此之前,其他博客中的python接口在向虹软引擎传递图像时使用的是这种方式:frame_byte=bytes(frame.data)frame_byte_p=cast(framebyte,c_ubyte_p)但是上面可以改成:frame.ctypes.data_as(POINTER(c_ubyte))可以降低numpy图片转字节流的开销注1.当前接口需要下载虹软最新(2.2)C/C++版本SDK。2、ArcSoft的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(多人脸信息)描述人脸检测的位置和角度信息。人脸识别过程是先对人脸进行检测,然后提取人脸信息的特征值,再利用特征值信息进行相似度比较。ArcSoft在人脸检测期间返回一个ASF_MultiFaceInfo对象(即使只检测到一个人)。用于提取人脸特征信息的函数需要输入ASF_SingleFaceInfo对象。因此,在提取特征信息时,需要根据ASF_MultiFaceInfo中的信息构造一个ASF_SingleFaceInfo对象。提取特征值,除了提取特征值函数外,虹软的其他人脸属性提取函数,如:年龄/性别识别、活体检测、人脸3D角度等,都发送给ASF_MultiFaceInfo对象,但活体检测还需要单张大图只能检测到一个活体,超过该值返回未知。但是在单张大图进行3D角度检测时,最多可以返回4张人脸的3D角度值。这些地方可能不好控制,需要注意。