人臉識別html5效果,用HTML5實現人臉識別

注:今天 HTML5 小組沙龍《論道 HTML5 》分享時有朋友問到一個問題, getUserMedia 是否會支持人臉識別,我當時的答案是這應該是應用來實現的功能,而不是規范要完成的工作。而我之前在網上看到過一篇關于 getUserMedia 和人臉識別的相關文章,覺得很有趣,正好趁這個機會分享給大家。

轉載請注明出處: 蔣宇捷的博客

“ 現代 Web” 不斷發展出不少有趣的 API ,但你并不會在大多數項目中使用到所有的內容。例如我一直特別關注 Canvas 特性。它對游戲和繪圖意義重大 – 但是僅此而已。它并不是一個不好的特性,我只是不會經常用到它。每當看到一些開發中酷炫的新功能,我的大腦里都會思考它們可以產生哪些 實際 用途。顯然對你有價值的內容可能對我來說并不一定,但搞清楚我如何實際使用一個功能是我學習它的一部分。

其中的一個特性是 getUserMedia ( )。它是一個 JavaScript API ,可以讓你訪問(需要權限)用戶的網絡攝像頭和麥克風。 目前 Opera 和 Chrome (我相信現在的版本 18 可以支持,但是你可能需要使用 Canary 。你還需要啟用它。這兒有一個 。)一旦你啟用了 getUserMedia ,它使用起來相當簡單。這里有一個快速的訪問請求:

//a video tagvar video = document.getElementById('monitor');//request itnavigator.webkitGetUserMedia('video', gotStream, noStream);function gotStream(stream) {video.src = webkitURL.createObjectURL(stream);video.onerror = function () {stream.stop();streamError();};}function noStream() {document.getElementById('errorMessage').textContent = 'No camera available.';}function streamError() {document.getElementById('errorMessage').textContent = 'Camera error.';}

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

你可以看到操作成功的事件處理函數將視頻流分配給HTML5 Video 標簽。最酷的是,一旦運行起來,你就可以使用 Canvas API 來拍照。 對于這個演示,可以看看 Greg Miernicki 的 Demo :

如果這個Demo 無法工作,可以按照下面的說明來開啟getUserMedia支持后再次進行嘗試。(雖然我打算分享一些屏幕截圖,所以如果你只是想繼續閱讀,那也沒關系。)

基于Greg 的Demo,我突然想到可以用網絡攝像頭的照片做一些很酷的東西。我記得 有一個 非常 酷的 API 來解析臉部的圖片。 (我 11 月曾經在博客里寫了一個 ColdFusion 的 。)然后我在想,是否我們能把 Greg 的 Demo 與 Face.com 的 API 結合起來做一些基本面部識別的 Demo 。

5873028cb4901bb43401db87928ee2e2.gif

這有這幾個重大問題。 第一 – Face.com 有一個很好的 REST API ,我們將如何從 JavaScript 應用程序里面來調用它? 其次 – Face.com 需要你可以上傳圖片,或給它一個網址。 我知道可以把一個 Canvas 圖片發送給服務器,并通過我的后臺上傳到 Face.com ,但有沒有辦法繞過服務器來把圖片發送給這個 API ?

第一個實際上并不是問題。 Face.com 實現了 (跨域資源共享)。 CORS 系統基本上可以讓服務器暴露給其它域上文件的 Ajax 調用。 這是一個偉大的功能,我希望更多的服務能夠使用它。

更復雜的問題則是如何把畫布上的數據發送到Face.com (宇捷注:還可以參考我的這篇文章《 如何使用 HTML5 實現拍照上傳應用 》)。我如何模擬文件上傳?這里有另一個很酷的新技巧 – Formdata 。 ColdFusion 的研究員 Sagar Ganatra 關于這個話題有一篇很棒的 。 下面展示了我如何使用它:

function snapshot() {$("#result").html("

Working hard for the money...

");canvas.width = video.videoWidth;canvas.height = video.videoHeight;canvas.getContext('2d').drawImage(video, 0, 0);var data = canvas.toDataURL('image/jpeg', 1.0);newblob = dataURItoBlob(data);var formdata = new FormData();formdata.append("api_key", faceKey);formdata.append("api_secret", faceSecret);formdata.append("filename","temp.jpg"); formdata.append("file",newblob); $.ajax({ url: 'http://api.face.com/faces/detect.json?attributes=age_est,gender,mood,smiling,glasses', data: formdata, cache: false, contentType: false, processData: false, dataType:"json", type: 'POST', success: function (data) { handleResult(data.photos[0]); }}); }

讓我們一行行來看這段代碼。 首先 – 我需要從畫布對象獲取二進制數據。 有幾種方法可以實現,但是我尤其想要一個二進制的 Blob 。 請注意 dataURIToBlob 方法。 這是幾周前我從 上發現的。

我創建了一個新的formdata 對象,然后簡單地設置了自己所需的值。你可以看到我發起了幾個 API 請求,但關鍵在于文件名和文件對象本身。

接下來你可以看到簡單的jQuery Ajax 調用。 Face.com 有多種選擇,但我基本只要求它返回預測年齡、性別、情緒,是否面帶微笑以及戴著眼鏡。 就是這些。我得到了一個很棒的 JSON 包,并且對它進行了格式化。

現在顯然API 并不完美。我獲得了使用 API 一些不同程度的結果。 有時相當準確,有時相反。但是總體來說,這相當酷。這里有一些實際測試的圖片,看起來有點“可怕”。

0193e91c58d234d9c55a5e307e6c469c.png

識別結果:neutral(無表情)

dd26d6fd3370d697a5cdfcfa4ff4cf47.png

識別結果: happy(開心)

17c405dbccd620d2b6309075d9ddd139.png

識別結果:surprised(驚訝)

adf8c3fffddb3511b3af34444b20852f.png

識別結果:sad(悲傷)

好了,準備自己親自來試試? 只需點擊下面的演示按鈕。如果需要源代碼,可以直接在頁面上查看! 這是100 %的純客戶端代碼。

8795c2c5c1ba93e807ade8938b72dc98.png

如果想從另外一方面了解 getUserMedia ,可以看看這些例子:

感謝 getUserMedia ( HTML5Doctor 的這篇文章不錯,可以了解到 getUserMedia 的前世今生,以及和 HTML Media Capture API 的區別。)

本文轉載自:蔣宇捷的專欄

歡迎加入我愛機器學習QQ14群:336582044

getqrcode.jpg

微信掃一掃,關注我愛機器學習公眾號

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/394649.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/394649.shtml
英文地址,請注明出處:http://en.pswp.cn/news/394649.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

企業如何尋找最合適的托管數據中心,以維持IT和業務的增長運營

想象一下,當您興奮地拿了鑰匙,走進您剛買的新家時,才突然意識到新家還沒通電,互聯網寬帶也還沒有通,而想要找個電工或者別的相關技術支持人員也不見蹤影。而且,更糟糕的是,您似乎還聽到您附近的…

gt爵士變形步驟_代碼廣播簡介:您可以編碼為24/7的爵士節拍

gt爵士變形步驟閱讀本文時,您可以繼續閱讀Code Radio。 (You can go ahead and start listening to Code Radio while you read this) Most developers I know listen to music while they code. When the meetings are over, the headphones come out.我認識的大多…

python3中format方法_[翻譯]python3中新的字符串格式化方法-----f-string

從python3.6開始,引入了新的字符串格式化方式,f-字符串. 這使得格式化字符串變得可讀性更高,更簡潔,更不容易出現錯誤而且速度也更快. 在本文后面,會詳細介紹f-字符串的用法. 在此之前,讓我們先來復習一下python中字符串格式化的方法. python中傳統的字符串格式化方法. 在pytho…

華為mate40會不會有鴻蒙系統,鴻蒙OS系統正式推送,拿華為Mate40更新后,發現了優缺點...

自從鴻蒙系統正式推送之后,筆者一直都帶著好奇心在體驗著HarmonyOS 2帶來的變化,生怕錯過驚喜,也擔心系統本身會出現不足。因為鴻蒙系統就像是年輕人一樣,才剛剛出爐,需要時間去磨練,然后才能發揮出真正強大…

jstack使用

jstack主要用來查看某個Java進程內的線程堆棧信息,根據堆棧信息我們可以定位到具體代碼,所以它在JVM性能調優中使用得非常多,語法格式如下: jstack [option] pid jstack [option] executable core jstack [option] [server-id]rem…

如何使用TensorFlow對象檢測API播放Quidditch

by Bharath Raj巴拉斯拉吉(Bharath Raj) 如何使用TensorFlow對象檢測API播放Quidditch (How to play Quidditch using the TensorFlow Object Detection API) Deep Learning never ceases to amaze me. It has had a profound impact on several domains, beating benchmarks …

刪除目錄軟鏈接注意事項

2019獨角獸企業重金招聘Python工程師標準>>> 實驗環境: 在root 目錄下創建一個目錄 1 ,并在該目錄下創建一個2.txt 的文件,寫入內容 1.txt: [rootserver ~]# mkdir 1 [rootserver ~]# echo 1.txt > 1/2.txt [rootserver ~]# tree 1 1 └─…

html如何模擬點擊,Javascript 模擬點擊事件(點擊鏈接與html點擊) 兼容IE/Firefox

一把情況下模擬點擊一般兩個方面,模擬點擊超級連接事件firefox的兼容的函數為對HTMLAnchorElement 加入onclick事件try {// create a element so that HTMLAnchorElement is accessibledocument.createElement(a);HTMLElement.prototype.click function () {if (ty…

mvn編寫主代碼與測試代碼

maven編寫主代碼與測試代碼 3.2 編寫主代碼 項目主代碼和測試代碼不同,項目的主代碼會被打包到最終的構件中(比如jar),而測試代碼只在運行測試時用到,不會被打包。默認情況下,Maven假設項目主代碼位于src/…

打印速度快點的打印機_SLM推出了功能強大的新型金屬3D打印機,速度快20倍

德國金屬3D打印機制造商SLM Solutions在Formnext Connect貿易展覽會上推出了功能強大的新系統NXG XII 600。SLM的大幅面機器配備了十二個可同時運行的1 KW激光器,使其速度比該公司自己的單激光SLM 280快20倍。NXG XII 600經過定制設計,可大量生產大型零件…

把轉變為json_如何使用7行JSON將您的網站轉變為移動應用程序

把轉變為jsonby Ethan通過伊桑 將Web引擎融合到本機應用程序的新方法 (A New Approach for Blending Web Engine into Native Apps) What if I told you the 7 lines of JSON above, colored in orange is all you need to turn a website into a mobile app? No need to rew…

1.7Oob 繼承關系中構造方法的使用

1:父類中最好要有一個空參數的構造方法,因為默認的構造方法在自定義了構造方法后就不存在了,需要顯示的寫出來。 若父類中沒有空參數的構造方法,則子類必須有自定義的構造方法,且用super()調用父…

JavaScript浮點運算0.2+0.1 !== 0.3

浮點運算JavaScript 本文主要討論JavaScript的浮點運算,主要包括 JavaScript number基本類型二進制表示十進制浮點數的精度number 數字類型 在JavaScript中,數字只有number這一種類型; var intS 2,floatA 0.1; typeof intS; // number typeof floatA…

html獲取data-*值,html5 獲取和設置data-*屬性值的四種方法講解

1、獲取id的對象2、需要獲取的就是data-id 和 dtat-vice-id的值一:getAttribute()方法const getId document.getElementById(getId);// //getAttribute()取值屬性console.log(getId.getAttribute("data-id"));//console.log(getId.getAttribute("da…

三菱模擬量輸入與輸出程序_初學PLC是學習西門子還是三菱?

PLC的種類繁多,品牌大多分為歐系、日系、美系。德系PLC以西門子為主,日系有三菱、歐姆龍、松下……,美系有羅克韋爾(A-B)通用電氣(GE)公司、莫迪(MODICON)公司等。美國和歐洲的PLC技術是在相互隔離情況下獨立研究開發的,因此美國和…

性能測試十四:Xshell鏈接linux虛擬機

一、先裝一個linux虛擬機 VBoxcentos1、先下載Linux鏡像文件的ovf或者OVA文件2、打開vbox,點擊菜單欄“管理”-“導入虛擬電腦3、選擇解壓路徑中的ovf或者OVA文件,點擊下一步 4、點擊“導入”,等待完成5、導入成功后,選擇新導入的…

代碼編寫工具_我希望在開始編寫代碼時就已經知道的工具:已復習

代碼編寫工具by Mario Hoyos通過馬里奧霍約斯(Mario Hoyos) 我希望在開始編寫代碼時就已經知道的工具:已復習 (Tools I wish I had known about when I started coding: Revisited) A few days ago, I wrote this article for freeCodeCamp which has since gone o…

Hydra掃描姿勢

參數詳解: -R 根據上一次進度繼續破解 -S 使用SSL協議連接 -s 指定端口 -l 指定用戶名 -L 指定用戶名字典(文件) -p 指定密碼破解 -P 指定密碼字典(文件) -e 空密碼探測和指定用戶密碼探測(ns) -C 用戶名可以用:分割(username:password)可以代替-l username -p pass…

html5進度條插件 傳遞參數,Html5進度條插件(自寫)

(function () {window.H5ProgressBar function (obj) {this.height obj.height;this.width obj.width;this.speed obj.speed;};//在界面上布局元素H5ProgressBar.prototype.drawLayout function () {document.write("開始下載")document.write(" ")do…

python合并txt文本_Python實現將目錄中TXT合并成一個大TXT文件的方法

本文實例講述了Python實現將目錄中TXT合并成一個大TXT文件的方法。分享給大家供大家參考。具體如下: 在網上下了一個dota的英雄攻略,TXT格式,每個英雄一個文件,看得疼,就寫了一個小東西,合并一下. #codinggbk import os import sys import glob def dirTxtToLargeTx…