(chrome)vue+tracking实现人脸识别登录

vue基于face-api.js实现人脸识别 一、face-api.js Face-api.js 是一个 JavaScript API,是基于 tensorflow.js 核心 API 的人脸检测和人脸识别的浏览器实现。它实现了一系列的卷积神经网络(CNN),它实现了三种卷积神经网络(CNN)架构,用于完成人脸检测、识别和特征点检测任务。 二、引入 npm i face-api.js 三、加载模型数据 import { detectSingleFace, nets, matchDimensions, resize... 阅读详情

vue+tracking实现人脸识别登录

 

完整项目地址:https://github.com/nhclike/vue-work-demo

<template>
  <div>
      <el-button type="primary" @click="initFaceCamera">开始人脸识别</el-button>
      <div class="faceCamera">
            <video
                ref="video"
                id="video"
                width="320"
                height="240"
                preload
                autoplay
                loop
                muted
            ></video>
            <canvas ref="canvas" id="canvas" width="320" height="240"></canvas>

        </div>
        <span>{{isdetected}}</span>
  </div>
</template>

<script>
import { mapState, mapActions, mapMutations, mapGetters } from 'vuex';
 //import dat from 'dat.gui';
 //import '../../../public/adapter.screenshare.js';兼容ie
//  import tracking from 'tracking/build/tracking-min.js';
require('tracking/build/tracking-min.js');
require('tracking/build/data/face-min.js');
// require('tracking/examples/assets/stats.min.js');
export default {
    data(){
        return {
            isdetected: '请您保持脸部在画面中央!',
            // videos
            myVideo: {},
            constraints: {
                audio: {
                    noiseSuppression: true,
                    echoCancellation: true
                },
                video: {
                    width: 400,
                    height: 300,
                    frameRate: 30,
                    // transform: 'scaleX(-1)',
                    facingMode: 'environment'
                }
            },
        }
    },
    mounted(){
                this.myVideo = document.getElementById('video');

    },
    methods:{
         /* --------------------人脸识别-开始-------------------- */
        async initFaceCamera() {
            this.canvas = this.$refs.canvas;
            // 获取媒体属性,旧版本浏览器可能不支持mediaDevices,我们首先设置一个空对象
            if (!navigator.mediaDevices) {
                navigator.mediaDevices = {};
                console.log('设置mediaDevices空对象');
            }
            // 一些浏览器实现了部分mediaDevices,我们不能只分配一个对象
            // 使用getUserMedia,因为它会覆盖现有的属性。
            // 这里,如果缺少getUserMedia属性,就添加它。
            if (!navigator.mediaDevices.getUserMedia) {
                navigator.getUserMedia =
                    navigator.getUserMedia ||
                    navigator.webkitGetUserMedia ||
                    navigator.mozGetUserMedia; // 有些浏览器不支持,会返回错误信息
                console.log('重新定义getUserMedia');
                if (!navigator.getUserMedia) {
                    // 不存在则报错
                    console.log('此浏览器中不包含getUserMedia方法');
                    return false;
                }
            }

            // await navigator.mediaDevices
            //     .getUserMedia(this.constraints)
            //     .then(this.getMediaStreamSuccess)
            //     .catch(this.getMediaStreamError);
            await this.getUserMedia();

            
        },
        // 拿到媒体流
        async getUserMedia() {
            console.log(`Requesting  video stream`);

            if ('mediaDevices' in navigator) {
                try {
                    const stream = await navigator.mediaDevices.getUserMedia(
                        this.constraints
                    );
                    this.getMediaStreamSuccess(stream);
                    console.log('Received local video stream');
                } catch (error) {
                    this.getMediaStreamError();
                    console.log(`getUserMedia error: ${error}`);
                }
            }
        },
        // 视频媒体流成功
        getMediaStreamSuccess(stream) {
            window.stream = stream; // make stream available to browser console
            //window.attachMediaStream(this.myVideo, stream);---ie兼容使用
            this.myVideo.srcObject = stream;
            console.log('getMediaStreamSuccess', stream);

            this.startPlay();
        },

        // 视频媒体流失败
        getMediaStreamError(error) {
            this.$message.error('视频媒体流获取错误' + error);
        },

        // 截图
        snapshot() {
            let canvas = this.$refs.picture;
            canvas.width = 400;
            canvas.height = 300;
            canvas.getContext('2d').drawImage(this.myVideo, 0, 0, canvas.width, canvas.height);
        },

        // 开始识别
        startPlay() {
            console.log('startPlay');
            this.onTrackTracking();
        },

        // 人脸侦测中
        onTrackTracking() {
            const _this = this;
            const video = this.myVideo;
            const canvas = this.canvas;
            const canvasContext = canvas.getContext('2d');
            // eslint-disable-next-line no-undef
            let tracker = new tracking.ObjectTracker('face');
            video.pause();
            video.src = '';
            tracker.setInitialScale(4);
            tracker.setStepSize(2);
            tracker.setEdgesDensity(0.1);
            // eslint-disable-next-line no-undef
            console.log('tracker setEdgesDensity');
            _this.trackerTask = tracking.track('#video', tracker, {camera: true});
            /* let element = tracking.one(this.myVideo);
            console.log('element', element);
 */
            console.log('tracker trackerTask');
            let yRect;
            tracker.on('track', function(event) {
                console.log('track event');
                if (event.data && event.data.length === 0) {
                    if (_this.isGetFace) {
                        _this.isdetected = '正在登录...';
                    } else {
                        _this.isdetected = '请您保持脸部在画面中央!';
                        canvasContext.clearRect(
                            0,
                            0,
                            canvas.width,
                            canvas.height
                        );
                    }
                } else {
                    for (let rect of event.data.values()) {
                        console.log('已检测到人脸');
                        // _this.isdetected = '已检测到人脸,正在登录...';
                        canvasContext.strokeStyle = '#ff0000';
                        canvasContext.strokeRect(
                            rect.x,
                            rect.y,
                            rect.width,
                            rect.height
                        );
                        canvasContext.font = '11px Helvetica';
                        canvasContext.fillStyle = '#fff';
                        canvasContext.fillText(
                            'x: ' + rect.x + 'px',
                            rect.x + rect.width + 5,
                            rect.y + 11
                        );
                        canvasContext.fillText(
                            'y: ' + rect.y + 'px',
                            rect.x + rect.width + 5,
                            rect.y + 22
                        );
                        // _this.isGetFace = true;
                        // _this.shoot(
                        //     rect,
                        //     video,
                        //     canvas,
                        //     canvasContext,
                        //     tracker
                        // );
                        // window.stream.getTracks().forEach((track) => track.stop()); // 停止侦测
                        // _this.sleep(1000 * 60 * 1);

                        yRect = rect;
                        break;
                    }
                    /* event.data.forEach(function(rect) {

                    }); */
                    if (event.data && _this.count <= 10) {
                        console.log(_this.count);
                        if (_this.count < 0) {
                            _this.count = 0;
                            _this.isdetected = '请您保持脸部在画面中央!';
                        }
                        _this.count += 1;
                        if (_this.count > 10) {
                            _this.isdetected = '已检测到人脸,正在登录';
                            _this.isGetFace = true;
                            _this.shoot(
                                yRect,
                                video,
                                canvas,
                                canvasContext,
                                tracker
                            );
                            window.stream
                                .getTracks()
                                .forEach((track) => track.stop());
                            _this.count = 0;
                        }
                    } else {
                        _this.count -= 1;
                        if (_this.count < 0) {
                            _this.isdetected = '请您保持脸部在画面中央!';
                        }
                    }
                }

                /* let gui = new dat.GUI();
                gui.add(tracker, 'edgesDensity', 0.1, 0.5).step(0.01);
                gui.add(tracker, 'initialScale', 1.0, 10.0).step(0.1);
                gui.add(tracker, 'stepSize', 1, 5).step(0.1); */
            });
        },

        shoot(rect, video, canvas, canvasContext, tracker) {
            // 把当前视频帧内容渲染到画布上
            // canvasContext.drawImage(video,x,y,width+20,height+20);
            canvasContext.clearRect(0, 0, canvas.width, canvas.height);
            canvasContext.drawImage(
                video,
                rect.x - 50,
                rect.y - 50,
                rect.width + 50,
                rect.height + 100,
                0,
                0,
                rect.width + 50,
                rect.height + 100
            );
            let imgSrc = this.canvas.toDataURL('image/png');
            // console.log(imgSrc);
            // 删除字符串前的提示信息 "data:image/png;base64,"
            let b64 = imgSrc.substring(22);
            
            let params = {
                facePic: b64, // 脸图片base64编码
                identityPic: "",
                name: 'test' // 当事人姓名
                // name: this.idCardInfo.name// 当事人姓名
            };
            console.log(params);
            //提交后台登录
        },

        // 休眠方法--测试
        sleep(numberMillis) {
            let now = new Date();
            let exitTime = now.getTime() + numberMillis;
            while (true) {
                now = new Date();
                if (now.getTime() > exitTime) {
                    return;
                }
            }
        },

        // base64转文件
        dataURLtoFile(dataurl, filename) {
            let arr = dataurl.split(',');
            let mime = arr[0].match(/:(.*?);/)[1];
            let bstr = atob(arr[1]);
            let n = bstr.length;
            let u8arr = new Uint8Array(n);
            while (n--) {
                u8arr[n] = bstr.charCodeAt(n);
            }
            return new File([u8arr], filename, { type: mime });
        },

        // 结束媒体流
        stopMediaStreamTrack() {
            // this.trackerTask.stop();// 停止侦测
            // this.trackerTask.closeCamera();// 关闭摄像头
            if (typeof window.stream === 'object') {
                if (this.myVideo.srcObject) {
                    this.myVideo.srcObject = null;
                }
                // this.$store.commit('setVideoCanvasObject', '')
                window.stream.getTracks().forEach((track) => track.stop()); // 停止侦测
            }
        }
        /* --------------------人脸识别-结束-------------------- */
    }
}
</script>

<style scoped lang='less'>
.faceCamera {
    position: relative;
    width: 500px;
    height: 400px;
    border: 1px solid #ddd;
    video,
    canvas {
        z-index: 999;
        position: absolute;
        top: 0;
        left: 0;
        // transform: translate(-50%, -50%);
    }
}
</style>

 

前端人脸识别,简单的活体检测(张张嘴...),vue3使用tracking.js,face.js,face-api.js实现 本人是在工作中的项目需要考勤,前端需要活体检测。想到了这个简单的方法,在纯前端实现这些逻辑,当然精度不高,想要更好的实现,还得靠后端使用好的检测模型。更好的获取摄像头方法,在tracking.js中做修改tracking.initUserMedia_方法,使用window.stream = MediaStream;首先下载好相关的tracking.js,face.js,face-api.js(这个可以直接npm install face-api.js),以及一些静态的资源放public/models下。 阅读详情

相关推荐

基于tracking.js实现Web眼动追踪技术:tg-tracker项目

眼动追踪技术是一种使用特定设备来测量眼睛的运动,包括注视点、眼动速度和方向等,以此来解读用户对图像或场景的关注点以及视觉扫描的模式。这项技术在研究消费者行为、心理分析、人机交互设计和辅助技术等领域具有重要价值。

weixin_42601608的博客 843

一个试验 tracking.js进行人脸拍照

小G的tracking.js学习摘要 主要学习人脸识别

ichigshinyaa的博客 866

LLM and Embedding区别

LLM(大语言模型)和 Embedding(嵌入)是自然语言处理(NLP)中的两个核心概念,它们的核心区别在于。Embedding 计算向量。

u010674101的专栏 1873

web移动端h5使用tracking.js实现人脸识别

产品经理想要在H5项目上实现人脸识别功能,一开始用的是navigator.mediaDevices.getUserMedia方法,但效果实在一般,最终我找到了第三方库tracking.js。大致的流程为:获取摄像头权限->识别到人脸->截取图片并转码->调用接口发送后端。

m0_50696549的博客 2983

XVF3800麦克风阵列实战:从选型到快速原型搭建

本文详细介绍了XVF3800麦克风阵列的选型与快速原型搭建实战经验。从开箱即用的特性到波束成形、回声消除等核心功能拆解,再到硬件设计避坑指南和固件开发技巧,帮助开发者高效实现智能语音设备的开发。特别适合智能音箱、会议终端等需要远场拾音和声源定位的应用场景。

weixin_29161719的博客 273

CentOS 7下glibc升级到2.28的保姆级避坑指南(含GCC 7.3.1编译配置)

本文详细介绍了在CentOS 7系统中将glibc升级到2.28版本的完整流程,包括GCC 7.3.1的编译配置、环境变量设置、glibc编译的细节处理以及生产环境验证。文章特别强调了风险控制和避坑技巧,适用于需要提升系统兼容性的企业级用户。

weixin_29611239的博客 408

html5录音功能实战

缘起 由于项目需要,我们要在web端实现录音功能。一开始,找到的方案有两个,一个是通过iframe,一个是html5的getUserMedia api。由于我们的录音功能不需要兼容IE浏览器,所以毫不犹豫的选择了html5提供的getUserMedia去实现。基本思路是参考了官方的api文档以及网上查找的一些方案做结合做出了适合项目需要的方案。但由于我们必须保证这个录音功能能够同时在pad端、pc端都可以打开,所以其中也踩了一些坑。以下为过程还原。 步骤1 由于新的api是通过navigator.me

Within的博客 2368

高德地图轨迹回放,消息框内展示车辆速度且随车辆移动-升级支持调整速度、回放进度

使用高德地图回放车辆GPS轨迹,并添加速度和回放进度条,并支持调整,效果如下: 新增的功能: 在基础版本,有如下升级 速度条:可以拖动以调整车辆回放速度,且从当前位置继续回放 进度条:进度条表示车辆已回放的百分比,且拖动进度条车辆定位到相应的位置并继续回放 ###思路分析 高德和marker回放相关的API //主要靠他回放 moveAlong(path:Array,speed:Number,f:Function,circlable:Boolean) //点移动到另一个位置,移动进度条车辆跟随移动

博客 1万+

人脸识别H5页面(打开指定摄像头navigator,绘制人脸框tracking.js)

【代码】人脸识别H5页面(打开指定摄像头navigator,绘制人脸框tracking.js)

m0_56930676的博客 4755

OpenResty无损升级内嵌nginx版本0DAY漏洞

OpenResty无损升级内嵌nginx版本,nginx

qq1071643762的博客 6903

如何在 SAP BTP 上使用 Integration Suite 消费 S/4HANA Cloud API

SAP Integration Suite是一个集成平台即服务(iPaaS),允许开发人员顺利地将内部部署和基于云的应用程序和流程与SAP管理的工具和预构建内容进行集成。登录 SAP Business Technology Platform Cockpit,进入 integration suite:再点击 API management 进入 API Portal:或者直接从收藏夹里打开链接:https://304a49cetrial.integrationsuitetrial-apiportal.cfapp

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1697

(课程设计)基于SpingBoot+Vue的职工管理系统-计算机毕设 附源码 04391

员工用户功能: (1)注册登陆:用户可以通过注册功能创建一个新账户,输入必要的信息如用户名、密码、邮箱等。登录功能允许用户输入已注册的凭证来访问他们的个人账户。系统会提供忘记密码和密码重置的选项,以帮助用户恢复账户访问权限。 (2)首页:员工登录后,会进入后台首页。首页展示与员工个人相关的核心信息,诸如个人基本资料、考勤记录、奖励与惩罚信息等,帮助员工清楚了解自己的工作情况。 (3)员工信息管理:员工可以查看个人的详细信息,包括姓名、职位、联系方式等。这一功能确保员工能够随时了解自己的基本信息和工作状态。

ID3461074420的博客 773

CP AUTOSAR标准之AUTOSAR OS(AUTOSAR_SWS_OS)(二)

AUTOSAR OS是一个Operating System,即操作系统。它最核心的功能是管理任务和事件的调度,不同任务间的同步流,并且提供监控和错误处理功能。或者用最简化理解就是一个函数调度器。

CoolBreeze的博客 653

vue前端处理人脸识别

前端处理人脸识别功能

m0_60318230的博客 1712

GB28181 —— 3、C++编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

GB28181 —— Win10下编写GB28181设备端,完成注册、注销、保活心跳、响应查询目录等功能(附源码)

1308

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

tracking.js示例 - 浏览器中检测摄像头中的人脸

<!doctype html> <html> <head> <meta charset="utf-8"> <title>demo</title> <script src="./build/tracking-min.js"></script> <script src="./build/data/face-min.js"></script> <style>.

allway2的博客 887

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

tracker.js进行人脸登录

tracker.js进行人脸登录

小白的成长历程 341

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

tracking.js人脸识别Demo

将此代码复制到一个HTML文件中,并在支持摄像头访问的浏览器中打开它,您就可以看到人脸识别的效果了。请确保您的网站在HTTPS环境中运行,因为现代浏览器通常要求摄像头访问只能在安全的环境下进行。请注意,由于涉及摄像头访问,浏览器可能会要求用户授权允许访问摄像头。如果用户拒绝了访问权限,代码将无法运行。注意,这段代码会在页面上显示一个视频元素和一个画布元素,然后通过。库实时检测摄像头中的人脸,并在画布上用矩形标记出检测到的人脸。

qq_33644799的博客 428

tracking.js 下的人脸检测与截取图像

tracking.js是页面识别人脸的一个插件,首先是tracking.js的git地址:https://github.com/eduardolundgren/tracking.js。     在下载完tracking.js后,我们需要一个能测试的页面,这个页面需要在服务器上,比如本地的localHost:8080。然后需要引入两个检查人脸必须的文件tracking-min.js和face-mi

切图工的博客 2万+

vue2 + tracking 实现 PC 端的人脸识别

首先确保有摄像头有时候本地调试无法打开摄像头,可以在浏览器上输入chrome然后会出现如下页面,再操作即可。

掘金博客名称相同 1485

vue项目中使用trackingjs人脸识别

新需求要做一个前端人脸登录,最终选用了trackingjs库实现识别的前端部分,在前端进行识数据采集,并把信息保存后发送给后端进行处理。就差个和后端传数据的接口,图片信息打印在日志中。

CH_Y的博客 7762

VUE项目-H5端人脸识别功能实现

1.人脸捕捉技术使用的tracking.js,关键是要理解它的运作原理和一下参数配置。2.因为要调用手机媒体设备,兼容性问题是大问题,特别是苹果手机的问题,往往不知道如何下手,需要有丰富的开发经验和各种曲线救国的开发思想。

Jack, what else can you do besides holding your little darling? 9839

关于人脸识别最近浏览器打不开摄像头的解决方案

好久没有发公众号啦,因为最近没有在技术方面有更高的提升,关于人脸识别浏览器兼容问题一直很头疼,时至今日,随着浏览器的更新,代码也不得不更新一下了,今天主要是给大家解决一个谷歌浏览器里面的...

穆雄雄的博客 7812

vue使用tracking-min.js和face-min.js进行人脸识别

在你的Vue项目中引入tracking-min.js和face-min.js。你可以将这两个文件下载到你的项目文件夹中,然后使用。请注意,上述代码仅仅是一个示例,具体的实现可能因你的项目和需求而有所不同。你可能还需要处理视频流的获取、停止人脸识别等其他操作。来确保DOM元素已经加载完毕,然后初始化人脸识别。标签将它们引入到你的页面中,或者使用npm安装它们。生命周期中初始化人脸识别。希望这可以帮助到你!

m0_74265396的博客 1551

uni-app项目中使用tracking.js人脸识别

针对uni-app项目中倒计时拍照、对齐人脸按钮拍照等拍照方式,导致的识别效率下降,人脸信息捕捉不完全,进而浪费计算资源等问题。本文将tracking.js应用到uni-app项目中,可以在识别出人脸的前提下,将图像信息传输到后端进行比对。

CH_Y的博客 6571

java人脸识别登陆教程_Java教程:PC人脸识别登录,竟然出乎意料的简单

原标题:Java教程:PC人脸识别登录,竟然出乎意料的简单最近对写文章稍稍的有点小抵触,写的东西没人看,有点小失落,还好在粉丝朋友的开导下,调整了下自己的心态,只要我分享的东西对大家有帮助就好,至于多少人看那就随缘吧!有时候真不能把事儿自己钻里面想,越想越出不来!你们也要开开心心的哈!话不多说先看人脸识别效果动态,马赛克有点重哈,没办法长相实在是拿不出手。 实现原理我们看一下实现人脸识别登录的大致...

weixin_29469949的博客 751
上一篇: vue+node(socket.io)+webRTC实现一对一通话测试
下一篇: 动态生成圆桌座椅兼容ie/chrome
github_39274378
博客等级 码龄9年 13粉丝 47原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值