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小时内与您取得联系。