0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

带你玩转OpenHarmony AI:基于Seetaface2的人脸识别

OpenAtom OpenHarmony 来源:未知 2022-12-20 21:10 次阅读

开源项目 OpenHarmony是每个人的 OpenHarmony 00b311c8-8067-11ed-8abf-dac502259ad0.jpg

钟禄平

OpenHarmony知识体系工作组

以下内容来自嘉宾分享,不代表开放原子开源基金会观点

简介

随着时代的进步,全民刷脸已经成为一种新型的生活方式,这也是全球科技进步的又一阶梯,人脸识别技术已经成为一种大趋势,无论在智慧出行、智能家居、智慧办公等场景均有较广泛的应用场景,本文介绍了基于SeetaFace2人脸识别引擎在OpenAtom OpenHarmony(以下简称“OpenHarmony”)上实现人脸识别的AI能力。

什么是SeetaFace2

SeetaFace2是由中科视拓(北京)科技有限公司开发并使用BSD开源协议开源出来的一款人脸识别引擎库,其搭建了一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块FaceDetector、面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比对模块FaceRecognizer。除了三个核心模块外,它还提供了两个辅助模块FaceTracker和QualityAssessor用于人脸跟踪和质量评估。下图是SeetaFace2人脸识别算法组件: 00dec55c-8067-11ed-8abf-dac502259ad0.png  

SeetaFace2能做什么

SeetaFace2采用标准C++开发,全部模块均不依赖任何第三方库,支持x86架构(Windows、Linux)和ARM架构,可以轻松地移植到OpenHarmony上。SeetaFace2支持的上层应用包括但不限于人脸门禁、无感考勤、人脸比对等。如下图展示了SeetaFace2支持的应用矩阵: 03f7ad9e-8067-11ed-8abf-dac502259ad0.png  

SeetaFace2人脸识别原理

SeetaFace2人脸识别引擎搭建了一套全自动人脸识别系统所需的三个核心模块:1.人脸检测(FaceDetector) 在图像中首先定位出人脸的位置,然后裁剪(crop)出包含人脸位置的矩形框,一般还会进行填充、缩放到指定尺寸,还可能会对人脸图像进行标准化normalize;2.面部关键点定位(FaceLandmarker) 提取人脸关键点坐标,然后使用放射变化或相似变换等进行人脸对齐变换。面部关键点定位的目标就是把所有的人脸图片统一到一个固定的正脸姿态大小,从而提高模型对人脸姿态变化的鲁棒性。3.人脸特征提取与比对模块(FaceRecognizer) 主要使用深度学习等方法提取人脸的特征,然后通过特征对比,计算人脸的相似度。 SeetaFace2人脸识别的具体过程如下图所示: 04319680-8067-11ed-8abf-dac502259ad0.png  

两步带你实现人脸识别

关于SeetaFace2的如何移植到OpenHarmony移植请参照文档:SeetaFace2移植开发文档(请参考文章末尾相关文档链接),这里我们主要分析通过SeetaFace2如何实现人脸识别。 从上面人脸识别的流程图可以知道人脸识别主要包含2个大块:人脸注册和人脸识别。1. 人脸注册 人脸注册首先需要对传入的图片进行人脸检测,当检测到人脸后会提取对应的人脸信息,并将信息保存用于对比。 人脸信息检测实现:
std::vector DetectFace(const SeetaImageData &image)
{
  auto faces = FD.detect(image);
  return std::vector(faces.data, faces.data + faces.size);
}
其中FD是三大模块中的人脸检测模块(FaceDetector),其加载了人脸检测模型:
seeta::ModeSttingFD_model("fd_2_00.dat",seeta::ModeStting::CPU,0);
而返回SeetaFaceInfo数据则是检测到的人脸信息,其中包含了人脸个数,人脸区域坐标以及人脸置信度得分数据。然后通过人脸信息检测返回的数据进行面部关键点定位。 面部关键点定位实现:
std::vector DetectPoints(const SeetaImageData &image, const SeetaRect &face)
{
  std::vector points(PD.number());
  PD.mark(image, face, points.data());
  return std::move(points);
}
其中的PD是三大模块中的关键点定位模块(FaceLandmarker),关键点定位需要根据面部特征模型进行对比分析的,SeetaFace2提供2种面部特征模型。分别是通过5点定位和通过81点定位,此实例中我们使用的是81点定位模型:
seeta::ModeSttingPD_model("pd_2_00_pts81.dat",seeta::ModeStting::CPU,0);
获取完面部特征数据后,SeetaFace2提供了一个人脸数据库进行保存对应的人脸信息数据,以此来完成人脸信息的注册:
int64_t Register(const SeetaImageData &image)
{
  auto faces =  DetectFace(image);
  auto points =  DetectPoints(image, faces.pos);


  return FDB.Register(image, points.data());
}
其中FDB是SeetaFace2实现的FaceDatabase数据库管理。该数据库也为人脸识别提供面部特征数据的对比结果,面部特征对比也需要一个人脸数据模型:
seeta::ModeSttingFDB_model("fr_2_00.dat",seeta::ModeStting::CPU,0);
通过以上步骤,我们就已经完成了人脸的注册。 2. 人脸识别 人脸识别和人脸注册步骤类似,都需要先检测人脸信息及提取面部特征数据。唯一的区别在于提取面部特征时需要进行人脸质量评估,最后根据质量评估结果进行识别,具体实现如下:
int64_t RecogizePoint(const SeetaImageData &image)
{
    int64_t result = 0;
  seeta::ModeStting FD_model("fd_2_00.dat", seeta::CPU, 0);        // 此3步创建3个模型
  seeta::ModeStting PD_model("pd_2_00_pts81.dat", seeta::CPU, 0);
  seeta::ModeStting FDB_model("fr_2_00.dat", seeta::CPU, 0);
  
  seeta::FaceDetector FD(FD_model);    // 创建人脸检测模块
  seeta::FaceLandmarker PD(PD_model);   // 创建面部关键点定位模块
  seeta::FaceDatabase FDB(FDB_model);    // 创建人脸特征信息数据库模块
  
  auto faces = FD.detect(image);        // 获取人脸特征信息
    for (SeetaFaceInfo &face : faces) {    // 对比每个人脸信息
        int64_t index = -1;
        float similarity = 0;
        std::vector points(PD.number());
      PD.mark(image, face, points.data());            // 获取人脸框信息
        auto score = QA.evaluate(image, face.pos, points.data());   // 获取人脸质量评分
        if (score == 0) {
            HILOGI("no ignored
");
        } else {
            auto queried = FDB.QueryTop(image, points.data(), 1, &index, &similarity);    // 从注册的人脸数据库中对比相似度
            if (queried < 1) {
                continue;
            }
            if (similarity > threshold) {
                HILOGI("get recognized face!! 
");
                result++;
            }
        }
    }
    
    return result; 
}

参考链接

OpenHarmony知识体系工作组

https://gitee.com/openharmony-sig/knowledge

SeetaFace2移植开发文档

https://gitee.com/openharmony-sig/knowledge_demo_smart_home/blob/master/docs/SeetaFace2/%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E5%BA%93%E7%9A%84%E7%A7%BB%E6%A4%8D.md

SeetaFace2 GitHub源码地址

https://github.com/seetafaceengine/SeetaFace2

SeetaFace2 Demo样例地址

https://gitee.com/openharmony-sig/knowledge_demo_travel/tree/master/docs/FaceRecognition_CXX/README.md

本文为技术分析文章,仅供大家学习、研讨及交流使用。如在实际应用场景中收集人脸图像,应遵守《个人信息保护法》《最高人民法院关于审理使用人脸识别技术处理个人信息相关民事案件适用法律若干问题的规定》等关于处理和保护敏感个人信息、面部生物识别信息的规定。


原文标题:带你玩转OpenHarmony AI:基于Seetaface2的人脸识别

文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 鸿蒙
    +关注

    关注

    57

    文章

    2301

    浏览量

    42670
  • OpenHarmony
    +关注

    关注

    25

    文章

    3629

    浏览量

    16031

原文标题:带你玩转OpenHarmony AI:基于Seetaface2的人脸识别

文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于迅为RK3568/RK3588开发板的AI图像识别方案

    https://www.bilibili.com/video/BV1G54y1A7nf/?spm_id_from=333.999.0.0 迅为RK3568/RK3588开发板AI识别演示方案,包括
    发表于 08-28 09:50

    基于FPGA的人脸识别技术

    基于FPGA(现场可编程逻辑门阵列)的人脸识别技术,是一种结合了高效并行处理能力和灵活可编程性的先进图像处理解决方案。这种技术在安全监控、身份认证、人机交互等领域具有广泛应用前景。以下将详细介绍基于FPGA的人脸
    的头像 发表于 07-17 11:42 1206次阅读

    基于OpenCV的人脸识别系统设计

    基于OpenCV的人脸识别系统是一个复杂但功能强大的系统,广泛应用于安全监控、人机交互、智能家居等多个领域。下面将详细介绍基于OpenCV的人脸识别系统的基本原理、实现步骤,并附上具体
    的头像 发表于 07-11 15:37 1.1w次阅读

    人脸识别技术的原理介绍

    人脸识别技术是一种基于人脸特征信息进行身份识别的生物识别技术。它通过分析人脸图像,提取
    的头像 发表于 07-04 09:22 1005次阅读

    人脸识别模型训练流程

    据准备阶段,需要收集大量的人脸图像数据,并进行数据清洗、标注和增强等操作。 1.1 数据收集 数据收集是人脸识别模型训练的第一步。可以通过网络爬虫、公开数据集、合作伙伴等途径收集人脸
    的头像 发表于 07-04 09:19 736次阅读

    人脸识别模型训练是什么意思

    人脸识别模型训练是指通过大量的人脸数据,使用机器学习或深度学习算法,训练出一个能够识别和分类人脸的模型。这个模型可以应用于各种场景,如安防监
    的头像 发表于 07-04 09:16 418次阅读

    如何挑选理想的人脸识别考勤系统产品?人脸识别设备的选型

    如何挑选理想的人脸识别考勤系统产品?在挑选理想的人脸识别考勤系统产品时,需要综合考虑多个方面,包括但不限于设备的性能、兼容性、数据存储能力、环境适应性以及售后服务等因素。以下是根据提供
    的头像 发表于 06-05 14:59 400次阅读
    如何挑选理想<b class='flag-5'>的人脸</b><b class='flag-5'>识别</b>考勤系统产品?<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>设备的选型

    天线设计攻略简要概述 带你玩转PCB和WIFI

    给大家分享干货啦!天线设计全攻略,带你玩转PCB和WIFI
    的头像 发表于 05-08 14:42 1429次阅读
    天线设计攻略简要概述 <b class='flag-5'>带你</b><b class='flag-5'>玩转</b>PCB和WIFI

    开发者手机 AI - 目标识别 demo

    功能简介 该应用是在Openharmony 4.0系统上开发的一个目标识别AI应用,旨在从上到下打通Openharmony AI子系统,展
    发表于 04-11 16:14

    OpenHarmony鸿蒙实战】在RK3399开发板实现智能门禁人脸识别

    基于RK3399开发板,使用OpenHarmony3.0-LTS开发的应用。通过定时获取摄像头数据,实现人脸识别比对等功能。
    的头像 发表于 03-20 17:38 1122次阅读
    【<b class='flag-5'>OpenHarmony</b>鸿蒙实战】在RK3399开发板实现智能门禁<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>

    小区无感人脸识别门禁摄像机,多人同时识别通过 #人脸识别 #智能摄像机

    AI人脸识别
    jf_07511428
    发布于 :2024年03月06日 22:53:18

    公司人脸识别考勤门禁摄像机#人脸识别#智能摄像机

    AI人脸识别
    jf_07511428
    发布于 :2024年03月06日 22:52:08

    人脸识别技术的原理是什么 人脸识别技术的特点有哪些

    人脸识别技术的原理 人脸识别技术是一种通过计算机以图像或视频为输入,识别、检测、跟踪和分析人脸
    的头像 发表于 02-18 13:52 1547次阅读

    【飞腾派4G版免费试用】飞腾派SeetafaceEngine人脸检测

    收到个飞腾派,周末有空玩玩。。。 Seetaface是2016年中科院老师开源的的人脸识别引擎。https://github.com/seetaface/SeetaFaceEngine
    发表于 12-18 10:53

    成都华江信息AI人脸识别原理浅析# 人脸识别

    AI边缘计算
    成都华江信息
    发布于 :2023年11月24日 16:35:54