欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

vue2+tracking實現(xiàn)PC端的人臉識別示例

 更新時間:2022年05月20日 10:13:16   作者:名字被你們想完了  
本文主要介紹了vue2+tracking實現(xiàn)PC端的人臉識別示例,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

總是會有一些奇奇怪怪的需求無法避免。記錄一下曾經(jīng)項目遇到的一個需求。

需求

上傳患者真實頭像,可以有兩種選擇,一種是通過常規(guī)的文件選擇方式上傳,第二種方式就是醫(yī)生可以調(diào)用電腦的攝像頭拍一張然后上傳。

分析

常規(guī)的就不用分析了,只分析第二種:

  • 調(diào)用本地攝像頭
  • 然后可以進行拍照
  • 因為是患者的真實頭像,方便辨認,要求要拍到患者臉部
  • 檢測到患者臉部,自動截圖,醫(yī)生只需要點擊上傳即可

實現(xiàn)思路

首先看有不有能識別到患者臉部的前端第三方庫,如果沒有,這個需求就相對來說就麻煩一點,就是在拍照的時候需要醫(yī)生辨別能否達到上傳的要求,然后再拍照上傳也行。

基于上面的思路,開始尋找,最后確定使用 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>檢測人臉結(jié)果</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 () {
      // 有可能觸發(fā)一些其他的按鈕會重新獲取
      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 調(diào)用 toDataURL
          }
        })
      })
    },

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

    // 成功顯示
    success (stream) {
      this.videoObj.srcObject = stream
      this.videoObj.play()
    },
    // 失敗拋出錯誤,可能用戶電腦沒有攝像頭,或者攝像頭權(quán)限沒有打開
    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)
}

最終的效果如下:

最后

首先確保有攝像頭

有時候本地調(diào)試無法打開攝像頭,可以在瀏覽器上輸入:chrome://flags/#unsafely-treat-insecure-origin-as-secure

然后會出現(xiàn)如下頁面,再操作即可:

到此這篇關(guān)于vue2+tracking實現(xiàn)PC端的人臉識別示例的文章就介紹到這了,更多相關(guān)vue2 tracking PC端的人臉識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解決element-ui?el-drawer抽屜el-dialog彈框關(guān)閉優(yōu)化demo

    解決element-ui?el-drawer抽屜el-dialog彈框關(guān)閉優(yōu)化demo

    這篇文章主要為大家介紹了解決element-ui?el-drawer抽屜el-dialog彈框關(guān)閉優(yōu)化demo,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2023-06-06
  • 解決基于 keep-alive 的后臺多級路由緩存問題

    解決基于 keep-alive 的后臺多級路由緩存問題

    這篇文章主要介紹了解決基于 keep-alive 的后臺多級路由緩存問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12
  • Vue3中的Fragment使用方法詳解

    Vue3中的Fragment使用方法詳解

    Fragment 是 Vue 3 中的新特性,允許一個組件模板返回多個根節(jié)點,與傳統(tǒng)方式不同,不再需要一個額外的 DOM 元素來包裹所有內(nèi)容,本文將詳細介紹 Fragment 的概念、使用場景、優(yōu)點以及可能遇到的問題,需要的朋友可以參考下
    2024-08-08
  • vue中v-for通過動態(tài)綁定class實現(xiàn)觸發(fā)效果

    vue中v-for通過動態(tài)綁定class實現(xiàn)觸發(fā)效果

    這篇文章主要介紹了vue中v-for通過動態(tài)綁定class實現(xiàn)觸發(fā)效果,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-12-12
  • vue和js中實現(xiàn)模糊查詢方式

    vue和js中實現(xiàn)模糊查詢方式

    這篇文章主要介紹了vue和js中實現(xiàn)模糊查詢方式,具有很好的參考價值,希望對大家有所幫助。也希望大家多多支持腳本之家
    2022-08-08
  • vue 使某個組件不被 keep-alive 緩存的方法

    vue 使某個組件不被 keep-alive 緩存的方法

    今天小編就為大家分享一篇vue 使某個組件不被 keep-alive 緩存的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue SPA 如何解決瀏覽器緩存問題

    Vue SPA 如何解決瀏覽器緩存問題

    這篇文章主要介紹了Vue SPA 如何解決瀏覽器緩存問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • vue中使用Tinymce的示例代碼

    vue中使用Tinymce的示例代碼

    這篇文章主要介紹了vue中使用Tinymce的示例,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Vue中的項目打包及部署全流程

    Vue中的項目打包及部署全流程

    這篇文章主要介紹了Vue中的項目打包及部署全流程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Vue2?模版指令元素綁定事件執(zhí)行順序解析

    Vue2?模版指令元素綁定事件執(zhí)行順序解析

    這篇文章主要為大家介紹了Vue2?模版指令元素綁定事件執(zhí)行順序解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08

最新評論