当前位置: 首页 > news >正文

OpenHarmony 之face_auth人脸驱动源码级拆解:v1.0→v2.0 架构演化

1. 驱动实现原理

1.1 整体架构设计

OpenHarmony人脸识别驱动采用分层架构设计,基于HDF(Hardware Driver Foundation)框架实现,主要包括以下层次:

  • 接口层(IDL定义):定义标准化的HDI接口,提供跨进程通信能力
  • 服务层(Service实现):实现具体的业务逻辑,处理人脸识别相关操作
  • 执行器层(Executor实现):封装具体的人脸识别算法和硬件操作

1.2 核心组件

1.2.1 接口定义组件
  • IFaceAuthInterface:人脸认证接口,负责获取执行器列表
  • IAllInOneExecutor:一体化执行器接口,处理所有认证操作
  • IExecutorCallback:异步操作回调接口,用于结果和状态通知
1.2.2 服务实现组件
  • FaceAuthInterfaceService:人脸认证接口服务实现
  • AllInOneExecutorImpl:一体化执行器实现

1.3 工作流程

  1. 初始化阶段:驱动加载时创建FaceAuthInterfaceService实例
  2. 执行器注册:服务创建AllInOneExecutorImpl实例并注册到执行器列表
  3. 业务操作:上层应用通过HDI接口调用执行器的具体功能
  4. 异步回调:通过IExecutorCallback接口返回操作结果
Hardware
Driver Kernel Space
HDI Layer
User Space
BiometricPrompt
FaceAuthService
GetExecutorList
IPC-HDF
new
ioctl
调用
TA 调用
加密读写
MIPI
OpenCL/NNAPI
RPMB
RGB Camera
IR Camera
Dot Projector
TPU/NPU
卷积加速
Secure Element
防回滚
FaceAuthInterfaceService
服务层
AllInOneExecutorImpl
执行器层
Face Algorithm
TA/CA
Camera ISP
MIPI-CSI
TEE/Secure OS
TrustZone
Face Template
安全存储
HDI FaceAuth
IDL接口
FaceAuthManager
系统服务
BiometricPrompt
应用框架
App: 支付宝/微信
人脸支付

2. 驱动接口调用关系

异步通信机制
驱动接口调用关系
GetExecutorList
返回执行器列表
Enroll/Authenticate/Identify
OnResult/OnTip
回调通知
消息发送
上层应用
FaceAuthInterfaceService
IFaceAuthInterface
IAllInOneExecutor
AllInOneExecutorImpl
IExecutorCallback
硬件设备

2.1 接口调用时序

上层应用IFaceAuthInterfaceFaceAuthInterfaceServiceAllInOneExecutorImplIExecutorCallbackGetExecutorList()GetExecutorList()创建执行器实例返回执行器列表返回执行器列表Enroll(scheduleId, extraInfo, callback)处理注册逻辑OnResult(result, extraInfo)返回注册结果Authenticate(scheduleId, templateIdList, extraInfo, callback)处理认证逻辑OnTip(tip, extraInfo)返回认证状态OnResult(result, extraInfo)返回认证结果上层应用IFaceAuthInterfaceFaceAuthInterfaceServiceAllInOneExecutorImplIExecutorCallback

3. 实现函数源码解读

3.1 FaceAuthInterfaceService 实现

3.1.1 构造函数
FaceAuthInterfaceService::FaceAuthInterfaceService()
{auto executor = new (std::nothrow) AllInOneExecutorImpl();if (executor == nullptr) {IAM_LOGE("executor is nullptr");return;}executorList_.push_back(sptr<IAllInOneExecutor>(executor));
}

功能说明

  • 创建AllInOneExecutorImpl实例
  • 将执行器添加到执行器列表中
  • 提供错误处理机制
3.1.2 GetExecutorList方法
int32_t FaceAuthInterfaceService::GetExecutorList(std::vector<sptr<IAllInOneExecutor>> &executorList)
{IAM_LOGI("interface mock start");for (auto executor : executorList_) {executorList.push_back(executor);}IAM_LOGI("interface mock success");return HDF_SUCCESS;
}

功能说明

  • 遍历内部执行器列表
  • 将执行器引用添加到输出参数中
  • 返回操作成功状态

3.2 AllInOneExecutorImpl 实现

3.2.1 构造函数
AllInOneExecutorImpl::AllInOneExecutorImpl()
{executorInfo_ = {.sensorId = SENSOR_ID,.executorMatcher = EXECUTOR_TYPE,.executorRole = ExecutorRole::ALL_IN_ONE,.authType = AuthType::FACE,.publicKey = std::vector<uint8_t>(PUBLIC_KEY_LEN, 0),.extraInfo = {},.esl = ExecutorSecureLevel::ESL2,.maxTemplateAcl = FACE_CAPABILITY_LEVEL,};
}

功能说明

  • 初始化执行器信息结构体
  • 设置传感器ID、执行器类型、认证类型等参数
  • 配置安全等级和能力级别
3.2.2 Enroll方法
int32_t AllInOneExecutorImpl::Enroll(uint64_t scheduleId, const std::vector<uint8_t> &extraInfo, const sptr<IExecutorCallback> &callbackObj)
{IAM_LOGI("interface mock start");static_cast<void>(scheduleId);static_cast<void>(extraInfo);if (callbackObj == nullptr) {IAM_LOGE("callbackObj is nullptr");return HDF_ERR_INVALID_PARAM;}IAM_LOGI("enroll, result is %{public}d", ResultCode::OPERATION_NOT_SUPPORT);int32_t ret = callbackObj->OnResult(ResultCode::OPERATION_NOT_SUPPORT, {});if (ret != HDF_SUCCESS) {IAM_LOGE("callback result is %{public}d", ret);return HDF_FAILURE;}return HDF_SUCCESS;
}

功能说明

  • 处理人脸注册请求
  • 验证回调对象有效性
  • 通过回调返回操作结果
  • 提供完整的错误处理机制
3.2.3 Authenticate方法
int32_t AllInOneExecutorImpl::Authenticate(uint64_t scheduleId, const std::vector<uint64_t> &templateIdList,const std::vector<uint8_t> &extraInfo, const sptr<IExecutorCallback> &callbackObj)
{IAM_LOGI("interface mock start");static_cast<void>(scheduleId);static_cast<void>(templateIdList);static_cast<void>(extraInfo);if (callbackObj == nullptr) {IAM_LOGE("callbackObj is nullptr");return HDF_ERR_INVALID_PARAM;}IAM_LOGI("authenticate, result is %{public}d", ResultCode::NOT_ENROLLED);int32_t ret = callbackObj->OnResult(ResultCode::NOT_ENROLLED, {});if (ret != HDF_SUCCESS) {IAM_LOGE("callback result is %{public}d", ret);return HDF_FAILURE;}return HDF_SUCCESS;
}

功能说明

  • 处理人脸认证请求
  • 支持模板列表认证
  • 返回认证状态和结果
3.2.4 SendCommand方法
int32_t AllInOneExecutorImpl::SendCommand(int32_t commandId, const std::vector<uint8_t> &extraInfo, const sptr<IExecutorCallback> &callbackObj)
{IAM_LOGI("interface mock start");static_cast<void>(extraInfo);if (callbackObj == nullptr) {IAM_LOGE("callbackObj is nullptr");return HDF_ERR_INVALID_PARAM;}int32_t ret;switch (commandId) {case DriverCommandId::LOCK_TEMPLATE:IAM_LOGI("lock template, result is %{public}d", ResultCode::SUCCESS);ret = callbackObj->OnResult(ResultCode::SUCCESS, {});break;case DriverCommandId::UNLOCK_TEMPLATE:IAM_LOGI("unlock template, result is %{public}d", ResultCode::SUCCESS);ret = callbackObj->OnResult(ResultCode::SUCCESS, {});break;case DriverCommandId::INIT_ALGORITHM:IAM_LOGI("init algorithm, result is %{public}d", ResultCode::SUCCESS);ret = callbackObj->OnResult(ResultCode::SUCCESS, {});break;default:IAM_LOGD("not support DriverCommandId : %{public}d", commandId);ret = callbackObj->OnResult(ResultCode::OPERATION_NOT_SUPPORT, {});}if (ret != HDF_SUCCESS) {IAM_LOGE("callback result is %{public}d", ret);return HDF_FAILURE;}return HDF_SUCCESS;
}

功能说明

  • 支持多种驱动命令操作
  • 包括模板锁定、解锁、算法初始化等
  • 提供命令扩展机制

4. 驱动接口版本差异说明

4.1 v1.0 版本特性

4.1.1 接口定义
  • IExecutor接口:基础执行器接口
  • IFaceAuthInterface接口:基础人脸认证接口
  • IExecutorCallback接口:基础回调接口
4.1.2 主要功能
  • 基本的注册、认证、识别、删除操作
  • 简单的命令发送机制
  • 基础的回调通知

4.2 v1.1 版本增强

4.2.1 新增功能
  • 属性获取机制:支持获取认证子类型、锁定时长等属性
  • 模板缓存:支持模板缓存功能
  • SA命令回调:新增系统应用命令回调机制
4.2.2 接口扩展
// v1.1 新增方法
int32_t GetProperty(const std::vector<uint64_t> &templateIdList, const std::vector<int32_t> &propertyTypes, Property &property);int32_t SetCachedTemplates(const std::vector<uint64_t> &templateIdList);int32_t RegisterSaCommandCallback(const sptr<ISaCommandCallback> &callbackObj);

4.3 v2.0 版本全面升级

4.3.1 架构重构
  • 一体化执行器:将Collector和Verifier功能合并
  • 增强的安全机制:支持更高级别的安全等级
  • 扩展的消息机制:支持角色间消息传递
4.3.2 新增特性
  • 消息发送机制:支持执行器间消息通信
  • 增强的命令支持:扩展驱动命令类型
  • 完善的回调机制:新增OnMessage回调
4.3.3 接口对比
特性v1.0v1.1v2.0
执行器类型基础执行器基础执行器一体化执行器
属性管理不支持支持支持
模板缓存不支持支持支持
消息机制不支持不支持支持
SA命令回调不支持支持支持
安全等级ESL0-ESL3ESL0-ESL3增强安全机制

4.4 版本演进总结

  1. v1.0 → v1.1:功能增强,增加属性管理和模板缓存
  2. v1.1 → v2.0:架构重构,实现一体化执行器设计
  3. 兼容性保证:新版本保持向后兼容,支持平滑升级

5. 关键技术特性

5.1 异步回调机制

  • 支持操作结果的异步通知
  • 提供处理过程中的状态提示
  • 确保UI线程不被阻塞

5.2 安全机制

  • 多级安全等级支持(ESL0-ESL3)
  • 模板访问控制
  • 公钥加密通信

5.3 扩展性设计

  • 模块化的接口设计
  • 支持自定义命令扩展
  • 可插拔的执行器架构

OpenHarmony人脸识别驱动通过分层架构设计和标准化的HDI接口,提供了完整的人脸识别功能支持。从v1.0到v2.0的版本演进体现了系统在功能丰富性、安全性和扩展性方面的持续改进。驱动采用异步回调机制确保系统响应性,同时通过模块化设计支持灵活的扩展和定制。

http://www.dtcms.com/a/509023.html

相关文章:

  • 顺义制作网站房屋设计装修软件免费
  • 海宏集团网站建设东营 微信网站建设
  • python linux 系统 cairosvg 模块 svg 转换png 格式生成中文乱码 显示 空框框 解决办法 。
  • Linux中挂载文件系统函数的实现
  • 綦江建站哪家正规做服务的网站吗
  • 怎样看一个网站做的网络广告58企业网站怎么做
  • Nature Immunology | 人类皮肤成纤维细胞单细胞和空间转录组图谱揭示不同组织中与疾病相关的成纤维细胞亚型的共性
  • Redis Stream:高效消息队列的解析与应用
  • 网站开发技术历史天津网络项目公司
  • 西安做的好的网站公司关掉wordpress站点
  • qq刷赞网站咋做网站备案去哪
  • 营销型网站 案例深圳网站建设开发
  • 赣州城乡建设局网站做外贸网站咨询
  • C++项目实战1:多角色管理系统总结
  • Sibyl 框架里有没有 迭代过程
  • Linux系统编程:(三)基础指令详解(2)
  • 肇庆住房和城乡建设部网站中国数据网
  • VS创建C++动态库和C#访问过程
  • Linux服务器编程实践57-功能强大的网络信息函数getaddrinfo:支持IPv4与IPv6
  • 美食网站html静态mooc网站建设
  • 网站备案申请书最新网站建设语言
  • DAX的日期相减DATEDIFF 函数
  • day15(do-while循环语句)
  • 并行任务太多,优先级怎么排
  • 自建商城网站用什么技术好公司网站建设款计什么科目
  • wordpress建站解析做网站怎么把导航每个页面都有
  • 动态内容可以缓存到CDN吗?
  • 东莞乐从网站建设邯郸专业网站建设报价
  • 服务好的企业建站alexa全球排名
  • 郑州服装网站建设公司阿里 域名解析 网站建设