人脸识别 html5-工具系列| H5如何实现人脸识别

2024-02-10 0 5,369 百度已收录

背景

人脸识别技术目前已经非常成熟,但主要流行在移动终端和专有设备应用上,在Web端上很少见。 出于学习目的,从头实现了Web端的人脸登录功能。

视频流

使用navigator.getUserMedia方法获取浏览器中的视频流+音频流(通过摄像头耳机),以后可以用来获取任何数据流,比如光盘、传感器等。

识别工具百度人脸识别

1. 分析图片中人脸的遮挡、模糊、光照硬度、姿势角度、完整性、大小等特征,并根据符合质量标准的输出图片返回准确的相似度得分。 2. 比较两张图片。 人脸相似度并返回相似度得分 3. 支持四种图片类型的人脸比对:日常生活照片、身份证照片、身份证芯片照片、网格照片 4. 分析单张图片中人像缺陷(摩尔皱纹、成像畸形)等)判断图片中的目标物体是否为真人,保证比对效果真实可靠

人脸识别

被誉为世界上最简单的人脸识别库(真的很好用)。 您可以通过Python参考或命令行使用它来管理和识别人脸。 该软件包采用了dlib中最先进的人脸识别深度学习算法,使得在“Labled Faces in the world”测试基准下识别准确率达到99.38%。 它还提供了一个名为face_recognition的命令行工具人脸识别 html5,以便您可以使用命令行来识别文件夹中的图像。

整体流程启动Web服务,使用face_recognition对基础库图像进行建模,并将建模结果(识别出的人脸在图像中的位置和面部特征)加载到显存中。 前端通过h5页面的getUserMedia方法调用摄像头获取视频流。 通过canvas抓取一帧视频并转换为图片(base64),使用http或websocket发送到后台。 后台接受base64参数并将其转换为图像进行存储。 调用face_recognition.locations和face_recognition.face_encodings进行图像建模。 调用face_recognition.compare_faces将图像建模结果与基础库结果进行比较。 根据定义的比较阈值(称为容差,通常为0.6)返回比较结果。 如果阈值大于该值,则判断为该用户,允许登录人脸识别 html5,并返回系统界面。 否则会返回人脸识别失败的信息。流程图时序图参考案例前段代码

检测实时数据

年龄:
颜值:
性别:
人种:
是否戴眼镜:
表情:
//判断浏览器是否支持HTML5 Canvas window.onload = function () { try { //动态创建一个canvas元 ,并获取他2Dcontext。如果出现异常则表示不支持 document.createElement("canvas").getContext("2d"); document.getElementById("support").innerHTML = "浏览器支持HTML5 CANVAS"; } catch (e) { document.getElementByIdx("support").innerHTML = "浏览器不支持HTML5 CANVAS"; } }; var timer = null; //这段代 主要是获取摄像头的视频流并显示在Video 签中 window.addEventListener("DOMContentLoaded", function () { var canvas = document.getElementById("canvas"), context = canvas.getContext("2d"), video = document.getElementById("video"), // videoObj = { "video": true }, //调用用户媒体设备,访问摄像头 mediaConstraints = { audio: false, video: { width: { ideal: 1280 }, height: { ideal: 720 }, frameRate: { ideal: 10, max: 15 }, facingMode: "environment" } }; errBack = function (error) { console.log("Video capture error: ", error.code); }; //拍照按钮 // $("#snap").click(function () { // context.drawImage(video, 0, 0, 330, 250); // }) //拍照每秒一次 timer = setInterval(function () { context.drawImage(video, 0, 0, 330, 250) CatchCode(); }, 3000); //navigator.getUserMedia这个写法在Opera中好像是navigator.getUserMedianow //更新兼容火狐浏览器 if (navigator.mediaDevices.getUserMedia || navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia) { navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia; navigator.getUserMedia(mediaConstraints, function (stream) { video.srcObject = stream; video.play(); }, errBack); } }, false); /** * Base64 数据处理 */ function dataURItoBlob(base64Data) { var byteString; if (base64Data.split(',')[0].indexOf('base64') >= 0) byteString = atob(base64Data.split(',')[1]); else byteString = unescape(base64Data.split(',')[1]); var mimeString = base64Data.split(',')[0].split(':')[1].split(';')[0]; var ia = new Uint8Array(byteString.length); for (var i = 0; i < byteString.length; i++) { ia[i] = byteString.charCodeAt(i); } return new Blob([ia], { type: mimeString }); } /** * 上传服务器 */ function CatchCode() { var canvans = document.getElementById("canvas"); //获取浏览器页面的画布对象 //以下开始编 数据 var imageBase64 = canvans.toDataURL(); var blob = dataURItoBlob(imageBase64); var fd = new FormData(document.forms[0]); fd.append("the_file", blob, 'image.png'); //将图像转换为base64数据 $.ajax({ type: "POST", url: "{:url('/index/Index/faceVerifyVideo')}", processData: false, // 必须 contentType: false, // 必须 data: fd, datatype: "json", success: function (res) { console.log(res); if (res.code == 0) { // layer.msg(JSON.stringify(res.data.face_list)); var jsonObj = res.data.face_list[0]; var age = jsonObj.age; var beauty = jsonObj.beauty; var gender = jsonObj.gender; var race = jsonObj.race; var glasses = jsonObj.glasses; var expression = jsonObj.expression $("#age").html(age); $("#beauty").html(beauty); if (gender.type == 'male') { $("#gender").html("男"); } else { $("#gender").html("女"); } if (race.type == 'yellow') { $("#race").html("黄种人"); } else if (race.type == 'white') { $("#race").html("白种人"); } else if (race.type == 'black') { $("#race").html("黑种人 "); } else { $("#race").html("阿拉伯人"); } if (glasses.type == 'none') { $("#glasses").html("未戴眼镜"); } else if (glasses.type == 'common') { $("#glasses").html("戴了普通眼镜"); } else { $("#glasses").html("戴了墨镜"); } if (expression.type == 'none') { $("#expression").html("不笑"); } else if (expression.type == 'smile') { $("#expression").html("微笑"); } else { $("#expression").html("大笑"); } // layer.alert(res.msg, { icon: 6 }); clearInterval(timer); } else { layer.msg(res.msg, { icon: 5 }); } }, error: function () { layer.alert('接口异常', { icon: 5 }); } }); }

服务器代码

微信公众号轻松回复百度人脸识别码即可获取

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 html5 人脸识别 html5-工具系列| H5如何实现人脸识别 https://www.wkzy.net/game/199921.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务