原文:https://paul.kinlan.me/face-detection/

在 Google 开发者峰会中,谷歌成员 Miguel Casas-Sanchez 跟我说:“嘿 Paul,我给你看一个 demo”。看完之后我必须对它进行研究。

Shape Detection API(图形检测API)目前在 WICG 中尚处于孵化和实验阶段,这对于平台来说是一个很好的渐进过程。

Shape Detection API 有意思的地方在于,它是基于用户设备的一些基础硬件功能上创建标准接口的,为 web 平台开启了一组新功能。

在 web 中使用图形检测已有一段很长的时间。有很多的库能够实现边缘检测,面部检测,条形码和二维码检测(我甚至编写过一个具有该功能的 web app)。

Shape Detection API 目前集成在 Chrome Canary(M57)中,能够检测面部、条形码(和二维码),由于 API 还处于实验阶段,你必须开启 chrome://flags/#enable-experimental-web-platform-features。

该 API 使用相当简单,最简单的面部检测是使用图像调用该 API,获取面部列表。

var faceDetector = new FaceDetector();
faceDetector.detect(image)
.then(faces => faces.forEach(face => console.log(face)))
.catch(e => {
console.error("Boo, Face Detection failed: " + e);
});

这里需要一个图像对象(可以是CanvasImageSource,Blob,ImageData 或者一个 <img> 元素),将它传递给系统底层 API,系统将会返回一组 DetectedFace 对象,该对象实际上是包含图像上每一个面部区域的 DetectedObject。

Miguel 写了一个完整的 demo(是我偷来放在 JSBin 的),加载一个图像,传递给检测 API ,然后在图像上绘制出每一个 DetectedFace 的面部矩形区域。(注意:目前仅适用于 Android 的 Chrome,桌面端的很快就能够支持该 API)。

var image = document.getElementById('image');
var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d');
var scale = 1; image.onload = function() {
ctx.drawImage(image,
0, 0, image.width, image.height,
0, 0, canvas.width, canvas.height); scale = canvas.width / image.width;
}; function detect() {
if (window.FaceDetector == undefined) {
console.error('Face Detection not supported');
return;
} var faceDetector = new FaceDetector();
faceDetector.detect(image)
.then(faces => {
// Draw the faces on the <canvas>.
var ctx = canvas.getContext('2d');
ctx.lineWidth = 2;
ctx.strokeStyle = 'red';
for(let face of faces) {
ctx.rect(Math.floor(face.x * scale),
Math.floor(face.y * scale),
Math.floor(face.width * scale),
Math.floor(face.height * scale));
ctx.stroke();
}
})
.catch((e) => {
console.error("Boo, Face Detection failed: " + e);
});
}

这有什么用呢?

启用更多的面部检测 API 有许多不同的使用情况,例如你能够:

  检测面部时能够有更好的体验——我们使用该 API 有很大的灵活性,它允许我们在 Service 或者 Web Worker 中进行处理。

  局部图片剪裁——找到图片中的脸后能够自动剪裁图片。

  能够快速标记——快速的找到场景中所有的人脸,创建一个用户界面,使您能够快速标记他们。

  优化面部识别——一旦你有了人脸图像,你就能够将这些区域传递给面部识别工具。

目前这些都能在浏览器上实现吗?是的,但你需要有渐进性的方案。

渐进性方案

很显然这是一个纯 JS API,需要访问底层硬件的 API,但能够“轻松的”(呵呵)渐进式的建立应用,确保使用低版本 Chrome 的用户依然能够访问。

我的想法是遵循相关规范达到渐进增强:服务器 -> JS(+ 也许是 Web ASM)-> Web API,但我会更深入的研究,因为我看到了许多的挑战。

服务器

我们可以创建一个简单的包含 <input type='file'> 的表单,将图像上传到服务器,可以在服务端完成图像检测,然后将结果返回给客户端。

JS

如果我们使用了 JS,我们能够在浏览器上的页面上下文中使用任意一个客户端库完成面部检测。

Web Assembly:

这种方式进行图像识别,甚至是以高性能的方式进行目标检测,是令人难以置信的(至少在我看来)。“原生平台”早已有许多的库(如 Open CV),主要是用 C 写的,能够应用到浏览器上,利用丰富的生态系统,也能够达到相同的性能。

如果有人实现了多边形检测 API ,这将是非常有用的功能。

Web API

现在它可以使用底层系统 API 时,我们就能够在所有的平台上普及。

我觉得这是一个很有趣的 API,它的确为平台开启了很多的可能性,特别是对我,使用底层系统相对于使用纯 javascript ,极大的提高了在 web 上的目标检测性能,这是我期待条形码检测 API 的原因,它将增强二维码扫描器 Web 应用性能的同事,降低其复杂性。

基于图形检测API(shape detection API)的人脸检测的更多相关文章

  1. 人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIB&OpenCV人脸检测方法及对比)

    1.Easily Create High Quality Object Detectors with Deep Learning 2016/10/11 http://blog.dlib.net/201 ...

  2. 手把手教你 在Pytorch框架上部署和测试 关键点人脸检测项目DBFace,成功实现人脸检测效果

    这期教向大家介绍仅仅 1.3M 的轻量级高精度的关键点人脸检测模型DBFace,并手把手教你如何在自己的电脑端进行部署和测试运行,运行时bug解决. 01. 前言 前段时间DBFace人脸检测库横空出 ...

  3. 目标检测 - Tensorflow Object Detection API

    一. 找到最好的工具 "工欲善其事,必先利其器",如果你想找一个深度学习框架来解决深度学习问题,TensorFlow 就是你的不二之选,究其原因,也不必过多解释,看过其优雅的代码架 ...

  4. SSD目标检测实战(TF项目)——人脸检测2

    数据转化为VOC格式: 一.我们先看 VOC格式的数据是什么??? Annotations:存放xml 包括 文件夹信息   图片名称. 图片尺寸信息. 图片中object的信息. JPEGImage ...

  5. [转]40多个关于人脸检测/识别的API、库和软件

    [转]40多个关于人脸检测/识别的API.库和软件 http://news.cnblogs.com/n/185616/ 英文原文:List of 40+ Face Detection / Recogn ...

  6. 40多个关于人脸检测/识别的API、库和软件

    英文原文:List of 40+ Face Detection / Recognition APIs, libraries, and software 译者:@吕抒真 译文:链接 自从谷歌眼镜被推出以 ...

  7. 转:40多个关于人脸检测/识别的API、库和软件

    文章来自于:http://blog.jobbole.com/45936/ 自从谷歌眼镜被推出以来,围绕人脸识别,出现了很多争议.我们相信,不管是不是通过智能眼镜,人脸识别将在人与人交往甚至人与物交互中 ...

  8. paper 88:人脸检测和识别的Web服务API

    本文汇总了全球范围内提供基于Web服务的人脸检测和识别的API,便于网络中快速部署和人脸相关的一些应用. 1:从How-old的火爆说起 最开始,网站的开发者只是给一个几百人的群发送email,请他们 ...

  9. 异常检测(anomaly detection)

    版权声明:本文为博主原创文章,转载或者引用请务必注明作者和出处,尊重原创,谢谢合作 https://blog.csdn.net/u012328159/article/details/51462942 ...

随机推荐

  1. Python 第八天

    文章读写 读写文章是最常见的 IO 操作. 读 1.Python 中内置了open()函数,read()方法以及close()方法来打开文件 fi = open('test.html','r') co ...

  2. spotlight 索引重建

    从Mac的App Store 上 自动更新微信之后,发现不能在SpotLight上搜索到了. 想着应该是索引出现了问题. 方法一. 采用如下命令重建索引: sudo mdutil -i off /该命 ...

  3. Objective-C写出Json文件(可作配置文件)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px "PingFang SC"; color: #008f00 } span. ...

  4. python--注释

    python中单行注释用#,多行注释用""",看下面的代码: #!/usr/bin/python #coding:utf-8 #编码方式 #打印一行* print &qu ...

  5. .NET 体系结构(.net core、.net framework、xamarin之间的关系)

    这是一张来自官方的图. 图中.NET FRAMEWORK..NET CORE和XAMARIN是三个不同的运行时,这三个运行时在.NET STANDARD LIBRARY之上,它们都包含一些基础的组件, ...

  6. BotVS配置托管者-基于新浪云

    1. 创建SAE应用 登录新浪云平台,点击创建新应用 2. SAE环境部署 在新应用中选择自定义 相应选项如下 开发语言:自定义 运行环境:云容器 语言版本:自定义 部署方式:手工部署 操作系统:系统 ...

  7. linux(十)之初始化文件

    前面写了很多linux的知识,其实很多都是命令的,所以要去多多的练习才能学的更好,加油为了好工作. 要么现在懒惰,未来讨饭.要么现在努力,未来惬意. 一.初始化文件概述 1.1.概述 系统初始化文件是 ...

  8. MariaDB体验1----数据库安装

    之前一直都是使用的微软Sql Server数据库,现在在学习数据分析,要用到mysql.刚好公司在进行云架构升级,数据库选型为MariaDB,就顺势安装体验了一把MariaDB.这里记录一下学习过程. ...

  9. Java内存溢出分析方法(Eclipse Memory Analyzer 使用简单入门)

    转载至:http://outofmemory.cn/java/jvm/OutOfMemoryError-analysis 工具 安装Memory Analyse Tools(MAT) 工具, 可以直接 ...

  10. java对象 深度克隆(不实现Cloneable接口)和浅度克隆

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt128 为什么需要克隆: 在实际编程过程中,我们常常要遇到这种情况:有一个对象 ...