溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

vue2+tracking怎么實(shí)現(xiàn)PC端的人臉識(shí)別

發(fā)布時(shí)間:2022-05-20 11:30:20 來源:億速云 閱讀:261 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容介紹了“vue2+tracking怎么實(shí)現(xiàn)PC端的人臉識(shí)別”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

需求

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

分析

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

  • 調(diào)用本地?cái)z像頭

  • 然后可以進(jìn)行拍照

  • 因?yàn)槭腔颊叩恼鎸?shí)頭像,方便辨認(rèn),要求要拍到患者臉部

  • 檢測(cè)到患者臉部,自動(dòng)截圖,醫(yī)生只需要點(diǎn)擊上傳即可

實(shí)現(xiàn)思路

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

基于上面的思路,開始尋找,最后確定使用 tracking.js 它的 github 地址

使用 tracking.js

  • 安裝:yarn add tracking

  • 使用,用一個(gè)測(cè)試 demo 來展示:

src/components/TestFace.vue

<template>
  <div>
    <div>
      <p>請(qǐng)將攝像頭對(duì)準(zhǔn)患者臉部</p>
      <video id="video"  autoplay></video>
    </div>
    <div>
      <p>檢測(cè)人臉結(jié)果</p>
      <canvas id="canvas" width="200" height="200" ></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ā)一些其他的按鈕會(huì)重新獲取
      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') // 檢測(cè)人臉
        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) {
            // 說明檢測(cè)到人臉了,此時(shí)就可以截取圖片傳遞給后端
            // canvas 調(diào)用 toDataURL
          }
        })
      })
    },

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

    // 成功顯示
    success (stream) {
      this.videoObj.srcObject = stream
      this.videoObj.play()
    },
    // 失敗拋出錯(cuò)誤,可能用戶電腦沒有攝像頭,或者攝像頭權(quán)限沒有打開
    error (error) {
      // 可以在這里面提示用戶
      console.log(`訪問用戶媒體設(shè)備失敗${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)
}

最終的效果如下:

vue2+tracking怎么實(shí)現(xiàn)PC端的人臉識(shí)別

最后

首先確保有攝像頭

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

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

vue2+tracking怎么實(shí)現(xiàn)PC端的人臉識(shí)別

“vue2+tracking怎么實(shí)現(xiàn)PC端的人臉識(shí)別”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI