自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

用HTML5進(jìn)行人臉識(shí)別

開(kāi)發(fā) 前端
其中的一個(gè)特性是getUserMedia( W3C規(guī)范 )。它是一個(gè)JavaScript API,可以讓你訪問(wèn)(需要權(quán)限)用戶的網(wǎng)絡(luò)攝像頭和麥克風(fēng)。

今天發(fā)現(xiàn)一篇文章寫(xiě)的很有趣,叫你如何使用HTML5進(jìn)行人臉識(shí)別。在網(wǎng)頁(yè)內(nèi)進(jìn)行人臉識(shí)別,很好很強(qiáng)大!

“現(xiàn)代Web”不斷發(fā)展出不少有趣的API,但你并不會(huì)在大多數(shù)項(xiàng)目中使用到所有的內(nèi)容。例如我一直特別關(guān)注Canvas特性。它對(duì)游戲和繪圖意義重大 – 但是僅此而已。它并不是一個(gè)不好的特性,我只是不會(huì)經(jīng)常用到它。每當(dāng)看到一些開(kāi)發(fā)中酷炫的新功能,我的大腦里都會(huì)思考它們可以產(chǎn)生哪些實(shí)際用途。顯然對(duì)你有價(jià)值的內(nèi)容可能對(duì)我來(lái)說(shuō)并不一定,但搞清楚我如何實(shí)際使用一個(gè)功能是我學(xué)習(xí)它的一部分。

其中的一個(gè)特性是getUserMedia( W3C規(guī)范 )。它是一個(gè)JavaScript API,可以讓你訪問(wèn)(需要權(quán)限)用戶的網(wǎng)絡(luò)攝像頭和麥克風(fēng)。 目前Opera和Chrome(我相信現(xiàn)在的版本18可以支持,但是你可能需要使用Canary。你還需要啟用它。這兒有一個(gè)說(shuō)明。)一旦你啟用了getUserMedia,它使用起來(lái)相當(dāng)簡(jiǎn)單。這里有一個(gè)快速的訪問(wèn)請(qǐng)求:

  1. //a video tag  
  2. var video = document.getElementById(‘monitor’);  
  3. //request it  
  4. navigator.webkitGetUserMedia(‘video’, gotStream, noStream);  
  5. function gotStream(stream) {  
  6. video.src = webkitURL.createObjectURL(stream);  
  7. video.onerror = function () {  
  8. stream.stop();  
  9. streamError();  
  10. };  
  11. }  
  12. function noStream() {  
  13. document.getElementById(‘errorMessage’).textContent = ‘No camera available.’;  
  14. }  
  15. function streamError() {  
  16. document.getElementById(‘errorMessage’).textContent = ‘Camera error.’;  

getUserMedia的***個(gè)參數(shù)是類(lèi)型。根據(jù)規(guī)范,這應(yīng)該是一個(gè)對(duì)象,你可以啟用音頻、視頻,或兩者兼而有之,像這樣:{audio:true, video:true}。然而在我的測(cè)試中,傳遞一個(gè)字符串“video”也可以正常工作。你將看到的演示基于另一個(gè)演示,所以代碼來(lái)自于一個(gè)較早的Chrome下的版本。第二個(gè)和第三個(gè)參數(shù)是操作成功和失敗的回調(diào)函數(shù)。

你可以看到操作成功的事件處理函數(shù)將視頻流分配給HTML5 Video標(biāo)簽。最酷的是,一旦運(yùn)行起來(lái),你就可以使用Canvas API來(lái)拍照。對(duì)于這個(gè)演示,可以看看Greg Miernicki的Demo:http://miernicki.com/cam.html

如果這個(gè)Demo無(wú)法工作,可以按照下面的說(shuō)明來(lái)開(kāi)啟getUserMedia支持后再次進(jìn)行嘗試。(雖然我打算分享一些屏幕截圖,所以如果你只是想繼續(xù)閱讀,那也沒(méi)關(guān)系。)

基于Greg的Demo,我突然想到可以用網(wǎng)絡(luò)攝像頭的照片做一些很酷的東西。我記得Face.com有一個(gè)非??岬腁PI來(lái)解析臉部的圖片。(我11月曾經(jīng)在博客里寫(xiě)了一個(gè)ColdFusion的例子。)然后我在想,是否我們能把Greg的Demo與Face.com的API結(jié)合起來(lái)做一些基本面部識(shí)別的Demo。

[[68839]]

這有這幾個(gè)重大問(wèn)題。 *** – Face.com有一個(gè)很好的REST API,我們將如何從JavaScript應(yīng)用程序里面來(lái)調(diào)用它?其次 – Face.com需要你可以上傳圖片,或給它一個(gè)網(wǎng)址。 我知道可以把一個(gè)Canvas圖片發(fā)送給服務(wù)器,并通過(guò)我的后臺(tái)上傳到Face.com,但有沒(méi)有辦法繞過(guò)服務(wù)器來(lái)把圖片發(fā)送給這個(gè)API?

***個(gè)實(shí)際上并不是問(wèn)題。Face.com實(shí)現(xiàn)了CORS(跨域資源共享)。CORS系統(tǒng)基本上可以讓服務(wù)器暴露給其它域上文件的Ajax調(diào)用。這是一個(gè)偉大的功能,我希望更多的服務(wù)能夠使用它。

更復(fù)雜的問(wèn)題則是如何把畫(huà)布上的數(shù)據(jù)發(fā)送到Face.com(注:還可以參考我的這篇文章《如何使用HTML5實(shí)現(xiàn)拍照上傳應(yīng)用》)。我如何模擬文件上傳?這里有另一個(gè)很酷的新技巧 – Formdata。ColdFusion的研究員Sagar Ganatra關(guān)于這個(gè)話題有一篇很棒的博客。下面展示了我如何使用它:

  1. function snapshot() {  
  2. $(“#result“).html(“<p><i>Working hard for the money…</i></p>“);  
  3. canvas.width = video.videoWidth;  
  4. canvas.height = video.videoHeight;  
  5. canvas.getContext(’2d’).drawImage(video, 0, 0);  
  6. var data = canvas.toDataURL(‘image/jpeg’, 1.0);  
  7. newblob = dataURItoBlob(data);  
  8. var formdata = new FormData();  
  9. formdata.append(“api_key“, faceKey);  
  10. formdata.append(“api_secret“, faceSecret);  
  11. formdata.append(“filename“,”temp.jpg“);    
  12. formdata.append(“file“,newblob);  
  13. $.ajax({  
  14.     url: ‘http://api.face.com/faces/detect.json?attributes=age_est,gender,mood,smiling,glasses’,  
  15.       data: formdata,  
  16.     cache: false,  
  17.     contentType: false,  
  18.     processData: false,  
  19.     dataType:”json“,  
  20.     type: ‘POST’,  
  21.     success: function (data) {  
  22.         handleResult(data.photos[0]);  
  23.     }  
  24. });      

讓我們一行行來(lái)看這段代碼。首先 – 我需要從畫(huà)布對(duì)象獲取二進(jìn)制數(shù)據(jù)。有幾種方法可以實(shí)現(xiàn),但是我尤其想要一個(gè)二進(jìn)制的Blob。請(qǐng)注意dataURIToBlob方法。這是幾周前我從StockOverflow上發(fā)現(xiàn)的。

我創(chuàng)建了一個(gè)新的formdata對(duì)象,然后簡(jiǎn)單地設(shè)置了自己所需的值。你可以看到我發(fā)起了幾個(gè)API請(qǐng)求,但關(guān)鍵在于文件名和文件對(duì)象本身。

接下來(lái)你可以看到簡(jiǎn)單的jQuery Ajax調(diào)用。Face.com有多種選擇,但我基本只要求它返回預(yù)測(cè)年齡、性別、情緒,是否面帶微笑以及戴著眼鏡。就是這些。我得到了一個(gè)很棒的JSON包,并且對(duì)它進(jìn)行了格式化。

現(xiàn)在顯然API并不***。我獲得了使用API一些不同程度的結(jié)果。有時(shí)相當(dāng)準(zhǔn)確,有時(shí)相反。但是總體來(lái)說(shuō),這相當(dāng)酷。這里有一些實(shí)際測(cè)試的圖片,看起來(lái)有點(diǎn)“可怕”。

識(shí)別結(jié)果:neutral(無(wú)表情)

識(shí)別結(jié)果:happy(開(kāi)心)

識(shí)別結(jié)果:surprised(驚訝)

識(shí)別結(jié)果:sad(悲傷)

好了,準(zhǔn)備自己親自來(lái)試試? 只需點(diǎn)擊下面的演示按鈕。如果需要源代碼,可以直接在頁(yè)面上查看! 這是100%的純客戶端代碼。

原文地址:http://www.html5cn.org/article-2554-1.html

 

 

 

責(zé)任編輯:張偉 來(lái)源: HTML5中國(guó)
相關(guān)推薦

2022-05-25 07:11:13

Python人臉識(shí)別代碼

2013-05-28 11:08:51

人臉識(shí)別html5

2018-05-08 14:25:22

Pythondlib人臉檢測(cè)

2021-03-29 15:13:23

深度學(xué)習(xí)人臉解鎖算法

2015-01-05 09:37:01

HTML5原生app拼積木方式

2013-01-24 10:26:04

HTML5HTML 5HTML5的未來(lái)

2020-12-22 21:57:39

人臉識(shí)別AI人工智能

2011-04-22 15:02:19

HTML5Dojo

2011-05-13 17:36:05

HTML

2013-10-21 15:24:49

html5游戲

2024-06-05 08:14:26

SpringElasticsea人臉數(shù)據(jù)

2012-04-12 11:11:15

HTML5APIWEB

2021-10-29 10:10:28

人工智能AI人臉識(shí)別

2011-05-12 15:42:16

HTML5

2017-01-03 18:09:33

HTML5本地存儲(chǔ)Web

2012-03-07 15:24:41

2021-05-10 11:08:00

人工智能人臉識(shí)別

2011-05-13 17:41:40

2011-01-14 17:53:33

HTML5cssweb

2023-03-16 09:00:00

HTML5HTML語(yǔ)言
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)