o語言中文網,致力于每日分享編碼、開源等知識,歡迎關注我,會有意想不到的收獲!
使用你的臉授權解鎖你的手機正在成為一種趨勢,但是在 Web 上,這種情況看到的并不多,也許是因為這種功能對 Web 來說不太重要,不足以被實現。那么,僅通過 HTML5,Javascript 和一些 Go 語句,能夠實現人臉識別的功能么?答案是肯定的,我使用 Facebox在一個小時完成了這個工作,并將 代碼作為一個名為 Web Face ID 的開源項目發布。
你怎么從使用人臉識別的網站上獲益?
通過 Machinebox 使用 Web Face ID 來驗證自己。
作為一個通用的方法,我們將會使用 HTML5 通過網絡攝像頭來獲取用戶頭像,用 Javascript 發送一張照片到服務器端。一旦照片到了服務器上,我們將使用 Go 解碼照片并使用 Facebox 進行檢查,以便能夠發出響應。
我們把整個過程分成以下幾個步驟。
你需要啟動 Facebox 并運行,為此您 只需注冊一個賬戶 即可將 Facebox 作為 Docker 容器運行。還需要使用你想要識別的人的照片給 Facebox 進行訓練,一張照片就夠,但多張照片會使結果更準確。
使用 HTML5 和 Javascript 捕捉攝像頭
對于網站,我們可以利用 HTML5 的 video 標簽和 canvas 標簽。
我們將使用 video 標簽去捕捉攝像頭,并使用 canvas 標簽拍攝照片,然后發送到服務器端,下面是 Javascript 代碼
上面的代碼基本上實現了這樣的過程,當你單擊該按鈕時,將攝像頭的照片信息捕獲到 canvas 中,并將照片發送到服務器端的斷點(endpoint) /webFaceID。這張照片將是一個以 base64 編碼的 PNG。
現在我們在服務器端有了你的臉部圖像,我們只需要解碼圖像,將解碼后的數據發送給 Facebox with the SDK 完成后面復雜的工作,然后將處理后的結果返回給前端. 這里我們可以寫一個 Go http handler 來做這個工作。
通過這幾行代碼,我們可以在任何網站上使用人臉驗證。
那么,任何類型的生物識別(比如使用你的臉,虹膜或是指紋)只能作為 “用戶名”,而不能作為 “密碼”。所以如果你的網站要實現這個功能,那么它可以作為一個理想的第二身份認證,或是某種降低風險的工作,但是它不能取代密碼。
另外請記住,惡意攻擊者可以拍下你的照片,并用你的照片來仿照你的身份。
重點提示:Facebox 經過優化,可以在任何類型的場景下識別任何照片中的人物,但是端點 /check 具有可以調整的可選參數 tolerance。如果您的臉部驗證的條件不會改變(例如相同的位置,相同的環境照明),您可以減小容差,使得驗證時系統更加嚴格。
如果你想看看整個代碼,請訪問 Github 上的 Web Face ID。它是開源的。
你可以很容易地使用我們的盒子來實現這樣的功能。立即注冊并免費開始使用此功能。https://machinebox.io/
via: https://blog.machinebox.io/introducing-web-face-id-how-to-use-html5-go-and-facebox-to-verify-your-face-b75cf2aee5e8
作者:David Hernandez 譯者:Titanssword 校對:rxcai
本文由 GCTT 原創編譯,Go語言中文網 榮譽推出
著HTML5及WebRTC技術的發展,前端開發者已經可以直接在瀏覽器中調用用戶的攝像頭設備,并借助JavaScript庫進行復雜的人臉識別操作。本文將詳述這一過程,包括如何通過HTML5獲取攝像頭實時視頻流以及如何結合Face Detection/Recognition庫實現人臉檢測與識別功能。
HTML5中的?MediaDevices.getUserMedia()??方法可以讓我們請求訪問用戶的媒體輸入設備,如攝像頭。下面展示基本代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Face Recognition</title>
</head>
<body>
<video id="video" width="640" height="480" autoplay></video>
<script>
if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
navigator.mediaDevices.getUserMedia({ video: true })
.then(function(stream) {
var video = document.getElementById('video');
video.srcObject = stream;
})
.catch(function(error) {
console.error('Error accessing camera:', error);
});
} else {
console.error('getUserMedia is not supported by your browser.');
}
</script>
</body>
</html>
上述代碼首先檢查瀏覽器是否支持??getUserMedia???接口,然后嘗試請求訪問用戶的攝像頭。當請求成功時,將攝像頭的視頻流賦值給??<video>??標簽,使其顯示實時畫面。
雖然HTML5本身不直接提供人臉識別的功能,但我們可以引入第三方JavaScript庫如face-api.js或TensorFlow.js來處理攝像頭視頻流中的圖像數據,實現人臉識別。
例如,使用face-api.js的基本流程:
<!-- 引入face-api.js -->
<script src="https://cdn.jsdelivr.net/npm/@vladmandic/face-api@latest/dist/face-api.min.js"></script>
<!-- ... 上面獲取攝像頭流的HTML和JS代碼 ... -->
<script>
async function setupCamera() {
const video = document.getElementById('video');
// 加載模型
await faceapi.nets.ssdMobilenetv1.loadFromUri('/models');
await faceapi.nets.faceLandmark68Net.loadFromUri('/models');
await faceapi.nets.faceRecognitionNet.loadFromUri('/models');
// 在視頻播放后開始處理每一幀
video.addEventListener('play', () => {
const canvas = document.createElement('canvas');
const displaySize = { width: video.width, height: video.height };
faceapi.matchDimensions(canvas, displaySize);
setInterval(async () => {
const detections = await faceapi.detectAllFaces(video, new faceapi.SsdMobilenetv1Options()).withFaceLandmarks().withFaceDescriptors();
canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height);
faceapi.draw.drawDetections(canvas, detections);
faceapi.draw.drawFaceLandmarks(canvas, detections);
// 進行人臉識別等更復雜的操作...
}, 100);
});
}
setupCamera();
</script>
在此示例中,我們首先加載face-api.js提供的預訓練模型,然后在視頻播放過程中周期性地從每一幀中檢測人臉、提取面部特征點并進行進一步的人臉識別處理。實際的人臉識別邏輯可以根據需求編寫,例如對比已知人臉庫、計算相似度等。
注意,上述代碼片段僅展示了人臉識別框架的集成,實際應用前需要將模型文件下載到服務器,并正確指定模型加載路徑。此外,對于大規模部署或高精度要求的應用場景,還需要考慮性能優化和隱私保護等問題。
總結起來,通過HTML5和強大的JavaScript庫相結合,現代web應用能夠方便快捷地實現調用手機攝像頭并進行人臉識別功能,這極大地豐富了Web應用程序的交互性和實用性。
為P20 Pro采用的是基于Android8.1開發的EMUI8.1操作系統,整體的系統UI界面相對比較清新簡潔,較符合國內用戶的操作使用習慣。另外部分軟件支持長按軟件圖標進行快捷操作,比如當我在外選擇支付寶進行支付時,此時只需要長按支付寶圖標,然后選擇付錢或者掃一掃進行支付即可,在實際生活中操作起來相對比較便利。
在日常生活之中,華為P20 Pro的智能助手界面可以提供許多便捷的生活服務,比如打車、訂酒店、查快遞等等。比如日常查收快遞時,無法隨時隨地知道快遞的具體情況,在智能助手查快遞功能之中,綁定自己收貨的手機號,此時手機就會自動將快遞信息在智能助手界面展現,對于快遞就有了實時的掌握。
除此之外,智能助手還可根據手機短信的飛機、高鐵等訂票信息,自動將最近的行程規劃展現在智能助手界面,讓你對自己的行程有個及時的了解,不得不說確實很貼心。
另外華為P20 Pro支持的智能識別功能,可通過兩指同時按壓方法,進行文字或者商品的識別,快速查詢到相關信息。比如在聊天之中談到某個綜藝節目或者閱讀一篇文章,此時就可通過此方法進行快速查詢了解。
在系統導航方面,我們除了可以使用屏幕外物理導航鍵以外,還可選擇屏幕內單鍵導航、屏幕內虛擬導航欄、懸浮導航等三種方式。其中屏幕內單鍵導航是華為P20 Pro新增的一個導航方式,具體操作方法與屏幕外物理導航鍵相似,輕觸返回、長按HOME、左右滑動進入任務窗口,此種導航方式相對虛擬導航欄來說,更節約了占屏面積。
在系統解鎖方面,除了傳統的指紋解鎖與密碼解鎖以外,華為P20 Pro也支持人臉解鎖技術。在使用時,需進入手機人臉解鎖設置界面,選擇錄入機主面部特征,從而實現人臉解鎖。在實際體驗中,光線充足條件下解鎖較為靈敏,但在光線不足情況下,偶爾有可能會造成解鎖失敗。
EMUI8.1的語音助手相對之前的EMUI5.0版本優化了不少,界面看起來更清新一些,語音操控的智能性更加智慧,比如對著語音助手說:“發送微博今天天氣不錯”,此時手機就會自動打開微博APP發送“今天天氣不錯”的微博內容。
日常出門我一般都是坐公交或者地鐵,平時的時候都會攜帶一些零錢或者實體交通卡,使用華為P20 Pro可將這些統統拋棄。在華為P20 Pro 進行NFC刷卡測試時,整體的刷卡體驗較為流暢,NFC反應靈敏度較高,使用到目前沒有出現無法刷卡現象的發生。
在硬件方面,華為P20 Pro搭載的是2017年發布的海思麒麟970芯片,這是一款全球首款內置獨立NPU的智能手機AI計算平臺,采用了TSMC10nm的領先制作工藝,CPU采用了4XA73@2.4Ghz+4xA53@1.8Ghz八核CPU,GPU并且也采用商用Mail G72 MP12 GPU。
海思麒麟970芯片由于發布較早等原因,雖然相對高通驍龍845性能略有不足,但是依舊是頂尖芯片之一,在安兔兔評測測試中,依舊獲得了211916高跑分,另外Geekbench也獲得了單核心1900分,多核心6779分較高的水準。
在魯大師跑分測試中,華為P20 Pro獲得了208005高分,這個跑分與搭載驍龍845的三星S9相差無幾,在體驗測試中獲得了135.79分,HTML5測評中獲得41036評測分數。
魯大師AI性能測試中,華為P20 Pro獲得了973高跑分,作為全球首款搭載NPU的智能AI芯片,獲得如此高分也是在情理之中。在實際的AI拍攝及其它AI體驗中,也獲得了較為不錯的效果。
在游戲測試中,我們首先進行了《王者榮耀》體驗測試,當開啟高幀率模式,游戲中的FPS雖然偶爾會有所下降,但是基本可以維持在40-60FPS范圍之內,整體的游戲體驗流暢度較為不錯,機身的背面與屏幕雖然會略有發燙但是在可接受范圍之內。華為P20 Pro的劉海屏在游戲體驗時也做了適配,游戲體驗時可視界面更為大一些,但是劉海屏會對左側的購買裝備欄有輕微的遮蓋,但是不影響正常的游戲體驗。
在《刺激戰場》游戲體驗中,華為P20 Pro表現給我印象十分深刻,可以再高清畫質下流暢體驗,屏幕的滑動及點擊非常順手,可以快讀瞄準敵人并迅速擊斃。在翻墻及裝備拾取方面,反應較為靈敏,整體的連貫性較為完整。在與敵人鋼槍的時候,完全無操作的壓力,中間毫無卡頓感覺,吃雞也變得非常簡單。
華為P20 Pro 搭載的海思麒麟970芯片,在性能上已然滿足用戶追求卓越性能的需求,再配以EMUI8.1的流暢、人性化操作系統,讓人感受到了更為極致的系統體驗!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。