文档章节

人脸识别系统原理

邵可佳
 邵可佳
发布于 2015/02/01 20:02
字数 1785
阅读 1740
收藏 34

写这篇文章,并不是要挑战学术泰斗,更不是要在这里炫耀和说教知识。只是前不久有个朋友问我能不能搞人脸识别,我说回来试试。想不到这里头的东西还挺多,不是三两天就能做完的。就在这里把我的实现思路写出来,以表心迹。

图像识别,一直是计算机领域研究的热门,随着大数据的兴起,更是让图像识别中的特殊分支人脸识别如鱼得水,使得运算和样本数据不再成为系统的掣肘。那么具体来说,一个现代人脸识别系统(例如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设置的越合理,则系统查询越快速越准确!
在这样的体系结构下,打造一个可靠的人脸识别系统是完全有可能的!  

© 著作权归作者所有

邵可佳

邵可佳

粉丝 10
博文 20
码字总数 19812
作品 2
顺义
高级程序员
私信 提问
加载中

评论(1)

善良小Z
善良小Z
4
13行代码实现:Python实时视频采集(附源码)

13行代码实现:Python实时视频采集(附源码) 一、前言 本文是《人脸识别完整项目实战》系列博文第3部分:程序设计篇(Python版),第1节《Python实时视频采集程序设计》,本章内容系统介绍:...

优惠码领取
04/08
0
0
人脸识别技术一夜躺枪后百度,旷视,商汤,云从等是这样“技术”回应的

央视315晚会上,人脸识别技术被曝存在安全隐患。不少观众看到主持人在现场技术人员支持下,仅凭两部手机、一张随机正面照片及一个换脸APP,分别就一张”眨眨眼”的照片和一段”活体检测”场景...

玄学酱
2018/04/16
0
0
云+技术沙龙:计算机视觉的原理及最佳实践

还记得当年火爆朋友圈的军装照小应用吗?它背后的人脸融合技术,以及未来人脸融合的新趋势,你一定不能错过! 如何能够搭建一套有效稳定的图像识别系统呢? 如何通过使用腾讯云API搭建自己的图...

腾讯云加社区
04/01
0
0
人脸识别完整项目实战(1):目录大纲篇

一、前言 本文是《人脸识别完整项目实战》系列博文第1章《目录大纲篇》,本章内容系统介绍,《人脸识别项目完整实战》系列博文的目录结构,共8大部分53个章节。 项目概述篇:系统介绍人脸识别...

Hadoop develop
02/28
0
0
人脸识别的简要介绍(附实例、Python代码)

作者:Guest Blog;翻译:王雨桐;校对:蒋雨畅; 本文约2500字,建议阅读10分钟。 本文将介绍人脸识别的基本思路和对代码进行简要分析。 介绍 你是否意识到,每当你上传照片到Facebook上,平...

数据分析v
2018/11/10
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash 和 Python 编程语言优缺点分析

Bash 和 Python 是大多数自动化工程师最喜欢的编程语言。它们都各有优缺点,有时很难选择应该使用哪一个。所以,最诚实的答案是:这取决于任务、范围、背景和任务的复杂性。 让我们来比较一下...

xiangyunyan
26分钟前
3
0
Kubernetes从懵圈到熟练:读懂这一篇,集群节点不下线

排查完全陌生的问题,完全不熟悉的系统组件,是售后工程师的一大工作乐趣,当然也是挑战。今天借这篇文章,跟大家分析一例这样的问题。排查过程中,需要理解一些自己完全陌生的组件,比如sys...

阿里云云栖社区
31分钟前
7
0
解决exe4打包出现的问题

https://blog.csdn.net/gem_yaorao/article/details/48626155

南桥北木
48分钟前
1
0
SpringBoot高级篇JdbcTemplate之数据更新与删除

前面介绍了JdbcTemplate的插入数据和查询数据,占用CURD中的两项,本文则将主要介绍数据更新和删除。从基本使用上来看,姿势和前面的没啥两样 <!-- more --> I. 环境准备 环境依然借助前面一...

小灰灰Blog
今天
3
0
Filecoin 编译问题

https://github.com/filecoin-project/go-filecoin/issues/2503 Error go run ./build build command from root I've faced on this error Building go-filecoin...git log -n 1 --forma......

怎当她临去时秋波那一转
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部