使用face-api实现html前端摄像头人脸检测

face-api的github链接:face-api.js

里面的readme写的有点难以理解,再附一个讲解的网址:讲解如何使用webcam实现人脸检测:Build Real Time Face Detection With JavaScript
本文代码基本就是这个视频里的代码扒过来的,看不了视频的直接看这篇文章就可以了。

1. 准备
  1. 下载face-api:https://github.com/justadudewhohacks/face-api.js.git
  2. 新建一个自己的文件夹,将刚才下好的face-api.js目录里的/dist/face-api.min.js复制到自己的文件夹下,然后再把/weights文件夹直接全部拖到自己的目录下,新建index.html和face_detect.js。这里的目录设置如图所示:
    自己新建文件夹目录
2. 代码文件
  1. index.html的代码如下:
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Face Detection</title>
    <script defer src="face-api.min.js"></script>
    <script defer src="face_detect.js"></script>
    <style>
      body {
        margin: 0;
        padding: 0;
        width: 100vw;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: center;
      }
      canvas {
        position: absolute;
      }
    </style>
  </head>
  <body>
    <video id="video" width="720" height="560" autoplay muted></video>
  </body>
</html>
  1. face_detect.js的代码如下:
const video = document.getElementById('video')

Promise.all([
    faceapi.nets.tinyFaceDetector.loadFromUri('./models'),
    faceapi.nets.faceLandmark68Net.loadFromUri('./models'),
    faceapi.nets.faceRecognitionNet.loadFromUri('./models'),
    faceapi.nets.faceExpressionNet.loadFromUri('./models'),
]).then(startVideo);

function startVideo() {
    navigator.getUserMedia(
      { video: {} },
      (stream) => (video.srcObject = stream),
      (err) => console.error(err)
    );
  }
  
video.addEventListener("play", () => {
    const canvas = faceapi.createCanvasFromMedia(video);
    document.body.append(canvas);
    const displaySize = { width: video.width, height: video.height };
    faceapi.matchDimensions(canvas, displaySize);
    setInterval(async () => {
      const detections = await faceapi
        .detectAllFaces(video, new faceapi.TinyFaceDetectorOptions())
        .withFaceLandmarks()
        .withFaceExpressions();
      const resizedDetections = faceapi.resizeResults(detections, displaySize);
      canvas.getContext("2d").clearRect(0, 0, canvas.width, canvas.height);
      faceapi.draw.drawDetections(canvas, resizedDetections);
      faceapi.draw.drawFaceLandmarks(canvas, resizedDetections);
      faceapi.draw.drawFaceExpressions(canvas, resizedDetections);
    }, 100);
  });

大功告成~似乎是不能直接点击index.html运行的,会报404的错误(找不到face-api的model),可以用vscode之类的服务端来打开。配合python下的tornado网络框架使用也可。

要在Vue3中使用face-api.js进行人脸识别,需要先安装face-api.js库和相关依赖。可以通过以下命令进行安装: ```bash npm install face-api.js canvas --save ``` 接下来,在Vue3中使用face-api.js需要执行以下步骤: 1. 在Vue组件中引入face-api.js库: ```javascript import * as faceapi from 'face-api.js'; ``` 2. 在Vue组件中创建一个canvas元素,并将其添加到DOM中: ```javascript mounted() { const video = this.$refs.video; const canvas = this.$refs.canvas; const context = canvas.getContext('2d'); document.body.append(canvas); } ``` 3. 加载face-api.js模型: ```javascript async loadModels() { const MODEL_URL = '/models'; await faceapi.loadSsdMobilenetv1Model(MODEL_URL); await faceapi.loadFaceLandmarkModel(MODEL_URL); await faceapi.loadFaceRecognitionModel(MODEL_URL); await faceapi.nets.tinyFaceDetector.loadFromUri(MODEL_URL); } ``` 4. 进行人脸识别: ```javascript async detectFace() { const video = this.$refs.video; const canvas = this.$refs.canvas; const context = canvas.getContext('2d'); const { width, height } = video.getBoundingClientRect(); canvas.width = width; canvas.height = height; const detections = await faceapi.detectAllFaces(video, new faceapi.TinyFaceDetectorOptions()) .withFaceLandmarks() .withFaceDescriptors(); context.clearRect(0, 0, canvas.width, canvas.height); faceapi.draw.drawDetections(canvas, detections); faceapi.draw.drawFaceLandmarks(canvas, detections); } ``` 以上就是在Vue3中使用face-api.js进行人脸识别的基本步骤。需要注意的是,在调用face-api.js的API时,需要将视频流转换成canvas元素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值