
vue使用face-api进行人脸捕获
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue

·
安装依赖
npm install face-api.js
下载模型文件到项目中
vue
vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
项目地址:https://gitcode.com/gh_mirrors/vu/vue
模型文件在文章下面
vue页面中的代码,你们自己使用核心的方法即可。
<template>
<div>
<el-dialog
title="录入人脸"
:visible.sync="showVideo"
width="50%"
:before-close="befClose"
>
<div style="position: relative">
<video
ref="videoRef"
id="video"
width="720"
height="540"
style="position: relative"
autoplay
muted
></video>
<canvas class="can" ref="overlayRef" width="720" height="540"></canvas>
</div>
<div ref="snapshots" width="720" height="540"></div>
</el-dialog>
</div>
</template>
<script>
//这里可以导入其他文件(比如:组件,工具js,第三方插件js,json文件,图片文件等等)
//例如:import 《组件名称》 from '《组件路径》';
import * as faceapi from "face-api.js";
export default {
name: "",
//import引入的组件需要注入到对象中才能使用
components: {},
props: {},
data() {
//这里存放数据
return {
showVideo: false,
time: null,
};
},
mounted() {
// //人脸检测模型
faceapi.nets.ssdMobilenetv1.loadFromUri("models");
// 加载模型
// faceapi.nets.tinyFaceDetector.loadFromUri("/models"),
// faceapi.nets.faceLandmark68Net.loadFromUri("/models"),
// faceapi.nets.faceRecognitionNet.loadFromUri("/models");
},
//方法集合
methods: {
show() {
this.showVideo = true;
// faceapi.nets.ssdMobilenetv1.loadFromUri("models");
this.$nextTick(() => {
const canvas = document.createElement("canvas");
canvas.width = 720;
canvas.height=540;
// const canvas = this.$refs.overlayRef;
// 设置画布上下文
const ctx = canvas.getContext("2d");
navigator.mediaDevices
.getUserMedia({
video: true,
// video: { facingMode: { exact: "user" } },
})
.then((stream) => {
video.srcObject = stream;
//每一秒抓一张照片进行捕获人脸
this.time = setInterval(() => {
ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
const img = new Image(canvas.width, canvas.height);
img.src = canvas.toDataURL("image/png"); // 可以改为image/png或其他格式
console.log(img);
// this.$refs.snapshots.appendChild(img);
// setInterval(() => {
// //照片检测人脸
faceapi
.detectSingleFace(
img,
new faceapi.SsdMobilenetv1Options({ minConfidence: 0.8 })
)
.then((result) => {
console.log(result);
const canvas = this.$refs.overlayRef;
const canvasCtx = canvas.getContext("2d");
if (result) {
//识别的边框画到视频上
canvasCtx.clearRect(0, 0, canvas.width, canvas.height);
const box = result.box;
const drawBox = new faceapi.draw.DrawBox(box, {
color: [255, 0, 0],
label: "face",
});
drawBox.draw(canvasCtx);
//保存图片
}else{
canvasCtx.clearRect(0, 0, canvas.width, canvas.height);
}
});
}, 10);
});
// });
});
},
afterShow() {},
stopFaceDetection() {
const stream = this.$refs.videoRef.srcObject;
const tracks = stream.getTracks();
tracks.forEach((track) => track.stop());
this.$refs.videoRef.srcObject = null;
},
befClose() {
this.showVideo = false;
clearInterval(this.time);
// this.stopFaceDetection();
},
},
//生命周期 - 创建完成(可以访问当前this实例)
created() {},
};
</script>
<style lang='less' scoped>
.can {
position: absolute;
top: 0;
left: 0;
}
</style>
最后实现的效果
推荐内容
阅读全文
AI总结




vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
最近提交(Master分支:7 个月前 )
9e887079
[skip ci] 5 个月前
73486cb5
* chore: fix link broken
Signed-off-by: snoppy <michaleli@foxmail.com>
* Update packages/template-compiler/README.md [skip ci]
---------
Signed-off-by: snoppy <michaleli@foxmail.com>
Co-authored-by: Eduardo San Martin Morote <posva@users.noreply.github.com> 9 个月前
更多推荐
相关推荐
查看更多
vue

vuejs/vue: 是一个用于构建用户界面的 JavaScript 框架,具有简洁的语法和丰富的组件库,可以用于开发单页面应用程序和多页面应用程序。
vue

A flexible icon family for Vue
vue

Vue implementation of Geist
热门开源项目
活动日历
查看更多
直播时间 2025-03-13 18:32:35

全栈自研企业级AI平台:Java核心技术×私有化部署实战
直播时间 2025-03-11 18:35:18

从0到1:Go IoT 开发平台的架构演进与生态蓝图
直播时间 2025-03-05 14:35:37

国产工作流引擎 终结「996」开发困局!
直播时间 2025-02-25 14:38:13

免费开源宝藏 ShopXO,电商系统搭建秘籍大公开!
直播时间 2025-02-18 14:31:04

从数据孤岛到数据智能 - 企业级数据管理利器深度解析
所有评论(0)