项目中需要实现人脸登陆功能,实现思路为在前端检测人脸,把人脸照片发送到后端识别,返回用户token登陆成功
前端调用摄像头使用tracking.js检测视频流中的人脸,检测到人脸后拍照上传后端。
后端使用face_recognition人脸识别库,使用Flask提供restfulAP供前端调用
实现效果如下图:
登陆界面:
摄像头检测人脸界面:
前端代码如下:
<template> <div id="facelogin"> <h1 class="title is-1">{{FaceisDetected}}</h1> <!-- <p>{{FaceisDetected}}</p> --> <div class="content-cam"> <div class="camera-wrp sec"> <video width="320" height="320" ref="videoDom" id="video_cam" preload autoplay loop muted></video> <canvas width="320" height="320" 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 :class="`img-item img-item-${index}`" v-for="(image, index) in images" :key="`img-wrp-${index}`" :style="`background-image: url('${image}')`" ></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 "color: #ff0000">总结
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
暂无“Vue+tracking.js 实现前端人脸检测功能”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
2024年12月29日
2024年12月29日
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]