如何使用 python 接入虹软 ArcFace SDK

本文介绍了在Python环境下封装虹软ArcFace C++ SDK的过程,包括环境配置、数据结构和接口封装,以及如何进行人脸检测、特征提取、特征比对、年龄性别3D Angle检测和活体检测等操作。适用于需要在Python项目中使用ArcFace SDK的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司需要在项目中使用人脸识别SDK,并且对信息安全的要求非常高,在详细了解市场上几个主流人脸识别SDK后,综合来看虹软的Arcface SDK比较符合我们的需求,它提供了免费版本,并且可以在离线环境下使用,这一点非常符合我们对安全性的要求。但有个遗憾的事情,我们的项目主要使用了Python语言,虹软官方并没有提供Python版本的SDK,因此我自己使用Python封装了Arcface C++ SDK,便于在项目中使用,这里将主要过程写出来供大家探讨下。
1.环境说明
a.注意Win64环境的Python必须使用ArcFace C++(Win64) SDK,如果平台不一致, 否则可能会出现以下错误。
[size=1em]
1
OSError: [WinError 193] %1 不是有效的 Win32 应用程序
 

b.由于SDK中涉及到内存操作,本文使用了ctypes包和cdll包提供的以下几种方式
[size=1em]
1
 
2
 
3
 
4
 
5
c_ubyte_p = POINTER(c_ubyte)
memcpy = cdll.msvcrt.memcpy
malloc = cdll.msvcrt.malloc
malloc.restype = c_void_p
free = cdll.msvcrt.free

 

2.Arcface SDK基本数据结构封装
在封装数据结构时,一定要注意参数类型,否则可能会导致程序出错。
[size=1em]
1
 
2
 
3
 
4
 
5
 
6
 
7
 
8
 
9
 
10
 
11
 
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
 
22
 
23
 
24
 
25
 
26
 
27
 
28
 
29
 
30
 
31
 
32
 
33
 
34
 
35
 
36
 
37
 
38
 
39
 
40
 
41
 
42
 
43
 
44
 
45
 
46
 
47
 
48
 
49
 
50
 
51
 
52
 
53
 
54
 
55
 
56
 
57
 
58
 
59
 
60
 
61
 
62
 
63
 
64
class MRECT(Structure): # 人脸框
_fields_ = [(u'left', c_int32),
(u'top', c_int32),
(u'right', c_int32),
(u'bottom', c_int32)]


class ASFVersion(Structure): # 版本信息 版本号 构建日期 版权说明
_fields_ = [
('Version', c_char_p),
('BuildDate', c_char_p),
('CopyRight', c_char_p)]


class ASFSingleFaceInfo(Structure): # 单人脸信息 人脸框 人脸角度
_fields_ = [
('faceRect', MRECT),
('faceOrient', c_int32)]


class ASFMultiFaceInfo(Structure): # 多人脸信息 人脸框数组 人脸角度数组 人脸数
_fields_ = [
(u'faceRect', POINTER(MRECT)),
(u'faceOrient', POINTER(c_int32)),
(u'faceNum', c_int32)]


class ASFFaceFeature(Structure): # 人脸特征 人脸特征 人脸特征长度
_fields_ = [
('feature', c_void_p),
('featureSize', c_int32)]


class ASFFace3DAngle(Structure): # 人脸角度信息
_fields_ = [
('roll', c_void_p),
('yaw', c_void_p),
('pitch', c_void_p),
('status', c_void_p),
('num', c_int32)]


class ASFAgeInfo(Structure): # 年龄
_fields_ = [
(u'ageArray', c_void_p),
(u'num', c_int32)]


class ASFGenderInfo(Structure): # 性别
_fields_ = [
(u'genderArray', c_void_p),
(u'num', c_int32)]


class ASFLivenessThreshold(Structure): # 活体阈值
_fields_ = [
(u'thresholdmodel_BGR', c_float),
(u'thresholdmodel_IR', c_int32)]


class ASFLivenessInfo(Structure): # 活体信息
_fields_ = [
(u'isLive', c_void_p),
(u'num', c_int32)]

 

3.Arcface SDK接口封装
a.接口封装之前需要加载dll库,Arcface SDK 提供的dll都需要加载。
b.本文中图片格式使用了ASVL_PAF_RGB24_B8G8R8。
c.每个接口都需要定义返回值以及参数类型,某些参数类型依赖前文所述的基本数据结构。
[size=1em]
1
 
2
 
3
 
4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值