• 前言:因为公司是做人工智能-AI的,所有一个web数据平台为了装X,需要做个人脸登陆。前台需要把人脸的base64发给后台去做人脸校验。
       功能很简单,需要注意的是web需要实现“调用摄像头”和“自动拍照”。于是开始找资料,在github上找到个8363星的trackingjs,不得
             不说js如此强大。可是当我在最后发现trackingjs没有关闭摄像头,于是在网上也找了一些例子都没有成功关闭。被迫不得不去看tracking
             的源码。最后把代码发出来,给后人参考。
  • 下载
    官网地址:https://trackingjs.com/。我的网盘下载,提取码:nuex。我这里直接下载压缩包到本地。解压后我们需要下面这两个文件
    tracking.js/build/tracking-min.js,
    tracking.js/build/data/face-min.js
  • 引入vue项目使用
    // 引入trackingjs所需文件
    import tracking from '@/assets/js/tracking-min.js'
    import '@/assets/js/face-min.js' export default {
    name: 'login',
    data() {
    return {
    trackerTask: null,
    trackering: null,
    mediaStreamTrack: null
    }
    },
    mounted() {
    this.getCompetence()
    },
    methods: {
    getCompetence() {
    let flag = true;
    const _this = this;
    const video = this.mediaStreamTrack = document.getElementById('videoCamera-face');
    const canvas = document.getElementById('canvas-face');
    const context = canvas.getContext('2d'); const tracker = new window.tracking.ObjectTracker('face');
    tracker.setInitialScale(4);
    tracker.setStepSize(2);
    tracker.setEdgesDensity(0.1);
    // 启动摄像头初始化
    this.trackerTask = window.tracking.track('#videoCamera-face', tracker, {
    camera: true
    });
    tracker.on('track', function(event) {
    context.clearRect(0, 0, canvas.width, canvas.height);
    event.data.forEach(function(rect) {
    context.strokeStyle = '#ff0000';
    context.strokeRect(rect.x, rect.y, rect.width, rect.height);
    });
    if (event.data.length) {
    // 会不停的去检测人脸,所以这里需要做个锁
    if (flag) {
    // 裁剪出人脸并绘制下来
    const canvasUpload = document.getElementById('canvas-face-upload')
    const contextUpload = canvasUpload.getContext('2d')
    contextUpload.drawImage(video, 0, 0, 105, 105)
    flag = false
    // 人脸的basa64
    const dataURL = canvasUpload.toDataURL('image/jpeg');
    // ajax请求
    _this.$store.dispatch('LoginByFaceID', {
    face_img: dataURL.slice(23) // 我们后台需要的basa64不要前缀
    }).then(res => {
    let type = 'success'
    // 登录成功跳转到首页
    if (res.data.code === 200) {
    _this.$router.push({
    path: '/'
    });
    }
    // 登录失败重新进行人脸检测
    else {
    type = 'error'
    setTimeout(() => {
    flag = true
    }, 1500)
    }
    _this.$message({
    message: res.data.message,
    type,
    center: true
    });
    }).catch(error => {
    console.log(error)
    })
    }
    }
    });
    }
    },
    destroyed() {
    if(!this.mediaStreamTrack){
    return
    }
    // 关闭摄像头和侦测
    this.mediaStreamTrack.srcObject.getTracks()[0].stop();
    this.trackerTask.stop()
    }
    }

vue使用trackingjs的更多相关文章

  1. Vue.js 和 MVVM 小细节

    MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自 ...

  2. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  3. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  4. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  5. Vue + Webpack + Vue-loader 系列教程(2)相关配置篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ 使用预处理器 在 Webpack 中,所有的预处理器需要和一个相应的加载器一同使用.vue- ...

  6. Vue + Webpack + Vue-loader 系列教程(1)功能介绍篇

    原文地址:https://lvyongbo.gitbooks.io/vue-loader/content/ Vue-loader 是什么? vue-loader 是一个加载器,能把如下格式的 Vue ...

  7. 关于Vue.js 2.0 的 Vuex 2.0,你需要更新的知识库

    应用结构 实际上,Vuex 在怎么组织你的代码结构上面没有任何限制,相反,它强制规定了一系列高级的原则: 应用级的状态集中放在 store 中. 改变状态的唯一方式是提交mutations,这是个同步 ...

  8. Vue.js 2.0 和 React、Augular等其他框架的全方位对比

    引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...

  9. 窥探Vue.js 2.0 - Virtual DOM到底是个什么鬼?

    引言 你可能听说在Vue.js 2.0已经发布,并且在其中新添加如了一些新功能.其中一个功能就是"Virtual DOM". Virtual DOM是什么 在之前,React和Em ...

随机推荐

  1. PAT-B 1005. 继续(3n+1)猜想 (25) c++

    1005. 继续(3n+1)猜想 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 卡拉兹(Callatz ...

  2. tensorflow 控制流操作,条件判断和循环操作

    Control flow operations: conditionals and loops When building complex models such as recurrent neura ...

  3. RabbitMQ 交换机类型

    1,扇形交换机 fanout 2, 直连交换机 direct 3, 通配符交换机 topic

  4. Ubuntu系统安装wxPython问题

    wxPython介绍 wxPython是Python语言的GUI工具包,作为Python的扩展模块实现,包装了wxWidgets.wxPython是跨平台的,开源的.详情 wxPython安装 (1) ...

  5. 学习 MyBatis 的一点小总结 —— 底层源码初步分析

    目录 MyBatis 如何获取数据库源? MyBatis 如何获取 sql 语句? MyBatis 如何执行 sql 语句? MyBatis 如何实现不同类型数据之间的转换? 在过去程序员使用 JDB ...

  6. [bzoj1191]超级英雄hero<二分图匹配*匈牙利算法>

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1191 今天随便在bzoj找了一题做,题一读完就发现是个匈牙利算法的裸题,原本以为可以一次过 ...

  7. c++ 常量/有符号数和无符号数

    一.宏定义 #define 和常量 const 1. const关键字 const是constant的简写,只要一个变量前面用const来修饰,就意味着该变量里的数据可以被访问,不能被修改.也就是说c ...

  8. vue组件中的style scoped中遇到的问题

    在uve组件中我们我们经常需要给style添加scoped来使得当前样式只作用于当前组件的节点.添加scoped之后,实际上vue在背后做的工作是将当前组件的节点添加一个像data-v-1233这样唯 ...

  9. 【杂谈】SpringBoot为啥不用配置启动类

    前言 在学习SparkJava.Vert.x等轻量级Web框架的时候,都遇到过打包问题,这两个框架打包的时候都需要添加额外的Maven配置,并指定启动类才能得到可执行的JAR包: 而springboo ...

  10. 【cs224w】Lecture 3 - Motif, Graphlet 及 结构性角色

    目录 Network Motifs Configuration Model Graphlets How to Find Motifs and Graphlets Structural Roles 转自 ...