• 前言:因为公司是做人工智能-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. effective-java学习笔记---使用实例属性替代序数35

    永远不要从枚举的序号中得出与它相关的值; 请将其保存在实例属性中: public enum Ensemble { SOLO(1), DUET(2), TRIO(3), QUARTET(4), QUIN ...

  2. 基于Doc2vec训练句子向量

    目录 一.Doc2vec原理 二.代码实现 三.总结   一.Doc2vec原理 前文总结了Word2vec训练词向量的细节,讲解了一个词是如何通过word2vec模型训练出唯一的向量来表示的.那接着 ...

  3. arcgis server建完站点之后修改默认6080端口号

    1.首先找到arcgis server的安装路径,找到server.xml文件,修改其中一处的6080端口为你想更改的端口号,例如8888.具体操作如下图所示: 默认的安装路径为:D:\Program ...

  4. JAVA研发面试题

    转自:http://www.jianshu.com/p/1f1d3193d9e3 Java基础的知识点推荐<Java编程思想>,JVM的推荐<深入理解Java虚拟机>,Spri ...

  5. python 基本知识

    1.windows下Spyder中快捷键 块注释/块反注释 Ctrl + 4/5 断点设置 F12 关闭所有 Ctrl + Shift + W 代码完成 Ctrl +空格键 条件断点 SHIFT + ...

  6. 4.Metasploit框架更新

    Metasploit 进阶第二讲  框架更新   EDB平台-互联网安全漏洞库   Exploit_DB是一个面向全世界安全工作人员的漏洞提交平台,是一份公开已知漏洞的存档,便于企业改善公司的安全情况 ...

  7. Luogu1039 侦探推理

    题目描述 明明同学最近迷上了侦探漫画<柯南>并沉醉于推理游戏之中,于是他召集了一群同学玩推理游戏.游戏的内容是这样的,明明的同学们先商量好由其中的一个人充当罪犯(在明明不知情的情况下),明 ...

  8. P - Sudoku Killer HDU - 1426(dfs + map统计数据)

    P - Sudoku Killer HDU - 1426 自从2006年3月10日至11日的首届数独世界锦标赛以后,数独这项游戏越来越受到人们的喜爱和重视. 据说,在2008北京奥运会上,会将数独列为 ...

  9. Lisp-02: 函数

    函数(functions) 在 Lisp 中,函数分两种:有名函数和匿名函数(lambda函数). 有名函数 defun 有名函数的标准定义格式为: (defun <name> (list ...

  10. Vertica的这些事(六)——-vertica中group-by-和join-语句的优化

    vertica group by优化语句,先对语句进行explain 操作查看预执行计划,其中group by 分为 GROUPBY PIPELINED 和 GROUPBY HASH,通过执行计划可以 ...