使用JavaScript 实现的人脸检测


Posted in Javascript onMarch 24, 2015

我一直对视频和图片中的人脸标记、检测和人脸识别技术很感兴趣。尽管我知道获取逻辑和算法去开发人脸识别软件或者插件已经超出了我的想象。当我知道Javascript库可以识别微笑,眼睛和脸部结构时,我得到启发去写一个教程。有许多的库,这些库要不就是纯粹的基于Javascript的,要不就是基于java语言的。

今天,我们开始学习tracking.js,它是一个由Eduardo Lundgren开发的轻量级的javascript库,它可以让你做实时的人脸检测,色彩追踪和标记好友的脸。在这个教程中,我们将会看到,我们如何从静态图片中检测脸,眼睛和嘴巴。
在教程的最后,你可以看到一个教程提供可以用的例子,这个例子有技巧和提示以及更多的技术细节。

首先,我们需要建立一个工程,从github中下载这个工程并且抽取build文件夹,根据你的文件和目录结构放置build文件夹。在这个教程里,我用了如下的文件和目录结构。

文件夹结构

Project Folder
│
│  index.html
│
├───assets
│    face.jpg
│
└───js
  │  tracking-min.js
  │  tracking.js
  │
  └───data
      eye-min.js
      eye.js
      face-min.js
      face.js
      mouth-min.js
      mouth.js

你可以看到js文件夹里有我们从tracking.js中抽取的javascript文件。下面是index.html的html代码。

HTML代码

<!doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title>@tuts Face Detection Tutorial</title>
 
 <script src="js/tracking-min.js"></script>
 <script src="js/data/face-min.js"></script>
 <script src="js/data/eye-min.js"></script>
 <script src="js/data/mouth-min.js"></script>
 
 <style>
 .rect {
  border: 2px solid #a64ceb;
  left: -1000px;
  position: absolute;
  top: -1000px;
 }
 
 #img {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -173px 0 0 -300px;
 }
 </style>
</head>
<body>
<div class="imgContainer">
 <img id="img" src="assets/face.jpg" />
</div>
 
</body>
</html>

在上面的HTML代码中,我们引入4个javascript来自于tracking.js的文件,这些文件有助于我们从图片中检测人脸、眼睛和嘴巴。现在我们写一段代码来实现从静态图片中检测人脸,眼睛和嘴巴。我故意选用这张图片,因为这张图片中有多张不同表情和姿势脸。

使用JavaScript 实现的人脸检测

为了达成目标,我们需要修改html文件头部的代码。

HTML 代码

<!doctype html>
<html>
<head>
 <meta charset="utf-8">
 <title>@tuts Face Detection Tutorial</title>
 
 <script src="js/tracking-min.js"></script>
 <script src="js/data/face-min.js"></script>
 <script src="js/data/eye-min.js"></script>
 <script src="js/data/mouth-min.js"></script>
 
 <style>
 .rect {
  border: 2px solid #a64ceb;
  left: -1000px;
  position: absolute;
  top: -1000px;
 }
 
 #img {
  position: absolute;
  top: 50%;
  left: 50%;
  margin: -173px 0 0 -300px;
 }
 </style>
// tracking code.
<script>
  window.onload = function() {
   var img = document.getElementById('img');
 
   var tracker = new tracking.ObjectTracker(['face', 'eye', 'mouth']); // Based on parameter it will return an array.
   tracker.setStepSize(1.7);
 
   tracking.track('#img', tracker);
 
   tracker.on('track', function(event) {
    event.data.forEach(function(rect) {
     draw(rect.x, rect.y, rect.width, rect.height);
    });
   });
 
   function draw(x, y, w, h) {
    var rect = document.createElement('div');
    document.querySelector('.imgContainer').appendChild(rect);
    rect.classList.add('rect');
    rect.style.width = w + 'px';
    rect.style.height = h + 'px';
    rect.style.left = (img.offsetLeft + x) + 'px';
    rect.style.top = (img.offsetTop + y) + 'px';
   };
  };
 </script>
 
</head>
<body>
<div class="imgContainer">
 <img id="img" src="assets/face.jpg" />
</div>
 
</body>
</html>

结果

使用JavaScript 实现的人脸检测

代码说明.
tracking.ObjectTracker() 方法对你想要进行跟踪的对象进行了分类,它可以接受一个数组作为参数.
setStepSize() 指定的块的步进大小.
我们将要跟踪的对象绑定上 “track” 事件, 对象一被跟踪,很快正在跟踪的对象就会触发跟踪事件.
我们以对象数组的形式中获取数据,里面有每个对象(脸部,嘴部很眼部)的宽度,高度 , x 和 y 坐标;
结果总结.
你可能会发现结果会根据形状的条件而有所不同, 还有地方需要改进和提高,而我们也承认并且真心认同对于这种类型的API的开发.
运行示例:
带有的图片的运行示例.
更多资源 – 基于 Javascript 的面部识别
https://github.com/auduno/headtrackr
https://github.com/auduno/clmtrackr

我们计划为 HTML5 的 Canvas 和摄像头视频的脸部跟踪以及图像标签做一个教程。你可能会用到我上面提到的客户端访问摄像头博客,它可以帮助你,用你知道的方式去访问用户的摄像头。
注意:由于浏览器安全性的原因,这个程序需要运行在一样的域或者禁用网络安全的浏览器中。

请您花一点时间将文章分享给您的朋友或者留下评论。我们将会由衷感谢您的支持!

Javascript 相关文章推荐
CSS+JS构建的图片查看器
Jul 22 Javascript
原生js写的放大镜效果
Aug 22 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
ie8本地图片上传预览示例代码
Jan 12 Javascript
浅谈JavaScript中null和undefined
Jul 09 Javascript
浅析javascript中的Event事件
Dec 09 Javascript
详解webpack + vue + node 打造单页面(入门篇)
Sep 23 Javascript
vue + element-ui实现简洁的导入导出功能
Dec 22 Javascript
vue router 配置路由的方法
Jul 26 Javascript
JS使用Date对象实时显示当前系统时间简单示例
Aug 23 Javascript
原生JS实现顶部导航栏显示按钮+搜索框功能
Dec 25 Javascript
如何管理Vue中的缓存页面
Feb 06 Vue.js
JS使用ajax方法获取指定url的head信息中指定字段值的方法
Mar 24 #Javascript
JS使用ajax从xml文件动态获取数据显示的方法
Mar 24 #Javascript
推荐10 款 SVG 动画的 JavaScript 库
Mar 24 #Javascript
JavaScript中textRange对象使用方法小结
Mar 24 #Javascript
jQuery实现防止提交按钮被双击的方法
Mar 24 #Javascript
使用AngularJS 应用访问 Android 手机的图片库
Mar 24 #Javascript
jQuery插件实现控制网页元素动态居中显示
Mar 24 #Javascript
You might like
php 运行效率总结(提示程序速度)
2009/11/26 PHP
自适应图片大小的弹出窗口
2006/07/27 Javascript
js 幻灯片的实现
2011/12/06 Javascript
ASP.NET jQuery 实例16 通过控件CustomValidator验证RadioButtonList
2012/02/03 Javascript
JQuery实现表格中相同单元格合并示例代码
2013/06/26 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
详解addEventListener的三个参数之useCapture
2015/03/16 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
js微信支付实现代码
2016/12/22 Javascript
js和jquery中获取非行间样式
2017/05/05 jQuery
Vue2.0 组件传值通讯的示例代码
2017/08/01 Javascript
js实现登录注册框手机号和验证码校验(前端部分)
2017/09/28 Javascript
详解如何在项目中使用jest测试react native组件
2018/02/09 Javascript
JS实现的定时器展示简单秒表、页面弹框及跳转操作完整示例
2020/01/26 Javascript
vscode 插件开发 + vue的操作方法
2020/06/05 Javascript
js在HTML的三种引用方式详解
2020/08/29 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
Python PyAutoGUI模块控制鼠标和键盘实现自动化任务详解
2018/09/04 Python
浅谈Python中函数的定义及其调用方法
2019/07/19 Python
python实现PID算法及测试的例子
2019/08/08 Python
在python中做正态性检验示例
2019/12/09 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
Python基于Faker假数据构造库
2020/11/30 Python
html5+CSS3+JS实现七夕言情功能代码
2017/08/28 HTML / CSS
泰国第一的化妆品网站:Konvy
2018/02/25 全球购物
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
Super-Pharm波兰:药房和香水在一个地方
2020/08/18 全球购物
生物制药专业自我鉴定
2014/02/19 职场文书
人身损害赔偿协议书范本
2014/09/27 职场文书
2015元旦主持词开场白和结束语
2014/12/14 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
叶县这家生产军用电台的兵工厂,人称“四机部”,走出一上将
2022/02/18 无线电
Python实现将多张图片合成MP4视频并加入背景音乐
2022/04/28 Python
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers