Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
o語言中文網(wǎng),致力于每日分享編碼、開源等知識(shí),歡迎關(guān)注我,會(huì)有意想不到的收獲!
使用你的臉授權(quán)解鎖你的手機(jī)正在成為一種趨勢(shì),但是在 Web 上,這種情況看到的并不多,也許是因?yàn)檫@種功能對(duì) Web 來說不太重要,不足以被實(shí)現(xiàn)。那么,僅通過 HTML5,Javascript 和一些 Go 語句,能夠?qū)崿F(xiàn)人臉識(shí)別的功能么?答案是肯定的,我使用 Facebox在一個(gè)小時(shí)完成了這個(gè)工作,并將 代碼作為一個(gè)名為 Web Face ID 的開源項(xiàng)目發(fā)布。
你怎么從使用人臉識(shí)別的網(wǎng)站上獲益?
通過 Machinebox 使用 Web Face ID 來驗(yàn)證自己。
作為一個(gè)通用的方法,我們將會(huì)使用 HTML5 通過網(wǎng)絡(luò)攝像頭來獲取用戶頭像,用 Javascript 發(fā)送一張照片到服務(wù)器端。一旦照片到了服務(wù)器上,我們將使用 Go 解碼照片并使用 Facebox 進(jìn)行檢查,以便能夠發(fā)出響應(yīng)。
我們把整個(gè)過程分成以下幾個(gè)步驟。
你需要啟動(dòng) Facebox 并運(yùn)行,為此您 只需注冊(cè)一個(gè)賬戶 即可將 Facebox 作為 Docker 容器運(yùn)行。還需要使用你想要識(shí)別的人的照片給 Facebox 進(jìn)行訓(xùn)練,一張照片就夠,但多張照片會(huì)使結(jié)果更準(zhǔn)確。
使用 HTML5 和 Javascript 捕捉攝像頭
對(duì)于網(wǎng)站,我們可以利用 HTML5 的 video 標(biāo)簽和 canvas 標(biāo)簽。
我們將使用 video 標(biāo)簽去捕捉攝像頭,并使用 canvas 標(biāo)簽拍攝照片,然后發(fā)送到服務(wù)器端,下面是 Javascript 代碼
上面的代碼基本上實(shí)現(xiàn)了這樣的過程,當(dāng)你單擊該按鈕時(shí),將攝像頭的照片信息捕獲到 canvas 中,并將照片發(fā)送到服務(wù)器端的斷點(diǎn)(endpoint) /webFaceID。這張照片將是一個(gè)以 base64 編碼的 PNG。
現(xiàn)在我們?cè)诜?wù)器端有了你的臉部圖像,我們只需要解碼圖像,將解碼后的數(shù)據(jù)發(fā)送給 Facebox with the SDK 完成后面復(fù)雜的工作,然后將處理后的結(jié)果返回給前端. 這里我們可以寫一個(gè) Go http handler 來做這個(gè)工作。
通過這幾行代碼,我們可以在任何網(wǎng)站上使用人臉驗(yàn)證。
那么,任何類型的生物識(shí)別(比如使用你的臉,虹膜或是指紋)只能作為 “用戶名”,而不能作為 “密碼”。所以如果你的網(wǎng)站要實(shí)現(xiàn)這個(gè)功能,那么它可以作為一個(gè)理想的第二身份認(rèn)證,或是某種降低風(fēng)險(xiǎn)的工作,但是它不能取代密碼。
另外請(qǐng)記住,惡意攻擊者可以拍下你的照片,并用你的照片來仿照你的身份。
重點(diǎn)提示:Facebox 經(jīng)過優(yōu)化,可以在任何類型的場(chǎng)景下識(shí)別任何照片中的人物,但是端點(diǎn) /check 具有可以調(diào)整的可選參數(shù) tolerance。如果您的臉部驗(yàn)證的條件不會(huì)改變(例如相同的位置,相同的環(huán)境照明),您可以減小容差,使得驗(yàn)證時(shí)系統(tǒng)更加嚴(yán)格。
如果你想看看整個(gè)代碼,請(qǐng)?jiān)L問 Github 上的 Web Face ID。它是開源的。
你可以很容易地使用我們的盒子來實(shí)現(xiàn)這樣的功能。立即注冊(cè)并免費(fèi)開始使用此功能。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 校對(duì):rxcai
本文由 GCTT 原創(chuàng)編譯,Go語言中文網(wǎng) 榮譽(yù)推出
著HTML5及WebRTC技術(shù)的發(fā)展,前端開發(fā)者已經(jīng)可以直接在瀏覽器中調(diào)用用戶的攝像頭設(shè)備,并借助JavaScript庫進(jìn)行復(fù)雜的人臉識(shí)別操作。本文將詳述這一過程,包括如何通過HTML5獲取攝像頭實(shí)時(shí)視頻流以及如何結(jié)合Face Detection/Recognition庫實(shí)現(xiàn)人臉檢測(cè)與識(shí)別功能。
HTML5中的?MediaDevices.getUserMedia()??方法可以讓我們請(qǐng)求訪問用戶的媒體輸入設(shè)備,如攝像頭。下面展示基本代碼:
<!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???接口,然后嘗試請(qǐng)求訪問用戶的攝像頭。當(dāng)請(qǐng)求成功時(shí),將攝像頭的視頻流賦值給??<video>??標(biāo)簽,使其顯示實(shí)時(shí)畫面。
雖然HTML5本身不直接提供人臉識(shí)別的功能,但我們可以引入第三方JavaScript庫如face-api.js或TensorFlow.js來處理攝像頭視頻流中的圖像數(shù)據(jù),實(shí)現(xiàn)人臉識(shí)別。
例如,使用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);
// 進(jìn)行人臉識(shí)別等更復(fù)雜的操作...
}, 100);
});
}
setupCamera();
</script>
在此示例中,我們首先加載face-api.js提供的預(yù)訓(xùn)練模型,然后在視頻播放過程中周期性地從每一幀中檢測(cè)人臉、提取面部特征點(diǎn)并進(jìn)行進(jìn)一步的人臉識(shí)別處理。實(shí)際的人臉識(shí)別邏輯可以根據(jù)需求編寫,例如對(duì)比已知人臉庫、計(jì)算相似度等。
注意,上述代碼片段僅展示了人臉識(shí)別框架的集成,實(shí)際應(yīng)用前需要將模型文件下載到服務(wù)器,并正確指定模型加載路徑。此外,對(duì)于大規(guī)模部署或高精度要求的應(yīng)用場(chǎng)景,還需要考慮性能優(yōu)化和隱私保護(hù)等問題。
總結(jié)起來,通過HTML5和強(qiáng)大的JavaScript庫相結(jié)合,現(xiàn)代web應(yīng)用能夠方便快捷地實(shí)現(xiàn)調(diào)用手機(jī)攝像頭并進(jìn)行人臉識(shí)別功能,這極大地豐富了Web應(yīng)用程序的交互性和實(shí)用性。
為P20 Pro采用的是基于Android8.1開發(fā)的EMUI8.1操作系統(tǒng),整體的系統(tǒng)UI界面相對(duì)比較清新簡(jiǎn)潔,較符合國內(nèi)用戶的操作使用習(xí)慣。另外部分軟件支持長按軟件圖標(biāo)進(jìn)行快捷操作,比如當(dāng)我在外選擇支付寶進(jìn)行支付時(shí),此時(shí)只需要長按支付寶圖標(biāo),然后選擇付錢或者掃一掃進(jìn)行支付即可,在實(shí)際生活中操作起來相對(duì)比較便利。
在日常生活之中,華為P20 Pro的智能助手界面可以提供許多便捷的生活服務(wù),比如打車、訂酒店、查快遞等等。比如日常查收快遞時(shí),無法隨時(shí)隨地知道快遞的具體情況,在智能助手查快遞功能之中,綁定自己收貨的手機(jī)號(hào),此時(shí)手機(jī)就會(huì)自動(dòng)將快遞信息在智能助手界面展現(xiàn),對(duì)于快遞就有了實(shí)時(shí)的掌握。
除此之外,智能助手還可根據(jù)手機(jī)短信的飛機(jī)、高鐵等訂票信息,自動(dòng)將最近的行程規(guī)劃展現(xiàn)在智能助手界面,讓你對(duì)自己的行程有個(gè)及時(shí)的了解,不得不說確實(shí)很貼心。
另外華為P20 Pro支持的智能識(shí)別功能,可通過兩指同時(shí)按壓方法,進(jìn)行文字或者商品的識(shí)別,快速查詢到相關(guān)信息。比如在聊天之中談到某個(gè)綜藝節(jié)目或者閱讀一篇文章,此時(shí)就可通過此方法進(jìn)行快速查詢了解。
在系統(tǒng)導(dǎo)航方面,我們除了可以使用屏幕外物理導(dǎo)航鍵以外,還可選擇屏幕內(nèi)單鍵導(dǎo)航、屏幕內(nèi)虛擬導(dǎo)航欄、懸浮導(dǎo)航等三種方式。其中屏幕內(nèi)單鍵導(dǎo)航是華為P20 Pro新增的一個(gè)導(dǎo)航方式,具體操作方法與屏幕外物理導(dǎo)航鍵相似,輕觸返回、長按HOME、左右滑動(dòng)進(jìn)入任務(wù)窗口,此種導(dǎo)航方式相對(duì)虛擬導(dǎo)航欄來說,更節(jié)約了占屏面積。
在系統(tǒng)解鎖方面,除了傳統(tǒng)的指紋解鎖與密碼解鎖以外,華為P20 Pro也支持人臉解鎖技術(shù)。在使用時(shí),需進(jìn)入手機(jī)人臉解鎖設(shè)置界面,選擇錄入機(jī)主面部特征,從而實(shí)現(xiàn)人臉解鎖。在實(shí)際體驗(yàn)中,光線充足條件下解鎖較為靈敏,但在光線不足情況下,偶爾有可能會(huì)造成解鎖失敗。
EMUI8.1的語音助手相對(duì)之前的EMUI5.0版本優(yōu)化了不少,界面看起來更清新一些,語音操控的智能性更加智慧,比如對(duì)著語音助手說:“發(fā)送微博今天天氣不錯(cuò)”,此時(shí)手機(jī)就會(huì)自動(dòng)打開微博APP發(fā)送“今天天氣不錯(cuò)”的微博內(nèi)容。
日常出門我一般都是坐公交或者地鐵,平時(shí)的時(shí)候都會(huì)攜帶一些零錢或者實(shí)體交通卡,使用華為P20 Pro可將這些統(tǒng)統(tǒng)拋棄。在華為P20 Pro 進(jìn)行NFC刷卡測(cè)試時(shí),整體的刷卡體驗(yàn)較為流暢,NFC反應(yīng)靈敏度較高,使用到目前沒有出現(xiàn)無法刷卡現(xiàn)象的發(fā)生。
在硬件方面,華為P20 Pro搭載的是2017年發(fā)布的海思麒麟970芯片,這是一款全球首款內(nèi)置獨(dú)立NPU的智能手機(jī)AI計(jì)算平臺(tái),采用了TSMC10nm的領(lǐng)先制作工藝,CPU采用了4XA73@2.4Ghz+4xA53@1.8Ghz八核CPU,GPU并且也采用商用Mail G72 MP12 GPU。
海思麒麟970芯片由于發(fā)布較早等原因,雖然相對(duì)高通驍龍845性能略有不足,但是依舊是頂尖芯片之一,在安兔兔評(píng)測(cè)測(cè)試中,依舊獲得了211916高跑分,另外Geekbench也獲得了單核心1900分,多核心6779分較高的水準(zhǔn)。
在魯大師跑分測(cè)試中,華為P20 Pro獲得了208005高分,這個(gè)跑分與搭載驍龍845的三星S9相差無幾,在體驗(yàn)測(cè)試中獲得了135.79分,HTML5測(cè)評(píng)中獲得41036評(píng)測(cè)分?jǐn)?shù)。
魯大師AI性能測(cè)試中,華為P20 Pro獲得了973高跑分,作為全球首款搭載NPU的智能AI芯片,獲得如此高分也是在情理之中。在實(shí)際的AI拍攝及其它AI體驗(yàn)中,也獲得了較為不錯(cuò)的效果。
在游戲測(cè)試中,我們首先進(jìn)行了《王者榮耀》體驗(yàn)測(cè)試,當(dāng)開啟高幀率模式,游戲中的FPS雖然偶爾會(huì)有所下降,但是基本可以維持在40-60FPS范圍之內(nèi),整體的游戲體驗(yàn)流暢度較為不錯(cuò),機(jī)身的背面與屏幕雖然會(huì)略有發(fā)燙但是在可接受范圍之內(nèi)。華為P20 Pro的劉海屏在游戲體驗(yàn)時(shí)也做了適配,游戲體驗(yàn)時(shí)可視界面更為大一些,但是劉海屏?xí)?duì)左側(cè)的購買裝備欄有輕微的遮蓋,但是不影響正常的游戲體驗(yàn)。
在《刺激戰(zhàn)場(chǎng)》游戲體驗(yàn)中,華為P20 Pro表現(xiàn)給我印象十分深刻,可以再高清畫質(zhì)下流暢體驗(yàn),屏幕的滑動(dòng)及點(diǎn)擊非常順手,可以快讀瞄準(zhǔn)敵人并迅速擊斃。在翻墻及裝備拾取方面,反應(yīng)較為靈敏,整體的連貫性較為完整。在與敵人鋼槍的時(shí)候,完全無操作的壓力,中間毫無卡頓感覺,吃雞也變得非常簡(jiǎn)單。
華為P20 Pro 搭載的海思麒麟970芯片,在性能上已然滿足用戶追求卓越性能的需求,再配以EMUI8.1的流暢、人性化操作系統(tǒng),讓人感受到了更為極致的系統(tǒng)體驗(yàn)!
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。