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

目录
  • 需求
  • 分析
  • 实现思路
  • 使用 tracking.js
  • 最后

总是会有一些奇奇怪怪的需求无法避免。记录一下曾经项目遇到的一个需求。

需求

上传患者真实头像,可以有两种选择,一种是通过常规的文件选择方式上传,第二种方式就是医生可以调用电脑的摄像头拍一张然后上传。

分析

常规的就不用分析了,只分析第二种:

  • 调用本地摄像头
  • 然后可以进行拍照
  • 因为是患者的真实头像,方便辨认,要求要拍到患者脸部
  • 检测到患者脸部,自动截图,医生只需要点击上传即可

实现思路

首先看有不有能识别到患者脸部的前端第三方库,如果没有,这个需求就相对来说就麻烦一点,就是在拍照的时候需要医生辨别能否达到上传的要求,然后再拍照上传也行。

基于上面的思路,开始寻找,最后确定使用 tracking.js 它的 github 地址

使用 tracking.js

  • 安装:yarn add tracking
  • 使用,用一个测试 demo 来展示:

src/components/TestFace.vue

<template>
  <div>
    <div>
      <p>请将摄像头对准患者脸部</p>
      <video id="video" style="transform:rotateY(180deg)" autoplay></video>
    </div>
    <div>
      <p>检测人脸结果</p>
      <canvas id="canvas" width="200" height="200" style="transform:rotateY(180deg)"></canvas>
    </div>
  </div>
</template>

<script>
import { userMedia } from '../utils/utils'
require('tracking/build/tracking-min.js')
require('tracking/build/data/face-min.js')

export default {
  data () {
    return {
      videoObj: null,
      trackerTask: null
    }
  },

  mounted () {
    this.openCamera()
  },

  methods: {
    openCamera () {
      // 有可能触发一些其他的按钮会重新获取
      this.$nextTick(() => {
        const canvas = document.getElementById('canvas')
        const context = canvas.getContext('2d')
        this.videoObj = document.getElementById('video')
        // eslint-disable-next-line no-undef
        const tracker = new tracking.ObjectTracker('face') // 检测人脸
        tracker.setInitialScale(4)
        tracker.setStepSize(2)
        tracker.setEdgesDensity(0.1)

        // eslint-disable-next-line no-undef
        this.trackerTask = tracking.track('#video', tracker, { camera: true })

        const constraints = {
          video: { width: 200, height: 200 },
          audio: false
        }

        userMedia(constraints, this.success, this.error)

        tracker.on('track', (event) => {
          event.data.forEach((rect) => {
            // 绘制到 canvas
            context.drawImage(this.videoObj, 0, 0, canvas.width, canvas.height)
            context.font = '16px Helvetica'
            context.strokeStyle = '#1890ff'
            context.strokeRect(rect.x, rect.y, rect.width, rect.height)
          })

          if (event.data.length !== 0) {
            // 说明检测到人脸了,此时就可以截取图片传递给后端
            // canvas 调用 toDataURL
          }
        })
      })
    },

    handleCancel () {
      this.videoObj.srcObject.getTracks()[0].stop()
      this.trackerTask.stop()
    },

    // 成功显示
    success (stream) {
      this.videoObj.srcObject = stream
      this.videoObj.play()
    },
    // 失败抛出错误,可能用户电脑没有摄像头,或者摄像头权限没有打开
    error (error) {
      // 可以在这里面提示用户
      console.log(`访问用户媒体设备失败${error.name}, ${error.message}`)
    }
  },
  beforeDestroy () {
    this.handleCancel()
  }
}
</script>

src/utils/utils.js

export let userMedia = function (constraints, success, error) {
  if (navigator.mediaDevices.getUserMedia) {
    userMedia = function (constraints, success, error) {
      navigator.mediaDevices.getUserMedia(constraints).then(success).catch(error)
    }
  } else if (navigator.webkitGetUserMedia) {
    userMedia = function (constraints, success, error) {
      navigator.webkitGetUserMedia(constraints, success, error)
    }
  } else if (navigator.mozGetUserMedia) {
    userMedia = function (constraints, success, error) {
      navigator.mozGetUserMedia(constraints, success, error)
    }
  } else if (navigator.getUserMedia) {
    userMedia = function (constraints, success, error) {
      navigator.getUserMedia(constraints, success, error)
    }
  }

  userMedia(constraints, success, error)
}

最终的效果如下:

最后

首先确保有摄像头

有时候本地调试无法打开摄像头,可以在浏览器上输入:chrome://flags/#unsafely-treat-insecure-origin-as-secure

然后会出现如下页面,再操作即可:

到此这篇关于vue2+tracking实现PC端的人脸识别示例的文章就介绍到这了,更多相关vue2 tracking PC端的人脸识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vue+axios实现图片上传识别人脸的示例代码

    目录 Axios请求 Qs处理数据分析 Vant上传文件格式 完整代码 本文主要介绍了vue+axios实现图片上传识别人脸的示例代码,分享给大家,具体如下: 先看最终效果: 这里采用的是vant的文件上传组件,通过上传图片后端识别图片里的人脸,返回到前端,获取该人脸匹配的工号或学号.以便后续其他系统使用,比如上传成功了一个人脸照片识别成功,可以通过人脸开启会议室的门禁.目前只是做了一个人脸上传的效果. Axios请求 使用axios请求数据,method:post时,data默认的传参数据类型

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

    目录 需求 分析 实现思路 使用 tracking.js 最后 总是会有一些奇奇怪怪的需求无法避免.记录一下曾经项目遇到的一个需求. 需求 上传患者真实头像,可以有两种选择,一种是通过常规的文件选择方式上传,第二种方式就是医生可以调用电脑的摄像头拍一张然后上传. 分析 常规的就不用分析了,只分析第二种: 调用本地摄像头 然后可以进行拍照 因为是患者的真实头像,方便辨认,要求要拍到患者脸部 检测到患者脸部,自动截图,医生只需要点击上传即可 实现思路 首先看有不有能识别到患者脸部的前端第三方库,如果

  • python+pywinauto+lackey实现PC端exe自动化的示例代码

    欢迎阅读 最近一年多一直在从事PC端exe的测试,也是趁着闲余时间,调研了下exe的自动化. 核心框架为python+pywinauto+lackey这样的一个组合方式 本文以大家熟知的Tim为例子,实现打开exe,输入账号密码并且登录,搜索具体聊天对象,发送消息,并退出账号的一系列简单操作. 依然是从环境搭建开始,我会尽我所能,详细的去介绍每一步,让各位能看懂我每一步操作的目的和理由.只对代码感兴趣的,跳到文章最后即可. 框架介绍 以python3为基础进行程序设计. pywinauto是基于

  • Vue实现PC端分辨率自适应的示例代码

    目录 方案 安装依赖 引入依赖 px转换成rem 修改flexible.js 参考博客 方案 lib-flexible+ px2remLoader lib-flexible:阿里可伸缩布局方案 px2rem-loader:px转rem 安装依赖 npm install px2rem-loader -D npm install lib-flexible -S 引入依赖 main.js引入lib-flexible import 'lib-flexible' px转换成rem vue-loader的o

  • 利用PHP判断是手机移动端还是PC端访问的函数示例

    前言 最近在开发项目的时候,分别开发了PC端和手机端,需要实现,用手机访问PC端WWW域名的时候,自动判断跳转到移动端,用电脑访问M域名手机网站的时候,自动跳转到PC端网站,于是有了下面这个判断函数: 示例代码: /** * 移动端判断 */ function isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } // 如果via信息含有

  • Android camera实时预览 实时处理,人脸识别示例

    Android camera实时预览 实时处理,面部认证. 预览操作是网友共享的代码,我在继承SurfaceView 的CameraSurfaceView 中加入了帧监听事件,每次预览监听前五个数据帧,在处理做一个面部识别. 先看目录关系 自定义控件CameraSurfaceView.java 自定义接口方法CameraInterface.java CameraActivity预览界面. CameraSurfaceView.Java package com.centaur.camera.prev

  • android实现人脸识别技术的示例代码

    1.前沿 人工智能时代快速来临,其中人脸识别是当前比较热门的技术,在国内也越来越多的运用,例如刷脸打卡,刷脸APP,身份识别,人脸门禁等.当前的人脸识别技术分为WEBAPI和SDK调用两种方式,WEBAPI需要实时联网,SDK调用可以离线使用. 本次使用的虹软提供的人脸识别的SDK,此SDK也可根据不同应用场景设计,针对性强.包括人脸检测.人脸跟踪.人脸识别,即使在离线环境下也可正常运行. 虹软公司是一家具有硅谷背景的图像处理公司,除了人脸技术以外,还有多项图像及视频处理技术.他们的双摄像头处理

  • Android人脸识别Demo竖屏YUV方向调整和图片保存(分享)

    本博客包含三个常用方法,用于盛开Android版人脸识别Demo中竖屏使用时送入yuv数据,但一直无法识别的情况. 1.首先可以尝试顺时针旋转90°或270°,然后送入识别SDK. 2.旋转方向后依然无法识别时,可以尝试saveImg( ),保存本地检查图片是否符合要求. /** * 视频顺时针旋转90 * 该方法仅仅在竖屏时候使用 * */ public static byte[] rotateYUV420Degree90(byte[] data, int imageWidth, int im

  • JS实现判断移动端PC端功能

    这篇文章主要介绍了JS实现判断移动端PC端功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 博客上的小精灵看起来很可耐,用了两年了现在才知道用移动端看的话会挡着屏幕,既然知道了就要改进咯. 判断是pc 还是移动端 function IsPC() { var userAgentInfo = navigator.userAgent; var Agents = ["Android", "iPhone","Sy

  • JavaScript人脸识别技术及脸部识别JavaScript类库Tracking.js

    我一直对人工智能识别技术非常感兴趣,因为我无法想象这究竟是一种什么样的算法,什么样的分析过程.无论是声音识别.人脸识别或其它种识别,人们的外貌.说话的方式都是如此不同,一种图片你可以用不同的方式.从不同的角度拍摄,我不能理解这些识别技术是如何做到的.有个叫做"面具"的游戏也使用了这种识别技术,我想对于脸部识别技术也应该研究一下.Facebook使用了这种技术,在手势控制中也能用到它,所以,你网站上也会有应用的地方. 我找到的一个可以用于人脸识别的JavaScript程序包是Face D

  • vue2之简易的pc端短信验证码的问题及处理方法

    <提示语部分不要在意(非重点部分)> 简单说下布局(采用的是 vue的element ui的ui框架 )进行布局操作的 子组件模板部分如下(code部分是很基础的) <template> <div class="forget"> <el-dialog title="修改新密码" :visible.sync="dialog.visible" :close-on-click-modal="false

随机推荐