Skip to content

面部网格

面部网格可视化渲染一个 468 点面部标志线框覆盖层。它提供关于面部检测质量和跟踪精度的详细视觉反馈。

工作原理

SDK 的面部网格模块实时检测 468 个面部标志点,映射眼睛、眉毛、鼻子、嘴巴和下颌线的轮廓。可视化会在这些点之间绘制连接线,在检测到的面部上形成线框网格覆盖层。可选的动画效果提供微弱的脉冲外观,以确认正在主动跟踪。

配置

typescript
import { createVitalSignCamera } from 'ts-vital-sign-camera';

const camera = createVitalSignCamera({
  userId: 'user-123',
  apiKey: 'your-api-key',
  visualizationOptions: {
    faceMesh: {
      enabled: true,
      color: 'lightgreen',       // 线框颜色(默认:'lightgreen')
      lineWidth: 1.5,            // 线条宽度(像素,默认:1.5)
      animate: true,             // 脉冲动画(默认:false)
      speed: 1.0,                // 动画速度倍率(默认:1.0)
      direction: 'both',         // 脉冲方向:'in' | 'out' | 'both'(默认:'both')
      minOpacity: 0.2,           // 动画循环期间的最小不透明度(默认:0.2)
      maxOpacity: 1.0            // 动画循环期间的最大不透明度(默认:1.0)
    }
  }
});
tsx
import { VitalSignCamera } from 'react-vital-sign-camera';

const App = () => (
  <VitalSignCamera
    visualizationOptions={{
      faceMesh: {
        enabled: true,
        color: '#00ff88',
        animate: true,
        speed: 1.5,
        direction: 'out'
      }
    }}
  />
);
vue
<template>
  <VitalSignCamera
    :visualizationOptions="visualizationOptions"
  />
</template>

<script setup>
const visualizationOptions = {
  faceMesh: {
    enabled: true,
    color: '#64ffda',
    lineWidth: 1.2,
    animate: true,
    speed: 0.8,
    direction: 'both',
    minOpacity: 0.15,
    maxOpacity: 0.9
  }
};
</script>

动态更新

typescript
// 启用自定义动画
camera.visualizationOptions = {
  ...camera.visualizationOptions,
  faceMesh: {
    enabled: true,
    color: '#ff6b6b',
    animate: true,
    speed: 2.0
  }
};

// 更改动画方向
camera.visualizationOptions = {
  ...camera.visualizationOptions,
  faceMesh: { direction: 'in' }
};

// 禁用
camera.visualizationOptions = {
  ...camera.visualizationOptions,
  faceMesh: { enabled: false }
};

动画方向

方向行为
'both'不透明度在最小值和最大值之间振荡(默认)
'in'向内脉冲(淡入,突然消失)
'out'向外脉冲(淡出,突然出现)

FaceMeshOptions 接口

typescript
interface FaceMeshOptions {
  enabled?: boolean;
  color?: string;              // CSS 颜色(默认:'lightgreen')
  lineWidth?: number;          // 线条宽度(像素,默认:1.5)
  animate?: boolean;           // 启用呼吸动画(默认:false)
  speed?: number;              // 动画速度倍率(默认:1.0)
  direction?: 'in' | 'out' | 'both';  // 脉冲方向(默认:'both')
  minOpacity?: number;         // 循环中的最小不透明度(默认:0.2)
  maxOpacity?: number;         // 循环中的最大不透明度(默认:1.0)
}