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

人脸识别--SeetaFace2介绍 SeetaFace2是中科视拓在2019年发布的开源人脸识别引擎,使用c++编写,支持windows、linux系统,支持arm、x86平台,功能包含人脸检测、关键点定位、人脸识别,相比于2016开源的SeetaFace在性能上有很大提升,并在2020开源了SeetaFace6,增加了活体检测、质量评估、年龄性别估计、口罩检测。 本文主要讲解SeetaFace2的人脸识别功能,人脸识别主要包括人脸检测、关键点定位、人脸区域特征提取、特征相似度比对。 1 算法理论 1.1 人... 阅读详情

目录

简介

什么是SeetaFace2

SeetaFace2能做什么

SeetaFace2人脸识别原理

两步带你实现人脸识别

参考链接


简介

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

什么是SeetaFace2

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

SeetaFace2能做什么

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

SeetaFace2人脸识别原理

SeetaFace2人脸识别引擎搭建了一套全自动人脸识别系统所需的三个核心模块:

1. 人脸检测(FaceDetector)

在图像中首先定位出人脸的位置,然后裁剪(crop)出包含人脸位置的矩形框,一般还会进行填充、缩放到指定尺寸,还可能会对人脸图像进行标准化normalize;

2. 面部关键点定位(FaceLandmarker)

提取人脸关键点坐标,然后使用放射变化或相似变换等进行人脸对齐变换。面部关键点定位的目标就是把所有的人脸图片统一到一个固定的正脸姿态大小,从而提高模型对人脸姿态变化的鲁棒性。

3. 人脸特征提取与比对模块(FaceRecognizer)

主要使用深度学习等方法提取人脸的特征,然后通过特征对比,计算人脸的相似度。

SeetaFace2人脸识别的具体过程如下图所示:

两步带你实现人脸识别

关于SeetaFace2的如何移植到OpenHarmony移植请参照文档:SeetaFace2移植开发文档(请参考文章末尾相关文档链接),这里我们主要分析通过SeetaFace2如何实现人脸识别。

从上面人脸识别的流程图可以知道人脸识别主要包含2个大块:人脸注册和人脸识别。

1. 人脸注册

人脸注册首先需要对传入的图片进行人脸检测,当检测到人脸后会提取对应的人脸信息,并将信息保存用于对比。

人脸信息检测实现:

std::vector<SeetaFaceInfo> DetectFace(const SeetaImageData &image)
{
  auto faces = FD.detect(image);
  return std::vector<SeetaFaceInfo>(faces.data, faces.data + faces.size);
}

其中FD是三大模块中的人脸检测模块(FaceDetector),其加载了人脸检测模型:

seeta::ModeStting FD_model("fd_2_00.dat", seeta::ModeStting::CPU, 0);

而返回SeetaFaceInfo数据则是检测到的人脸信息,其中包含了人脸个数,人脸区域坐标以及人脸置信度得分数据。然后通过人脸信息检测返回的数据进行面部关键点定位。

面部关键点定位实现:

std::vector<SeetaPointF> DetectPoints(const SeetaImageData &image, const SeetaRect &face)
{
  std::vector<SeetaPointF> points(PD.number());
  PD.mark(image, face, points.data());
  return std::move(points);
}

其中的PD是三大模块中的关键点定位模块(FaceLandmarker),关键点定位需要根据面部特征模型进行对比分析的,SeetaFace2提供2种面部特征模型。分别是通过5点定位和通过81点定位,此实例中我们使用的是81点定位模型:

seeta::ModeStting PD_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::ModeStting FDB_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::ModeStting::CPU, 0);        // 此3步创建3个模型
  seeta::ModeStting PD_model("pd_2_00_pts81.dat", seeta::ModeStting::CPU, 0);
  seeta::ModeStting FDB_model("fr_2_00.dat", seeta::ModeStting::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<SeetaPointF> points(PD.number());
      PD.mark(image, face, points.data());            // 获取人脸框信息
        auto score = QA.evaluate(image, face.pos, points.data());   // 获取人脸质量评分
        if (score == 0) {
            HILOGI("no ignored\r\n");
        } else {
            auto queried = FDB.QueryTop(image, points.data(), 1, &index, &similarity);    // 从注册的人脸数据库中对比相似度
            if (queried < 1) {
                continue;
            }
            if (similarity > threshold) {
                HILOGI("get recognized face!! \r\n");
                result++;
            }
        }
    }
    
    return result; 
}

参考链接

OpenHarmony知识体系工作组

knowledge: 为OpenHarmony社区共建学习路径,开发样例,三方库,深度文章,直播课程,素材拓展等内容,并依托OpenHarmony官网呈现给开发者,帮助开发者快速查找学习资源,共同繁荣OpenHarmony社区。

SeetaFace2移植开发文档

docs/SeetaFace2/人脸识别库的移植.md · OpenHarmony-SIG/knowledge_demo_smart_home - Gitee.com

SeetaFace2 GitHub源码地址

https://github.com/seetafaceengine/SeetaFace2

SeetaFace2 Demo样例地址

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

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

人脸识别SeetaFace2原理与代码详解 人脸识别SeetaFace2原理与代码详解前言一、人脸识别步骤二、SeetaFace2基本介绍三、seetaFace2人脸注册、识别代码详解3.1 人脸注册3.1.1 人脸检测3.1.2 人脸特征标志点提取 前言 生物特征识别(Biometrics)是利用机器学习算法对生物个体,尤其是人类本身的某些特性进行分析和识别的技术。其不仅限于利用人体所固有的**指纹、掌纹、面部、虹膜**等生理特征,... 阅读详情

相关推荐

人脸识别 SeetaFace2

SeetaFace2是一个开源的、全栈的人脸识别引擎,由SeetaFace公司开发。它包含了构建一套全自动人脸识别系统所需的三个核心模块:人脸检测模块(FaceDetector)、面部关键点定位模块(FaceLandmarker)以及人脸特征提取与比对模块(FaceRecognizer)。此外,还提供了两个辅助模块:FaceTracker用于人脸跟踪,QualityAssessor用于人脸质量评估。

ch_ccc的博客 2073

CMake编译SeetaFace2(人脸识别)源码

一、下载源码 二、CMake配置文件 出现这个错误,说明opencv路径没加。点击ok。 1、将编译类型改为Release。 2、添加opencv的安装路径 3、更改安装目录: 三、编译与安装 1、编译文件: 2、编译完成后安装:

qq_1033275663的博客 1219

鸿蒙开发——玩转OpenHarmony AI:基于Seetaface2的人脸识别

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

duoduola666的博客 922

SeetaFace2 开源项目常见问题解决方案

SeetaFace2 是一个开源的全自动人脸识别系统,包含了搭建该系统所需的三个核心模块:人脸检测模块 FaceDetector、面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比对模块 FaceRecognizer。此外,还包括两个辅助模块 FaceTracker 和 QualityAssessor,用于人脸跟踪和质量评估。SeetaFace2 采用标准 C++ 开发,支持 ...

gitblog_00743的博客 611

「seetaface2」中科院人脸识别引擎seetaface2在Linux Qt上的配置教程

笔者的最新私人博客网站经过一段时间的努力,已经初期建设完毕,csdn上的博文会逐渐转移过去~~ 欢迎访问呀~ |=传=送=门=&gt; 多多洛的博客 2016年,中科院山世光老师开源了其研发的seetaface人脸识别引擎,使用VS编译,只能在window系统上运行,若想在Mac和Linux系统上使用,还需进行手动编译;随后又发布了seetaface2版本,这一版本的重大特性在于增...

totorocyx的博客wGkTde0*zzj# 8696

鸿蒙5.0【在OpenHarmony上使用SeetaFace2人脸识别库】

相信大部分同学们都已了解或接触过OpenAtom OpenHarmony(以下简称“OpenHarmony”)了,但你一定没在OpenHarmony上实现过人脸识别功能,跟着本文带你快速在OpenHarmony标准设备上基于SeetaFace2和OpenCV实现人脸识别。

2401_82772199的博客 2987

【亲测免费】 SeetaFace2 人脸识别引擎使用教程

SeetaFace2 是一个开源的、全栈的人脸识别引擎,由 SeetaFace 公司开发。它包含了构建一套全自动人脸识别系统所需的三个核心模块:人脸检测模块(FaceDetector)、面部关键点定位模块(FaceLandmarker)以及人脸特征提取与比对模块(FaceRecognizer)。此外,还提供了两个辅助模块:FaceTracker 用于人脸跟踪,QualityAssessor 用于人...

gitblog_00643的博客 2106

SeetaFace2人脸识别框架实战课程

SeetaFace2 是一款开源的人脸识别框架,它以其高性能和高准确性获得了广泛的关注。该框架采用深度学习技术,将复杂的人脸识别过程简化为若干易于理解和操作的步骤。SeetaFace2 不仅便于研究者开发和实验,还使得工业界能够轻松地将其集成到实际应用中,比如门禁系统、智能监控等。

weixin_32921023的博客 1087

如何在OpenHarmony上使用SeetaFace2人脸识别库?

相信大部分同学们都已了解或接触过OpenAtom OpenHarmony(以下简称“OpenHarmony”)了,但你一定没在OpenHarmony上实现过人脸识别功能,跟着本文带你快速在OpenHarmony标准设备上基于SeetaFace2和OpenCV实现人脸识别。本项目实现了导入人脸模型、人脸框选和人脸识别三大功能,操作流程如下:1. 录入页面点击右下角按钮,跳转拍摄页面进行拍照;2. 选择一张或多张人脸作为训练模型,并设置对应的名字;3. 选择一张未录入的人脸图片,点击框选按钮实现人脸图片框选功能

OpenHarmony_dev的博客 2835

MagicDraw-需求图

MagicDraw学习笔记

木头征的博客 4135

冷源法测试噪声系数(Noise Figure)详细步骤

背景知识 电阻负载的功率谱密度 噪声等效模型 3 4 冷源法测试步骤 注意事项

eleday的电子世界 6871

SeetaFaceEngine系列2:Face Alignment编译和使用

前面一篇写了编译人脸检测部分,现在就介绍下人脸配准部分,SeetaFace的Face Alignment通过人脸的五个关键点来配准人脸,也就是双眼、鼻尖、两个嘴角。 这部分的编译也和上一篇一样,步骤如下: 1、创建空的DLL工程: 2、修改配置器: 3、添加include: 这里要注意,因为人脸配准需要先检测人脸,会用到前面配置好的人脸检测,所以要加上其头文...

上善若水,为而不争 980

新手自己动手设置3D-slicer中文版(超详细图文)

3DSlicer是一个开源的免费软件,用于医学图像分析(包括配准和交互式分割)和可视化(包括3D渲染)以及用于图像引导治疗研究的软件平台。复制qm文件,粘贴于3D-slicer文件相关文件夹内,\bin\translations\。打开3dslicer,edit菜单下Application Settings,支持的操作系统:Linux,Mac OSX和Windows。本人英语太差,所以第一反应就是中文版,官网无中文版下载,下载后不能直接使用,必须要发布成qm文件;qm文件已经生成,位于ts文件同一文件夹。

linjianping513的博客 9839

【亲测免费】 SeetaFace2:开源人脸识别引擎

SeetaFace2 是一个开源的全栈人脸识别工具包,采用标准 C++ 语言开发。该项目由 SeetaFaceEngine 团队维护,旨在为开发者和研究人员提供一个高效、易用的人脸识别解决方案。 ## 项目基础介绍 SeetaFace2 包含了构建全自动人脸识别系统所需的三个核心模块:人脸检测模块 FaceDetector、面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比...

gitblog_01175的博客 1348

短信验证码接收平台完整搭建教程(超详细版,附完整源码)

在网站注册、用户登录、找回密码等功能中,验证码(特别是短信验证码)已成为验证用户身份的常见方式。本教程将详细介绍如何从零搭建一个短信验证码接收平台,用于保存、展示并管理来自短信网关或中间转发程序提交的验证码数据。✅ 教程适合有基本 Python/HTML 基础的开发者🚫 禁止用于任何违法用途,仅供学习参考✅ 支持通过 POST 接口接收短信验证码✅ 支持通过网页实时查看验证码历史记录✅ 验证码信息保存在 SQLite 数据库✅ 支持时间戳排序、查询最新验证码。

weixin_52548902的博客 4544

硅谷刷屏的ClawdBot,让Mac mini卖爆了!创始人爆料:一人开发、100% AI 写代码

这两天,个人 AI 助手 ClawdBot 席卷硅谷,国内外社交平台上全是关于它的讨论。 在试用后,网友们纷纷给出了很高的评价。“它是迄今为止最伟大的 AI 应用,相当于你 24 小时全天候专属 AI 员工。”Creator Buddy 创始人兼 CEO Alex Finn 盛赞道,“这就是他们 (Anthropic) 希望 Claude Cowork 呈现的样子。”

技术引领业务创新 1583

开源SeetaFace2人脸识别安装使用

SeetaFace2是一款开源人脸识别引擎,包含人脸检测、关键点定位和特征提取三个核心模块。文章详细介绍了在Ubuntu系统下的编译安装方法,包括依赖安装、源码配置选项说明,以及ARM架构的特殊处理。同时提供了各模块预训练模型的下载链接和使用示例代码,展示了人脸比对和特征提取的基本实现流程。文章指出SeetaFace2缺乏活体检测功能,建议可升级至支持该功能的SeetaFace6版本。该引擎采用标准C++开发,不依赖第三方库,适用于多种硬件平台和应用场景。

m0_68021330的博客 1253

React 源码解析 | Reconcile协调过程

上篇讲了React的工作流程,这篇详细的讲一下render过程中的beginWork函数,也就是深度优先创建Fiber树中"递"的过程。beginWork函数传入当前已经创建好的Fiber节点,返回创建/复用的第一个子FIber节点,也就是wip.child在renderRoot中,在开始创建整棵FIber树之前,会先调用prepareRefreshStack创建/复用一个新的HostRootFiber。

weixin_40710412的博客 1219

图像处理:seetaface2 (一) 编译篇

window平台 准备工具 cmake 下载 MinGW: 这里使用了Qt自带的 seetaface2源码:https://github.com/seetafaceengine/SeetaFace2 编译工程的配置 1、新建个目录build_seetarface2,用于存放编译目标 2.打开cmake-3.21.0-rc2-windows-x86_64\bin\cmake-gui.exe,设置好源码目录及编译目录 配置的时候会提示改错误,检测编译器路径, 3、进行配置 .

weixin_43777852的博客 2098

AI Agent在医疗诊断中的智能应用研究

本文探讨了AIAgent在医疗诊断中的智能应用,分析了其技术原理、实际案例及发展挑战。AIAgent通过机器学习算法处理医疗数据,提升诊断准确性和效率,市场规模预计2025年达200亿美元。核心技术包括数据预处理、深度学习模型和隐私保护方法。应用案例涵盖肺癌筛查、阿尔茨海默病预测等,但面临数据偏差、伦理责任等挑战。未来趋势包括多模态学习、个性化医疗和量子计算融合。随着技术优化和伦理完善,AIAgent将成为医疗体系的重要组成部分。

郑伟强dev的专栏 96

边缘AI工业落地:YOLO26-Seg + RK3588 NPU 极致部署(低功耗+实时实例分割,工业场景全覆盖)

本次实战汇总了「YOLO26-Seg+RK3588 NPU」工业边缘部署中最常见、最致命的8个坑点,所有坑点均来自真实工业项目,解决方案均为零代码/一键操作,无需复杂配置,能让你少走90%的弯路,节省大量时间,必看必记!❌ RKNN转换报错「算子不支持/模型加载失败」→ ✅ 导出ONNX时必须指定opset=12,重新导出即可,RK3588唯一兼容版本;❌ 分割mask错位/轮廓模糊 → ✅ 导出ONNX时加,并保证RKNN的归一化参数与YOLO26一致,零代码修复;

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1717

C/C++人脸识别引擎 SeetaFace2打造“刷脸时代”

SeetaFace2 人脸识别引擎包括了搭建一套全自动人脸识别系统所需的三个核心模块,即:人脸检测模块 FaceDetector、面部关键点定位模块 FaceLandmarker 以及人脸特征提取与比对模块 FaceRecognizer。还将陆续开源人脸跟踪、闭眼检测等辅助模块。 SeetaFace2 采用标准 C++ 开发,全部模块均不依赖任何第三方库,支持 x86 架构(Windo...

1023

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SeetaFace2人脸识别引擎:从入门到精通的完整指南

SeetaFace2是一款开源、全栈式的人脸识别工具包,为开发者和企业提供了一套完整的人脸识别解决方案。这个强大的引擎包含了人脸检测、面部关键点定位和人脸特征提取三大核心模块,让您能够快速构建高效的人脸识别应用系统。🚀 ## 为什么选择SeetaFace2? SeetaFace2在性能和实用性方面都有显著优势: **🎯 卓越的性能表现** - 人脸检测在FDDB数据集上达到92%召回率

gitblog_01158的博客 503

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 玩转OpenHarmony PID:教你打造两轮平衡车
下一篇: 带你玩转OpenHarmony AI:打造智能语音子系统
OpenHarmony开发者
博客等级 码龄5年 626粉丝 221原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值