使用JavaScript 實(shí)現(xiàn)的人臉檢測(cè)
我一直對(duì)視頻和圖片中的人臉標(biāo)記、檢測(cè)和人臉識(shí)別技術(shù)很感興趣。盡管我知道獲取邏輯和算法去開發(fā)人臉識(shí)別軟件或者插件已經(jīng)超出了我的想象。當(dāng)我知道Javascript庫(kù)可以識(shí)別微笑,眼睛和臉部結(jié)構(gòu)時(shí),我得到啟發(fā)去寫一個(gè)教程。有許多的庫(kù),這些庫(kù)要不就是純粹的基于Javascript的,要不就是基于java語言的。
今天,我們開始學(xué)習(xí)tracking.js,它是一個(gè)由Eduardo Lundgren開發(fā)的輕量級(jí)的javascript庫(kù),它可以讓你做實(shí)時(shí)的人臉檢測(cè),色彩追蹤和標(biāo)記好友的臉。在這個(gè)教程中,我們將會(huì)看到,我們?nèi)绾螐撵o態(tài)圖片中檢測(cè)臉,眼睛和嘴巴。
在教程的最后,你可以看到一個(gè)教程提供可以用的例子,這個(gè)例子有技巧和提示以及更多的技術(shù)細(xì)節(jié)。
首先,我們需要建立一個(gè)工程,從github中下載這個(gè)工程并且抽取build文件夾,根據(jù)你的文件和目錄結(jié)構(gòu)放置build文件夾。在這個(gè)教程里,我用了如下的文件和目錄結(jié)構(gòu)。
文件夾結(jié)構(gòu)
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
你可以看到j(luò)s文件夾里有我們從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個(gè)javascript來自于tracking.js的文件,這些文件有助于我們從圖片中檢測(cè)人臉、眼睛和嘴巴?,F(xiàn)在我們寫一段代碼來實(shí)現(xiàn)從靜態(tài)圖片中檢測(cè)人臉,眼睛和嘴巴。我故意選用這張圖片,因?yàn)檫@張圖片中有多張不同表情和姿勢(shì)臉。

為了達(dá)成目標(biāo),我們需要修改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>
結(jié)果

代碼說明.
tracking.ObjectTracker() 方法對(duì)你想要進(jìn)行跟蹤的對(duì)象進(jìn)行了分類,它可以接受一個(gè)數(shù)組作為參數(shù).
setStepSize() 指定的塊的步進(jìn)大小.
我們將要跟蹤的對(duì)象綁定上 “track” 事件, 對(duì)象一被跟蹤,很快正在跟蹤的對(duì)象就會(huì)觸發(fā)跟蹤事件.
我們以對(duì)象數(shù)組的形式中獲取數(shù)據(jù),里面有每個(gè)對(duì)象(臉部,嘴部很眼部)的寬度,高度 , x 和 y 坐標(biāo);
結(jié)果總結(jié).
你可能會(huì)發(fā)現(xiàn)結(jié)果會(huì)根據(jù)形狀的條件而有所不同, 還有地方需要改進(jìn)和提高,而我們也承認(rèn)并且真心認(rèn)同對(duì)于這種類型的API的開發(fā).
運(yùn)行示例:
帶有的圖片的運(yùn)行示例.
更多資源 – 基于 Javascript 的面部識(shí)別
https://github.com/auduno/headtrackr
https://github.com/auduno/clmtrackr
我們計(jì)劃為 HTML5 的 Canvas 和攝像頭視頻的臉部跟蹤以及圖像標(biāo)簽做一個(gè)教程。你可能會(huì)用到我上面提到的客戶端訪問攝像頭博客,它可以幫助你,用你知道的方式去訪問用戶的攝像頭。
注意:由于瀏覽器安全性的原因,這個(gè)程序需要運(yùn)行在一樣的域或者禁用網(wǎng)絡(luò)安全的瀏覽器中。
請(qǐng)您花一點(diǎn)時(shí)間將文章分享給您的朋友或者留下評(píng)論。我們將會(huì)由衷感謝您的支持!
相關(guān)文章
Axios?get?post請(qǐng)求傳遞參數(shù)的實(shí)現(xiàn)代碼
axios是基于promise用于瀏覽器和node.js的http客戶端,支持瀏覽器和node.js,能攔截請(qǐng)求和響應(yīng),這篇文章主要介紹了axios?get?post請(qǐng)求傳遞參數(shù)的操作代碼,需要的朋友可以參考下2022-11-11
javascript類型系統(tǒng) Window對(duì)象學(xué)習(xí)筆記
這篇文章主要介紹了javascript類型系統(tǒng)之Window對(duì)象,整理關(guān)于Window對(duì)象的學(xué)習(xí)筆記,感興趣的小伙伴們可以參考一下2016-01-01
js瀏覽器本地存儲(chǔ)store.js介紹及應(yīng)用
store.js 是一個(gè)兼容所有瀏覽器的 LocalStorage 包裝器,不需要借助 Cookie 或者 Flash。store.js 即可實(shí)現(xiàn)本地存儲(chǔ)功能2014-05-05
JavaScript實(shí)現(xiàn)身份證驗(yàn)證代碼
本文給大家分享的是使用javascript實(shí)現(xiàn)身份驗(yàn)證的規(guī)則以及代碼,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。2016-02-02
JS獲取月的最后一天與JS得到一個(gè)月份最大天數(shù)的實(shí)例代碼
本篇文章主要是對(duì)JS獲取月的最后一天與JS得到一個(gè)月份最大天數(shù)的實(shí)例代碼進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助2013-12-12
JS 密碼強(qiáng)度驗(yàn)證(兼容IE,火狐,谷歌)
仿JQuery中文社區(qū)注冊(cè),JS 密碼強(qiáng)度驗(yàn)證(兼容IE,火狐,谷歌)2010-03-03

