当前位置:首页>python>前端实战 (41):谁说 AI 是 Python 的专利?用 JS 实现浏览器端人脸识别

前端实战 (41):谁说 AI 是 Python 的专利?用 JS 实现浏览器端人脸识别

  • 2026-08-26 20:52:18
前端实战 (41):谁说 AI 是 Python 的专利?用 JS 实现浏览器端人脸识别

大家周五好。

现在的前端已经不是当年的“切图仔”了。

随着WebAssembly和WebGPU的成熟,浏览器已经变成了一个高性能计算平台。

场景还原:

你需要做一个“实名认证”功能,或者一个“视频会议背景虚化”功能。

  • 传统方案:截图 -> 上传服务器 -> Python 识别 -> 返回坐标 -> 前端绘制。

    • 缺点:延迟高,费流量,而且用户隐私数据(人脸)上传服务器有合规风险。

  • 前端 AI 方案:直接在浏览器里算!视频流根本不出用户电脑,0 延迟,绝对安全。

今天,我们用 Google 的TensorFlow.js,配合轻量级模型BlazeFace,实现毫秒级的人脸检测。


01. 为什么要用 TensorFlow.js?

  1. 隐私安全:数据不用离线,用户更放心。

  2. 低成本:利用用户自己的 GPU(显卡)算力,帮公司省服务器钱。

  3. 实时性:视频流是 30fps 的,只有前端本地计算才能跟得上这个速度。

2026 年的加速引擎:WebGPU

以前 TF.js 用 WebGL 加速,现在默认支持WebGPU。性能提升了 10 倍以上,甚至能在手机浏览器上跑大模型。


02. 实战:环境准备

我们需要安装两个核心包:

  1. 引擎:@tensorflow/tfjs

  2. 模型:@tensorflow-models/blazeface(Google 训练好的轻量级人脸检测模型)

npm install @tensorflow/tfjs @tensorflow-models/blazeface

03. 核心代码:三步走

第一步:打开摄像头 (复习一下 WebRTC)

// 获取 Video 元素const video = document.getElementById('webcam');async function setupCamera() {  const stream = await navigator.mediaDevices.getUserMedia({    video: { width: 640, height: 480 },    audio: false  });  video.srcObject = stream;  // 等待视频加载完成  return new Promise((resolve) => {    video.onloadedmetadata = () => {      resolve(video);    };  });}

第二步:加载 AI 模型

import * as tf from '@tensorflow/tfjs';import * as blazeface from '@tensorflow-models/blazeface';async function loadModel() {  // 🌟 2026 最佳实践:显式指定 WebGPU 后端  await tf.setBackend('webgpu');   console.log('正在加载模型...');  const model = await blazeface.load();  console.log('模型加载完毕!');  return model;}

第三步:实时预测与绘制

async function detect(video, model) {  const canvas = document.getElementById('output');  const ctx = canvas.getContext('2d');  // 1. AI 预测 (returnPromise: false 表示返回 Tensor,速度更快)  const predictions = await model.estimateFaces(video, false);  // 2. 清空画布,准备重绘  ctx.drawImage(video, 0, 0, 640, 480);  if (predictions.length > 0) {    predictions.forEach((prediction) => {      const start = prediction.topLeft; // [x, y]      const end = prediction.bottomRight; // [x, y]      const size = [end[0] - start[0], end[1] - start[1]];      // 3. 画个红框 (或者贴个 emoji)      ctx.beginPath();      ctx.lineWidth = "4";      ctx.strokeStyle = "red";      ctx.rect(start[0], start[1], size[0], size[1]);      ctx.stroke();      // 或者:给脸打码      // ctx.filter = 'blur(10px)';      // ctx.drawImage(canvas, start[0], start[1], size[0], size[1], start[0], start[1], size[0], size[1]);    });  }  // 4. 下一帧继续  requestAnimationFrame(() => detect(video, model));}

这是一个死循环(递归),每一帧都去检测。


04. 启动!

async function main() {  await setupCamera();  const model = await loadModel();  detect(document.getElementById('webcam'), model);}main();

当你运行这段代码,你会发现浏览器里的你,脸上多了一个紧紧跟随的红框。无论你摇头、晃脑,它都死死咬住你不放。

这就是前端 AI的魅力。


05. 进阶玩法:不仅是画框

拿到了人脸坐标(x, y, w, h),你能做的事情太多了:

  1. 虚拟试戴:在眼睛坐标上贴一副眼镜图片。

  2. 隐私保护:视频会议时,检测到人脸以外的区域,全部高斯模糊(背景虚化)。

  3. 疲劳监测:结合face-landmarks模型,检测眼睛是否闭合,判断司机是否疲劳(车载 H5)。


结语

不要觉得 AI 离前端很远。

在 2026 年,前端工程师的能力边界正在被无限拓宽。左手Node.js做架构,右手TensorFlow.js搞智能。

最新文章

随机文章