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】欢迎添加关注!文章转载请注明出处。


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

    关注

    60

    文章

    2858

    浏览量

    45349
  • OpenHarmony
    +关注

    关注

    31

    文章

    3926

    浏览量

    20718

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    迅为Hi3403开发板极速启航 | 手把手带你玩转核心例程,轻松上手AI视觉!

    迅为Hi3403开发板极速启航 | 手把手带你玩转核心例程,轻松上手AI视觉!
    的头像 发表于 11-19 13:56 1260次阅读
    迅为Hi3403开发板极速启航 | 手把手<b class='flag-5'>带你</b><b class='flag-5'>玩转</b>核心例程,轻松上手<b class='flag-5'>AI</b>视觉!

    门禁人脸识别:打造高效智能的人脸识别门禁考勤解决方案

    在物联网与人工智能技术深度融合的今天,门禁管理与考勤统计作为场所安全与效率管理的核心环节,正经历着从传统模式向智能化的全面升级。门禁人脸识别技术的崛起,让人脸识别门禁考勤解决方案成为政
    的头像 发表于 11-18 15:28 169次阅读
    门禁<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>:打造高效智能<b class='flag-5'>的人脸</b><b class='flag-5'>识别</b>门禁考勤解决方案

    低成本AI边缘计算盒子DIY:基于迅为RK3568和开源模型,轻松玩转智能识别

    低成本AI边缘计算盒子DIY:基于迅为RK3568和开源模型,轻松玩转智能识别
    的头像 发表于 11-12 13:42 1294次阅读
    低成本<b class='flag-5'>AI</b>边缘计算盒子DIY:基于迅为RK3568和开源模型,轻松<b class='flag-5'>玩转</b>智能<b class='flag-5'>识别</b>

    基于级联分类器的人脸检测基本原理

    关系来检测人脸。基于统计的方法将人脸看成统一的二维像素矩阵,通过大量的样本构建人脸子空间,通过相似度的大小来判断人脸是否存在。 2) 基于灰
    发表于 10-30 06:14

    如何挑选人脸识别终端?人脸识别一体机品牌排行榜

    考虑这些人脸识别终端的具体应用场景在哪里。下面,小编就总结了2025年最新的人脸识别一体机品牌排行榜:一、海康威视人脸门禁一体机优势:采用先
    的头像 发表于 08-18 10:44 1576次阅读
    如何挑选<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>终端?<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>一体机品牌排行榜

    【Milk-V Duo S 开发板免费体验】人脸检测

    多张人脸识别 针对画面中存在多张人脸的情况进行测试 识别效果较好,速度较快。 同时终端输出检测到的人脸数量 动态效果见底部视频。 总
    发表于 07-27 16:53

    基于LockAI视觉识别模块:C++人脸识别

    本文基于RV1106做成的LockAI视觉识别模块,采用 LZ-Picodet 模型训练的人脸检测模型 LZ-Face,以及ArcFace人脸识别模型,实现
    发表于 07-01 12:01

    基于LockAI视觉识别模块:C++人脸识别

    本文基于RV1106做成的LockAI视觉识别模块,采用LZ-Picodet模型训练的人脸检测模型LZ-Face,以及ArcFace人脸识别模型,实现
    的头像 发表于 07-01 10:09 508次阅读
    基于LockAI视觉<b class='flag-5'>识别</b>模块:C++<b class='flag-5'>人脸</b><b class='flag-5'>识别</b>

    【BPI-CanMV-K230D-Zero开发板体验】人脸检测、手势识别、车牌识别

    【BPI-CanMV-K230D-Zero开发板体验】人脸检测、手势识别、车牌识别 本文介绍了香蕉派 CanMV K230D Zero 开发板结合 MIPI 摄像头实现人脸检测、
    发表于 06-30 20:44

    选择户外场景的人脸识别门禁一体机,需要具备哪些条件?

    我们常用于企业打卡或单位校园门禁的人脸识别身份核验终端、刷脸核验一体机、人脸识别门禁考勤机或人脸识别
    的头像 发表于 06-09 10:26 748次阅读
    选择户外场景<b class='flag-5'>的人脸</b><b class='flag-5'>识别</b>门禁一体机,需要具备哪些条件?

    基于RK3576开发板的人脸识别算法

    RK3576开发板展示人脸识别算法例程和API说明
    的头像 发表于 05-07 16:48 2484次阅读
    基于RK3576开发板<b class='flag-5'>的人脸</b><b class='flag-5'>识别</b>算法

    【幸狐Omni3576边缘计算套件试用体验】人脸识别

    RetinaFace 模型实现单张和多张人脸识别的效果展示。 单张人脸识别 这里选取了一些影视作品的人物图片作为
    发表于 04-01 21:46

    《DNESP32S3使用指南-IDF版_V1.6》第五十九章 人脸识别实验

    数据,并将其提交给AI库进行处理。根据按键的不同状态,系统会执行不同的操作:1,如果长按按键,系统会将人脸数据传入分区表。2,如果点击按键,系统将当前识别的人脸
    发表于 03-26 09:40

    安信可AI人脸识别方案

    作为神仙世界的高科技,"无接触式开锁",人脸识别技术也被广泛应用在现代生活中,安信可也有AI人脸识别方案!
    的头像 发表于 02-25 14:39 733次阅读
    安信可<b class='flag-5'>AI</b><b class='flag-5'>人脸</b><b class='flag-5'>识别</b>方案

    ElfBoard开源项目|百度智能云平台的人脸识别项目

    百度智能云平台的人脸识别项目,旨在利用其强大的人脸识别服务实现自动人脸识别。选择百度智能云的原因
    的头像 发表于 12-24 10:54 1859次阅读
    ElfBoard开源项目|百度智能云平台<b class='flag-5'>的人脸</b><b class='flag-5'>识别</b>项目