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

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Vue+tracking.js 實(shí)現(xiàn)前端人臉檢測(cè)功能

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

項(xiàng)目中需要實(shí)現(xiàn)人臉登陸功能,實(shí)現(xiàn)思路為在前端檢測(cè)人臉,把人臉照片發(fā)送到后端識(shí)別,返回用戶(hù)token登陸成功

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

后端使用face_recognition人臉識(shí)別庫(kù),使用Flask提供restfulAP供前端調(diào)用

實(shí)現(xiàn)效果如下圖:

登陸界面:

Vue+tracking.js 實(shí)現(xiàn)前端人臉檢測(cè)功能

攝像頭檢測(cè)人臉界面:

Vue+tracking.js 實(shí)現(xiàn)前端人臉檢測(cè)功能

前端代碼如下:

<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: ’請(qǐng)您保持臉部在畫(huà)面中央’,videoEl: {},canvasEL: {},images: [],trackCcv: false,trackTracking: false,autoCaptureTrackTraking: false,userMediaConstraints: {audio: false,video: {// ideal(應(yīng)用最理想的)width: {min: 320,ideal: 1280,max: 1920},height: {min: 240,ideal: 720,max: 1080},// frameRate受限帶寬傳輸時(shí),低幀率可能更適宜frameRate: {min: 15,ideal: 30,max: 60},// 攝像頭翻轉(zhuǎn)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 = ’已檢測(cè)到人臉,正在登錄’ //context.$router.push({ name: ’pwdlogin’ }) } } else { context.count -= 1 if (context.count < 0) context.isdetected = ’請(qǐng)您保持臉部在畫(huà)面中央’ //this.isdetected = ’已檢測(cè)到人臉,正在登錄’ } }) }, 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(’視頻媒體流獲取錯(cuò)誤’ + error) }, // 結(jié)束媒體流 stopMediaStreamTrack() { clearInterval(this.timeInterval) if (typeof window.stream === ’object’) { this.videoEl.srcObject = null //this.$store.commit(’setVideoCanvasObject’, ’’) window.stream.getTracks().forEach(track => track.stop()) } },

總結(jié)

到此這篇關(guān)于Vue+tracking.js 實(shí)現(xiàn)前端人臉檢測(cè)功能的文章就介紹到這了,更多相關(guān)vue tracking.js 人臉檢測(cè)內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
水蜜桃精品av一区二区| 亚洲人www| 国产精品成人一区二区不卡| 欧美精品99| 国产一区二区亚洲| 日本久久成人网| 99成人在线| 日本成人精品| 精品视频一区二区三区四区五区| 国产精品三p一区二区| 成人国产精品久久| 亚洲午夜91| 日韩精品视频中文字幕| 国产精品一区亚洲| 欧美国产小视频| 一区二区自拍| 欧美日韩一区二区国产| 国产成人黄色| 99在线|亚洲一区二区| 日韩福利视频一区| 国产精品久久久久久久免费观看 | 国产在线观看www| 欧美日韩黑人| 国产日韩免费| 日韩精品免费一区二区在线观看 | 91精品99| 欧美视频精品全部免费观看| 精品久久97| 日韩精品一级中文字幕精品视频免费观看| 日韩av午夜在线观看| 日韩精品1区| 亚洲三级观看| 成人福利视频| 日韩美女精品| 久久久夜夜夜| 国产精品久久免费视频| 亚洲精品2区| 久久香蕉网站| 免费一级片91| 群体交乱之放荡娇妻一区二区| 日韩精品视频网站| 欧美特黄一级大片| 久久不见久久见国语| 美女国产一区| 成人污污视频| 一区二区亚洲视频| 精品欧美一区二区三区在线观看| 日本一不卡视频| 99视频精品全国免费| 国产精品xxx在线观看| 美女网站久久| 影视先锋久久| 精品一区二区三区视频在线播放| 免费久久精品视频| 日本午夜大片a在线观看| 日韩有吗在线观看| 欧美粗暴jizz性欧美20| 免费看久久久| 91伊人久久| 国产精品社区| 久久久久蜜桃| 欧美国产美女| 久久99国产精品视频| 日韩精品乱码av一区二区| 免费精品国产的网站免费观看| 激情久久一区二区| 久久国内精品| 日韩一区二区三区高清在线观看 | 成人高清一区| 国产精品久久久久久av公交车| 国产一在线精品一区在线观看| 狠狠久久伊人中文字幕| 亚洲精品欧美| 9色国产精品| 激情综合网址| 久久国产影院| 久久免费高清| 欧美13videosex性极品| 国产一区三区在线播放| 国产精品亚洲综合色区韩国| 日韩动漫一区| 日本a级不卡| 色狠狠一区二区三区| 久久最新视频| 亚洲欧美日本日韩| 先锋影音久久久| 欧美专区18| 黄色成人在线网址| 亚洲欧美久久久| 一区二区高清| 日韩av一区二区三区| 日韩国产欧美一区二区三区| 蜜臀av一区二区在线免费观看 | 国产模特精品视频久久久久| 久久久噜噜噜| 午夜欧美在线| 亚洲深爱激情| 视频一区视频二区中文| 中文字幕免费一区二区| 日本一不卡视频| 国产精品免费不| 国产精品夜夜夜| 精品网站999| 日韩精品诱惑一区?区三区| 日韩影院二区| 999在线观看精品免费不卡网站| 好吊一区二区三区| 少妇精品久久久一区二区三区| 日韩不卡一二三区| 老牛国内精品亚洲成av人片 | 精品免费视频| 日韩精品一区二区三区免费观影 | 亚洲一区二区三区四区五区午夜 | 国产精品av久久久久久麻豆网| 亚洲激情久久| 天堂久久一区| 欧美交a欧美精品喷水| 日韩国产欧美| 日韩亚洲精品在线| 奇米色欧美一区二区三区| 麻豆国产精品一区二区三区| 日韩中文视频| 日韩精品一区第一页| 国产精品亚洲欧美一级在线| 国产一区二区三区国产精品| 99成人在线视频| 中文字幕亚洲在线观看| 久久精品一区二区国产| 激情自拍一区| 国产免费久久| 亚洲一级黄色| 国产精品视频一区视频二区| 夜鲁夜鲁夜鲁视频在线播放| 伊人影院久久| 91av一区| 久久婷婷久久| 日韩高清欧美激情| 日韩成人a**站| 久久一二三区| 国产高潮在线| 亚洲ww精品| 在线一区视频观看| 日本一区二区中文字幕| 中文在线资源| 日韩黄色av| 99精品综合| 久久精品 人人爱| 欧美日韩精品在线一区| 综合激情网站| 国产精品99久久精品| 日韩三区在线| 一区二区电影在线观看| 久久精品国产福利| 中文字幕一区二区av| 日韩免费小视频| 日韩精品一区二区三区中文在线| 一区二区三区国产在线| 一本大道色婷婷在线| 国产精品一区二区av交换| 欧美精品激情| 国产不卡av一区二区| 日韩欧美久久| 国产精品91一区二区三区| 99热精品久久| 青草综合视频| 999久久久精品国产| 久久99性xxx老妇胖精品| av亚洲免费| 欧美男人天堂| 欧美国产三级| 香蕉久久一区| 欧美天堂亚洲电影院在线观看| 国产精品久久久久蜜臀| 国产亚洲电影| 亚洲免费观看高清完整版在线观| 日韩国产网站| 精品亚洲自拍| 欧美日韩伊人| 日韩一区二区三区免费视频| 婷婷成人在线| 日本久久成人网| 精品国产第一福利网站| 欧美激情久久久久久久久久久| 亚洲精品高潮| 爽好多水快深点欧美视频| 播放一区二区| 亚洲爱爱视频| 韩国三级一区| 91视频久久| 国产一区二区三区免费在线| 国产乱论精品| 久久国产精品免费精品3p| 精品一二三区| 美女免费视频一区| 日日夜夜免费精品| 亚洲丝袜美腿一区| 蜜臀精品久久久久久蜜臀| 免费看欧美美女黄的网站| 在线看片一区| 亚洲一二三区视频|