前端使用mediapipe实现人脸识别

在前端使用mediapipe实现人脸识别,以vue框架为例,

首先需要安装@mediapipe/tasks-vision库:

npm i @mediapipe/tasks-vision

在项目中引入后,初始化,runningMode有 "IMAGE"和"VIDEO"两种模式分别对应着识别源是图片还是视频。

import {
  FaceDetector,
  FilesetResolver
} from "@mediapipe/tasks-vision";


async function initFaceDetector() {
  const vision = await FilesetResolver.forVisionTasks(
      "https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
      // "/mediapipe/tasks-vision/wasm"  下载到本地
  )
  faceDetector = await FaceDetector.createFromOptions(vision, {
    baseOptions: {
        //将模型下载到本地,引入本地文件
      //modelAssetPath: `/mediapipe/blaze_face_short_range.tflite`,
      modelAssetPath: `https://storage.googleapis.com/mediapipe-models/face_detector/blaze_face_short_range/float16/1/blaze_face_short_range.tflite`,
      delegate: "CPU"
    },
    runningMode: "IMAGE" //VIDEO
  })
}

识别图片中的人脸:

  const detections = faceDetector.detect(imageData).detections;

识别视频中的人脸:

//使用usb相机,加载到id为cam的video标签中
function loadVideoUSB() {
  navigator.mediaDevices.getUserMedia({video: true})
      .then(function (stream) {
        let videoElement = document.getElementById('cam');
        //  用于关闭相机
        mediaStreamTrack = stream
        videoElement.srcObject = stream;
        const track = stream.getVideoTracks()[0];
        const settings = track.getSettings();
        console.log("Resolution: " + settings.width + "x" + settings.height);
      })
      .catch(function (err) {
        alert(err);
      })

}

// 加载前需要把runningMode 设置为‘VIDEO’
function handleVideo() {
  console.log('mode is video ')
  let video = document.querySelector("#cam")
  let lastVideoTime = -1;
  async function predictWebcam() {
        let startTimeMs = performance.now();
        if (video.currentTime !== lastVideoTime) {
          lastVideoTime = video.currentTime;
          const detections = faceDetectorVideo.detectForVideo(video,startTimeMs).detections;
           //detections中就是识别到的人脸数据
         }
        requestAnimationFrame(predictWebcam)
    }

}

### 使用 MediaPipe 进行人脸识别的 Web 实现 为了在 Web 上实现基于 MediaPipe人脸识别功能,通常会采用 JavaScript 和 HTML 来构建前端界面,并利用 `@mediapipe` 提供的相关库来处理视频流中的面部数据[^3]。 下面是一个简单的例子,展示如何通过浏览器摄像头实时捕获图像并执行人脸检测: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Face Detection with MediaPipe</title> <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script> <script type="module" src="https://unpkg.com/@google/madiapipe/face_detection"></script> </head> <body> <video id="input_video" width="640" height="480" autoplay muted></video> <div id="output_container"></div> <script type="text/javascript"> const videoElement = document.getElementById('input_video'); navigator.mediaDevices.getUserMedia({ video: { facingMode: "user" } }) .then((stream) => { videoElement.srcObject = stream; }); const faceDetector = new FaceDetector({ locateFile: (file) => { return `https://cdn.jsdelivr.net/npm/@google/mediapipe/face_detection/${file}`; } }); async function detectFaces() { while(true){ await faceDetector.setOptions({ modelSelection: 1, minDetectionConfidence: 0.5 }); const detections = await faceDetector.detect(videoElement); drawDetections(detections); requestAnimationFrame(detectFaces); } } function drawDetections(detections) { let canvasCtx = outputContainer.getContext('2d'); canvasCtx.clearRect(0, 0, outputContainer.width, outputContainer.height); for(let i=0; i<detections.length;i++){ // Draw bounding box around detected faces. const bbox = detections[i].boundingBox; canvasCtx.strokeStyle = 'red'; canvasCtx.lineWidth = 3; canvasCtx.strokeRect(bbox.origin.x,bbox.origin.y,bbox.width,bbox.height); } } detectFaces(); </script> </body> </html> ``` 此代码片段展示了如何设置一个基本的人脸检测网页应用。页面加载完成后,将尝试访问用户的默认前置摄像头,并启动循环调用来持续分析每一帧画面中是否存在人脸。一旦发现目标,则会在画面上绘制矩形框标记出来[^2]。 需要注意的是,在实际部署之前还需要考虑更多因素,比如隐私政策声明、跨平台兼容性和性能优化等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值