日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Vue+tracking.js 實現前端人臉檢測功能

瀏覽:21日期:2023-01-26 14:07:07

項目中需要實現人臉登陸功能,實現思路為在前端檢測人臉,把人臉照片發送到后端識別,返回用戶token登陸成功

前端調用攝像頭使用tracking.js檢測視頻流中的人臉,檢測到人臉后拍照上傳后端。

后端使用face_recognition人臉識別庫,使用Flask提供restfulAP供前端調用

實現效果如下圖:

登陸界面:

Vue+tracking.js 實現前端人臉檢測功能

攝像頭檢測人臉界面:

Vue+tracking.js 實現前端人臉檢測功能

前端代碼如下:

<template> <div id='facelogin'> <h1 class='title is-1'>{{FaceisDetected}}</h1> <!-- <p>{{FaceisDetected}}</p> --> <div class='content-cam'> <div class='camera-wrp sec'> <video ref='videoDom' preload autoplay loop muted></video> <canvas ref='canvasDOM' id='face_detect'></canvas> <div class='control-btn'></div> </div> <div class='images-wrp sec'> <!-- <p class='title is-5'>Image taken</p> --> <div : v-for='(image, index) in images' :key='`img-wrp-${index}`' : ></div> </div> </div> </div></template>export default {name: ’facelogin’,data() {return {count: 0,isdetected: ’請您保持臉部在畫面中央’,videoEl: {},canvasEL: {},images: [],trackCcv: false,trackTracking: false,autoCaptureTrackTraking: false,userMediaConstraints: {audio: false,video: {// ideal(應用最理想的)width: {min: 320,ideal: 1280,max: 1920},height: {min: 240,ideal: 720,max: 1080},// frameRate受限帶寬傳輸時,低幀率可能更適宜frameRate: {min: 15,ideal: 30,max: 60},// 攝像頭翻轉facingMode: ’user’}}}},computed: {FaceisDetected() {return this.isdetected}},created() {this.changeView()}, mounted() { // The getUserMedia interface is used for handling camera input. // Some browsers need a prefix so here we’re covering all the options navigator.getMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia this.init() }, methods: { async init() { this.videoEl = this.$refs.videoDom this.canvasEL = this.$refs.canvasDOM await navigator.mediaDevices .getUserMedia(this.userMediaConstraints) .then(this.getMediaStreamSuccess) .catch(this.getMediaStreamError) await this.onPlay() }, async onPlay() { debugHelper.log(’onPlay’) this.onTrackTracking() }, changeView() { this.setTitle(’刷臉登陸’) this.setBackDisabled(false) this.setBackIcon(’arrow_back’) msgbus.vm.setBottomNavVisible(false) msgbus.vm.setBottomBtnVisible(false) msgbus.vm.setMsgInputVisible({ value: false }) }, onTrackTracking() { const context = this const video = this.videoEl const canvas = this.canvasEL const canvasContext = canvas.getContext(’2d’) let tracker = new tracking.ObjectTracker(’face’) video.pause() video.src = ’’ tracker.setInitialScale(4) tracker.setStepSize(2) tracker.setEdgesDensity(0.1) tracking.track(’#video_cam’, tracker, { camera: true }) tracker.on(’track’, function(event) { const { autoCaptureTrackTraking } = context canvasContext.clearRect(0, 0, canvas.width, canvas.height) event.data.forEach(function({ x, y, width, height }) { canvasContext.strokeStyle = ’#a64ceb’ canvasContext.strokeRect(x, y, width, height) canvasContext.font = ’11px Helvetica’ canvasContext.fillStyle = ’#fff’ }) if (!isEmpty(event.data) && context.count <= 10) { if (context.count < 0) context.count = 0 context.count += 1 //debugHelper.log(context.count) if (context.count > 10) { context.isdetected = ’已檢測到人臉,正在登錄’ //context.$router.push({ name: ’pwdlogin’ }) } } else { context.count -= 1 if (context.count < 0) context.isdetected = ’請您保持臉部在畫面中央’ //this.isdetected = ’已檢測到人臉,正在登錄’ } }) }, onDownloadFile(item) { const link = document.createElement(’a’) link.href = item link.download = `cahyo-${new Date().toISOString()}.png` link.click() link.remove() }, onTakeCam() { const canvas = document.createElement(’canvas’) const video = this.$el.querySelector(’#video_cam’) const canvasContext = canvas.getContext(’2d’) if (video.videoWidth && video.videoHeight) { const isBiggerW = video.videoWidth > video.videoHeight const fixVidSize = isBiggerW ? video.videoHeight : video.videoWidth let offsetLeft = 0 let offsetTop = 0 if (isBiggerW) offsetLeft = (video.videoWidth - fixVidSize) / 2 else offsetTop = (video.videoHeight - fixVidSize) / 2 // make canvas size 300px canvas.width = canvas.height = 300 const { width, height } = canvas canvasContext.drawImage( video, offsetLeft, offsetTop, fixVidSize, fixVidSize, 0, 0, width, height ) const image = canvas.toDataURL(’image/png’) this.images.push(image) } }, onDetectFace(param, index) { const imgItem = document.querySelector(`.img-item-${index}`) const image = new Image() image.src = param const tracker = new tracking.ObjectTracker(’face’) tracker.setStepSize(1.7) tracking.track(image, tracker) tracker.on(’track’, function(event) { event.data.forEach(function(rect) { window.plot(rect.x, rect.y, rect.width, rect.height) }) }) window.plot = function(x, y, w, h) { const rect = document.createElement(’div’) document.querySelector(`.img-item-${index}`).appendChild(rect) rect.classList.add(’rect’) rect.style.width = w + ’px’ rect.style.height = h + ’px’ rect.style.left = x + ’px’ rect.style.top = y + ’px’ rect.style.border = ’2px solid yellow’ rect.style.position = ’absolute’ } }, getMediaStreamSuccess(stream) { window.stream = stream // make stream available to browser console this.videoEl.srcObject = stream debugHelper.log(’getMediaStreamSuccess1’) //this.$store.commit(’setVideoCanvasObject’, this.videoEl) debugHelper.log(’getMediaStreamSuccess2’) }, // 視頻媒體流失敗 getMediaStreamError(error) { alert(’視頻媒體流獲取錯誤’ + error) }, // 結束媒體流 stopMediaStreamTrack() { clearInterval(this.timeInterval) if (typeof window.stream === ’object’) { this.videoEl.srcObject = null //this.$store.commit(’setVideoCanvasObject’, ’’) window.stream.getTracks().forEach(track => track.stop()) } },

總結

到此這篇關于Vue+tracking.js 實現前端人臉檢測功能的文章就介紹到這了,更多相關vue tracking.js 人臉檢測內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Vue
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
99久久www免费| 国产精品一区免费在线| 国产超碰精品| 国产一区二区三区自拍| 欧美va天堂| 鲁大师成人一区二区三区 | 国产乱码午夜在线视频| av资源新版天堂在线| 国语精品一区| 麻豆成人av在线| 中文字幕在线官网| 91精品亚洲| 美女黄网久久| 欧美一区久久| 福利视频一区| 亚洲国内欧美| 中文字幕亚洲精品乱码| 久久国际精品| 91嫩草亚洲精品| 欧美成人精品| 亚洲精品在线二区| 国产精品视频一区二区三区四蜜臂| 久久精品国产久精国产爱| 高潮一区二区| 欧美影院三区| 亚洲人成精品久久久| 国产精品成人国产| 色婷婷精品视频| 石原莉奈一区二区三区在线观看| 97久久亚洲| 日韩中文首页| 日韩中文字幕区一区有砖一区| 久久国产日韩欧美精品| 中文在线а√天堂 | 色老板在线视频一区二区| 夜夜嗨一区二区| 国产精品夜夜夜| 国产乱码午夜在线视频| 国产亚洲亚洲| 国产精品白丝一区二区三区| 久久久久美女| 欧美日韩午夜电影网| 日韩欧美精品一区| 亚洲精选久久| 日韩亚洲一区在线| 亚洲欧美日本视频在线观看| 欧美在线91| 久久国产影院| 国产亚洲久久| 激情久久久久久| 国产亚洲久久| 在线视频精品| 精品久久视频| 在线观看视频免费一区二区三区| 国产一区二区三区四区二区| 视频一区二区中文字幕| 最新中文字幕在线播放 | 日韩精品久久理论片| 电影亚洲精品噜噜在线观看| 日韩精品三级| 午夜日韩在线| 国产videos久久| 亚洲一区欧美| 99精品在线观看| 国产精品2023| 免费国产自线拍一欧美视频| 精品国产a一区二区三区v免费| 蜜臀av在线播放一区二区三区| 中文字幕高清在线播放| 91欧美极品| 在线亚洲一区| 欧洲av不卡| 国产精品久一| 亚洲精品一级| 欧美99久久| 成人国产综合| 国产毛片精品| 蜜桃av一区二区三区电影| 日韩不卡视频在线观看| 久久伊人国产| 亚洲3区在线| 精品一区欧美| 92国产精品| 国产精品videossex久久发布| 中文视频一区| 婷婷色综合网| 亚洲成人精品| 高清在线一区| 老司机免费视频一区二区三区| 中文字幕日韩欧美精品高清在线| 黑丝美女一区二区| 欧美gv在线| а√在线中文在线新版| 国产精品欧美三级在线观看 | 国产精品免费不| 日韩中文av| 丝袜亚洲另类欧美| av成人国产| 欧美日韩日本国产亚洲在线 | 亚洲免费黄色| 亚洲一级高清| 久久精品成人| 影视先锋久久| 伊人久久高清| 日本精品不卡| 99久久夜色精品国产亚洲狼 | 久久久精品网| 国产高清不卡| 欧洲精品一区二区三区| 极品av在线| 日韩欧美字幕| 999久久久免费精品国产| 日韩国产网站| 久久人人99| 国产综合婷婷| 三级精品视频| 91精品一区二区三区综合| 婷婷综合六月| 1024精品一区二区三区| 欧美精品羞羞答答| 99pao成人国产永久免费视频| 欧美午夜不卡影院在线观看完整版免费 | 蜜桃伊人久久| 玖玖玖国产精品| 亚洲aⅴ网站| 国产欧美日韩一区二区三区在线| 国产精品三级| 国产精品毛片一区二区在线看| 欧美久久一区二区三区| 国产日产一区| 精品午夜视频| 色偷偷偷在线视频播放| 色爱av综合网| 欧美日韩国产综合网| 丝袜a∨在线一区二区三区不卡| 亚洲色图网站| 欧美一级全黄| 久久伊人久久| 欧美成人a交片免费看| 91精品一区二区三区综合在线爱| 国产精品7m凸凹视频分类| 香蕉久久国产| 国产欧美高清| 国产伦精品一区二区三区视频| 麻豆国产一区| 久久久国产亚洲精品| 亚洲综合日本| 欧美日韩视频免费看| 国语对白精品一区二区| 99国产精品免费视频观看| 亚洲欧美日韩专区| 91午夜精品| 中文字幕在线官网| 国产亚洲一区在线| 国产香蕉精品| 久久夜夜操妹子| 亚洲五月综合| 久久只有精品| av高清一区| 亚洲毛片在线免费| 国产一区2区| 黑丝一区二区| 久久精品 人人爱| 日韩欧美二区| 亚洲有吗中文字幕| 老牛国内精品亚洲成av人片| 国产伊人精品| 欧美精品三级在线| 久久精品青草| 日韩和欧美一区二区三区| 福利一区二区| 中文无码日韩欧| 国际精品欧美精品| re久久精品视频| 国产精品三p一区二区| 欧美va亚洲va日韩∨a综合色| 日韩avvvv在线播放| 日韩精品第一区| 日韩不卡一区二区三区| 色爱av综合网| 国产精品一区亚洲| 9久re热视频在线精品| 麻豆久久一区| 免费精品视频| 日韩在线看片| 国产欧美日韩在线一区二区| 欧美高清一区| 国产精品xvideos88| 日韩视频一区二区三区在线播放免费观看| 国产精区一区二区| 亚洲激情二区| 成人三级高清视频在线看| 亚洲69av| 国产尤物精品| 丁香婷婷久久| 奇米色欧美一区二区三区| 99久久夜色精品国产亚洲1000部| 婷婷综合福利| 免费视频亚洲| 三上亚洲一区二区|