首页 文章 精选 留言 我的

精选列表

搜索[编译原理],共10000篇文章
优秀的个人博客,低调大师

人脸识别系统原理

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zergskj/article/details/43374003 写这篇文章,并不是要挑战学术泰斗,更不是要在这里炫耀和说教知识。只是前不久有个朋友问我能不能搞人脸识别,我说回来试试。想不到这里头的东西还挺多,不是三两天就能做完的。就在这里把我的实现思路写出来,以表心迹。 图像识别,一直是计算机领域研究的热门,随着大数据的兴起,更是让图像识别中的特殊分支人脸识别如鱼得水,使得运算和样本数据不再成为系统的掣肘。那么具体来说,一个现代人脸识别系统(例如face++)是如何实现的呢? 这里我不敢妄自猜测,我仅提供我自己的实现方法,拿出来与大家一起学习和探讨: 1.首先建立目标模型,分析出目标模型的特征值,也就是在检索中所需要的KPI,我这里只是简单的列了一下,结果发现太多了,而我又太懒,写了一半没动力写下去了,人脸特征列表: 特征 KPI指标 特征描述 能否提取 特征值 整体 头发密度 浓密、稀疏 是 0-100 头发粗糙度 顺滑、卷毛、散乱 否 头发颜色 黑色、白色、棕色 是 0-255 皮肤材质 粗糙、细腻 是 0-100 皮肤颜色 棕褐色、嫩白色 是 0-255 人脸轮廓 圆脸、瓜子脸 是 0-10 额头 额头形状 扁平、秃头 否 额头大小 宽阔、窄小 否 额头材质 同整体 额头颜色 同整体 眼睛 眉毛形状 弯眉、剑眉、画眉 眉毛颜色 黑、褐 眼睛大小 眼睛形状 眼睛颜色 瞳孔大小 瞳孔颜色 眼袋大小 眼袋形状 耳朵 耳朵形状 耳朵大小 耳廓比例 耳垂比例 耳朵颜色 鼻子 鼻梁长度 鼻翼宽度 鼻子高度 鼻子纹理 鼻孔大小 鼻孔角度 鼻毛长度 嘴巴 嘴巴大小 嘴巴形状 嘴巴颜色 上下嘴唇比例 嘴唇纹理 嘴唇高度 脸颊 脸颊大小 脸颊形状 脸颊材质 脸颊颜色 下巴 下巴大小 下巴形状 下巴材质 下巴颜色 呵呵,确实不少,光整理KPI指标就得花1-2天吧,如果KPI列的越细,通过KPI值匹配到的人脸自然越精确。看到这里,大家是不是已经隐约感到,人脸识别其实也不难了吧?,错了,道理其实不难,难的就在后继的实现上。 2.提取图像的KPI指标:提取图像中的特征区域,关键在于计算出准确的Harris角点,多年以来,不少科学家和技术人员为了使得提取更精确,提出了很多计算角点的算法,而我们不得不对这些先驱心存感激之情,正是他们的不懈努力,才使得我们今天的工作变得轻而易举。这里就可以直接使用JavaCV里提供的角点提取API,通过FaceExactor抽取类库,很方便的找到图像中的人脸。不会这么简单吧? 3.提取人脸中的特征区域: 的确没这么简单,真正困难的地方才刚刚开始,如果要找到人脸区域内的上述KPI,又该采用什么策略呢?在这里据我所知,业内是没有很好的解决方案的,通常他们都是使用算法自动分类的手段。 什么意思呢?也就是将图像矩阵的二维数据,通过机器学习,从海量的样本数据中找到规律,并自动将数据包分类。 这里就有必要提一下时下比较流行的“支持向量机模型”,“支持向量机”就是将低维数据转换为高维数据,发现数据的规律,并分类。 请注意:以上的这种手段是从纯数学的角度找到的解决方案,并不符合人类识别物体的思维习惯,也就是说程序自动划分的图像的特征数据包,对人类来说,是没有任何意义的!好了,问题来了: 怎样让取得的图像碎片数据包既能准确表述图像的特征规律,又有语法上的意义?这里,我的解决方案就是人工干预:将图像碎片数据包以列表的形式在后台呈现出来,在Lucene的检索字段中预先建立好了可以容纳KPI的字段,比如:眼睛大小、鼻梁长度等。每次样本数据被“支持向量机”分类后,便让管理员手工在后台进行标注,也就是给数据包打标签 那么,紧接着,大家会问: 这样现实吗?这么海量的数据,人工操作到什么时候? 幸运的是,我们并不需要重复标注,对于有意义的图像碎片包,我们仅仅只需标注一次即可,下次相似的图像碎片就会自动分配到此标签下,而管理员仅需剔除完全错误的碎片包即可,也就是说,系统运行后期,管理员只是在做“内容检查” 4.建立人脸识别的金字塔模型好了,一切看似ok了,为什么还要做第四步,这不是有点多余吗? 呵呵,还是那句话,没这么简单。人脸识别系统最重要的也是系统运行的速度,通常数据都是TB为单位的,再通过CBIR将图像分解为特征词包,那数据量会成倍增长,如果没有科学的架构,再好的算法也是望洋兴叹! 我们这里先暂时设置金字塔的层次为3层,第一层只有三个特征值,第二层有6特征值,第三层包含了所有特征值 如下表所示: 头发颜色 人脸轮廓 眼睛形状 头发材质 头发粗糙度 皮肤材质 皮肤颜色 眉毛形状 眼睛大小 头发 密度 头发 粗糙 度 ... ... 脸颊 大小 脸颊 形状 ... ... ... ... ... ... 选择KPI指标时需要比较小心,上一层的KPI必须能涵盖下一层的KPI,否则查找特征就容易丢失。每次系统发起查找,实际只用第一层的KPI进行匹配,再从匹配的结果集里用第二层KPI进行匹配,依次类推,直到找到最匹配的结果。 5.性能及结果准确度测试这里的性能结果和准确度,只能在系统真正实现了以后提供给大家了,在这里就不写了。 但是有一点是可以肯定的:系统的KPI设置的越合理,则系统查询越快速越准确! 在这样的体系结构下,打造一个可靠的人脸识别系统是完全有可能的!

优秀的个人博客,低调大师

GCC Rust 前端编译器首个补丁正在 review

GCC 指导委员会本月批准了 GCC Rust 前端,为 GNU Compiler Collection 加入 Rust 语言支持。目前第一个正式补丁系列已提交审核。 Herron Philip 在周三提交了"Rust frontend patches v1",这是由四个补丁组成的 GCC Rust 前端初始代码。他在gcc-patches 列表中写道,“这是 Rust 前端补丁集的初始版本 1。对于我们已实现的所有 target hook,还有更多变化需要提取。目标是查看我们是否正在为 x86 和 arm 实现 target hooks 信息。对于可以在此处添加的其他 target,我们有更多补丁,它们都会遵循此处建立的模式。" 目前来看,GCC-Rust 已经很好地进行了融合,现在在指导委员会的支持下,明年发布的 GCC 13 应该会实现初步的 Rust 支持,当然仍处于早期形式。例如,borrow checker 和其他功能仍有待解决。 这些 GCC Rust 补丁基于上游 GNU Compiler Collection 代码库重新编写,并为新的前端设置了布局骨架,还为 i386 和 ARM 提供初始 target hook,然后开始布局前端代码。 GCC Rust 的代码仍然需要更仔细的审查,它有可能作为 GCC 13 的一部分而亮相,GCC 13 将于 2023 年 4 月左右发布稳定版,其对 Rust 语言的支持有希望达到 beta 级别。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册