今天, 我们开始学习 tracking.JS, 它是一个由 Eduardo Lundgren 开发的轻量级的 JavaScript 库, 它可以让你做实时的人脸检测, 色彩追踪和标记好友的脸. 在这个教程中, 我们将会看到, 我们如何从静态图片中检测脸, 眼睛和嘴巴.
我一直对视频和图片中的人脸标记, 检测和人脸识别技术很感兴趣. 尽管我知道获取逻辑和算法去开发人脸识别软件或者插件已经超出了我的想象. 当我知道 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; } // 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力 #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 的文件, 这些文件有助于我们从图片中检测人脸, 眼睛和嘴巴. 现在我们写一段代码来实现从静态图片中检测人脸, 眼睛和嘴巴. 我故意选用这张图片, 因为这张图片中有多张不同表情和姿势脸.
本次给大家推荐一个免费的学习圈, 里面概括移动应用网站开发, CSS,HTML,webpack,vue node angular 以及面试资源等. 获取资料
对 Web 开发技术感兴趣的同学,:加入 , 不管你是小白还是大牛我都欢迎, 还有大牛整理的一套高效率学习路线和教程与您免费分享, 同时每天更新视频资料.
最后, 祝大家早日学有所成, 拿到满意 offer, 快速升职加薪, 走上人生巅峰.
为了达成目标, 我们需要修改 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; } // 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力 #img {
- position: absolute; top: 50%; left: 50%; margin: -173px 0 0 -300px; }
- </style>
- // tracking code.
- <script>
- Windows.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';
- }; // 在此我向大家推荐一个前端全栈开发交流圈: 619586920 突破技术瓶颈, 提升思维能力
- };
- </script>
- </head>
- <body>
- <div class="imgContainer">
- <img id="img" src="assets/face.jpg" />
- </div>
- </body>
- </HTML>
结果
代码说明.
tracking.ObjectTracker() 方法对你想要进行跟踪的对象进行了分类, 它可以接受一个数组作为参数.
setStepSize() 指定的块的步进大小.
我们将要跟踪的对象绑定上 "track" 事件, 对象一被跟踪, 很快正在跟踪的对象就会触发跟踪事件.
我们以对象数组的形式中获取数据, 里面有每个对象 (脸部, 嘴部很眼部) 的宽度, 高度 , x 和 y 坐标;
结果总结.
你可能会发现结果会根据形状的条件而有所不同, 还有地方需要改进和提高, 而我们也承认并且真心认同对于这种类型的 API 的开发.
本次给大家推荐一个免费的学习圈, 里面概括移动应用网站开发, CSS,HTML,webpack,vue node angular 以及面试资源等. 获取资料
对 Web 开发技术感兴趣的同学,:加入 , 不管你是小白还是大牛我都欢迎, 还有大牛整理的一套高效率学习路线和教程与您免费分享, 同时每天更新视频资料.
最后, 祝大家早日学有所成, 拿到满意 offer, 快速升职加薪, 走上人生巅峰.
来源: http://www.jianshu.com/p/e11df4358194