专栏首页HyperAI超神经浏览器里标记生活大爆炸所有演员 — — face-api.js

浏览器里标记生活大爆炸所有演员 — — face-api.js

超神经HyperAI 导读

忘掉那些不开心的,还是有人在好好做浏览器的啦。

最近,一群工程师基于 tensorflow.js core 框架,开发出一款可以在浏览器上运行的人脸识别 API——face-api.js,不仅能同时还可以识别多张人脸,让更多非专业 AI 工程师,能够低成本使用人脸识别技术。

人脸识别原理

face-api.js 是一个基于 Tensorflow.js core 的 js 框架,通过三种 CNN 来进行人脸识别和人脸特征检测,从而识别图像中的人物。

跟大多数图像识别技术一样,这项技术的实现原理也是通过匹配数据库,找到相似度最高的图像,并输出结果。不过,face-api.js 可以同时识别一张图像中的多张人脸。

一般人脸识别技术的工作原理为:工程师们先把大量标记有人名等信息的图像输入到系统,构建数据训练集,然后将识别对象作为测试集,与训练集中的图像进行比对。

如果两个图像相似度达到阈值,则输出结果,否则输出「unknown」。

face-api.js 的实现原理

首先需要进行人脸检测,即圈出图像中所有的人脸。

face-api.js 通过 SSD 算法(Single Shot Multibox Detector)来进行人脸检测。SSD 算法是一种可以直接检测目标类别,并确定 bounding box(俗称 b box)的多目标检测法,在提高识别精度的同时还能提高识别速度。

可以将 SSD 理解为一个基于 MobileNetV1 的 CNN,并额外添加了边框预测层。系统首先通过 bounding box 圈定面部轮廓,并进行打分,跟人脸越接近的图像分数越高,以此来过滤掉非面部的图像内容。

为保证准确性,输入测试集的图像应以人脸为中心,所以需要对面部进行边框对齐。为此 face-api.js 通过一个简单的 CNN 来找出确定人脸图像的 68 个标志点,为下一步人脸识别做准备。

示例图

通过标志点,系统可以进一步确定人脸图像,下图是人脸对齐前(左)和对齐后(右)的效果图。

人脸对齐效果图

很明显,对齐后,跟人脸无关的东西更少了,这是有利于提高系统识别精度的。

人脸识别的实现

圈定人脸后就要开始进行面部识别了。

该程序会将对齐后的人脸输入到人脸识别深度学习网络中,该网络基于 ResNet-34 体系架构,通过 Dlib 库进行人脸检测。该技术可以将人脸特征映射到一个人脸描述符(具有 128 个值的特征向量)上,这个过程通常被称为人脸嵌入。

之后,程序再将每个图像的人脸描述符,与训练集中的人脸描述符进行相似度比较,并基于阈值判断两个面是否相似(对于 150×150 像素的人脸图像,阈值采用 0.6 较为合适)。

可采用欧式距离(即欧几里得度量)进行相似度度量,效果非常好,实际效果可观察下面这张 gif 图。

Talk is cheap , show me the code !

介绍完理论知识后,就该给大家演练一下实操过程了,以下图作为输入图像。

第一步:获取脚本

可以从 dist /face-api.js 上获取最新脚本:

也可以通过 NPM 获取:

第二步:加载数据模型

模型文件可以作为 Web 应用程序的静态资源,也可以挂载到其他位置,可以通过指定文件路径或 URL 来加载模型。

假设模型在 public/models 目录下:

如果是加载特定模型,则为:

第三步:获得完整描述

HTML 图像、画布或视频都可以作为网络的输入。下面是获取输入图像,即所有人脸的完整描述:

也可以自主选择人脸位置和特征:

还可以通过 HTML 画布显示边框,使结果可视化:

人脸特征显示如下:

现在我们已经可以计算出输入图像中每张人脸的位置和描述符,这些描述符将作为参考数据。

下一步是获取图像的 URL,并使用 faceapi.bufferToImage 创建 HTML 图像元素:

对每个图像确定人脸位置并计算描述符:

然后遍历输入图像的人脸描述符,找到参考数据中最相似的描述符:

通过欧几里得度量,获得输入图像中每个人脸的最佳匹配结果,并在 HTML 画布中显示边框及其标签:

这就是 face-api.js 的人脸识别全过程,是不是非常简单呢?感兴趣的朋友可以去试试,欢迎把你的实验结果和心得体会发给我们。

本文分享自微信公众号 - HyperAI超神经(HyperAI)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-08-16

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 国内人脸识别第一案来了,我们来谈谈国外法规和隐私保护技术

    导读:近日,浙江理工大学特聘副教授郭兵起诉杭州野生动物世界年卡系统采集人脸,已被杭州市富阳区人民法院正式受理。此案被称为“国内人脸识别第一案”。一直被忽视的互联...

    华章科技
  • 云从科技温浩:不能为了AI而做AI,应该形成感知、认知和决策闭环

    AI企业发展应该是一个从学术研究、行业验证、商业落地、行业平台到智能生态的一层层深入过程。

    镁客网
  • 利用OpenCV进行人脸对齐

    人脸对齐,即根据图像中人脸的几何结构对图像进行仿射变换(旋转、缩放、平移等),将人脸变换到一个统一的状态。人脸对齐是人脸识别的一个重要步骤,可以提升人脸识别的精...

    OpenCV学堂
  • 人脸识别升级版进美国高校遭抵制!CMU “教室监视”系统连老师也不放过

    继中国高校试水人脸识别进教室后,美国高校也“享受”到了类似的待遇,甚至还加入了姿势、动作识别。

    新智元
  • 人脸识别简介(使用Python代码)

    人脸识别是计算机视觉的一个子领域,它的应用范围非常广泛,现在已经成为世界各地的企业争相竞逐的新技术之一。考虑到市场的盈利现状,未来这项技术还会有更大的需求空间,...

    小小詹同学
  • OpenCV4 | 如何一行代码搞定SSD模型推理与结果解析

    最新版本OpenCV4.1.2,针对深度神经网络模块,提供了三个高阶的API,通过它们,自动实现输入图像预处理与后处理,直接输出检测结果,支持图像分类、对象检测...

    OpenCV学堂
  • 国内人脸识别第一案,我们来谈谈国外法规和隐私保护技术

    一是杭州野生动物世界“为了方便消费者快速入园”,在今年 10 月将年卡系统从“指纹入园”升级为“人脸识别入园”,被消费者起诉。起诉者是浙江理工大学特聘副教授郭兵...

    数据派THU
  • 人脸识别哪家强?四种API对比

    2001年,Paul Viola和Michael Jone开始了计算机视觉的革命,当时的人脸识别技术并不成熟,识别准确度较低,速度也很慢。直到提出了Viola-...

    小小詹同学
  • OpenCV实现年龄与性别预测

    前面我写了很多篇关于OpenCV DNN应用相关的文章,这里再来一篇文章,用OpenCV DNN实现一个很有趣好玩的例子,基于Caffe的预训练模型实现年龄与性...

    小小詹同学
  • CPU上跑深度学习模型,FPS也可以达100帧

    英特尔从去年推出OpenVINO开发框架,从此以后几乎每三个月就更新一个版本,最新版本2019R03,但是此版本跟之前的版本改动比较大,所以在配置Python ...

    OpenCV学堂

扫码关注云+社区

领取腾讯云代金券