Skip to content

面部网格 ​

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

工作原理 ​

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

配置 ​

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

const camera = createVitalSignCamera({
  // ... 其他配置
  visualizationOptions: {
    faceMesh: {
      enabled: true,
      color: 'lightgreen',       // 线框颜色(默认:'lightgreen')
      lineWidth: '1%',           // 像素,或面部宽度的百分比(默认:'1%')
      animate: true,             // 扫描动画(默认:true)
      animationDirection: 'both',// 'horizontal' | 'vertical' | 'both' | 'ripple'
      animationSpeed: 1.0,       // 动画时长(秒)
      animationDelay: 0,         // CSS animation-delay(秒)
      simplifyFaceMesh: false    // 移除外圈与锯齿网格(默认:false)
    }
  }
});
tsx
import { VitalSignCamera } from 'react-vital-sign-camera';

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

<script setup>
const visualizationOptions = {
  faceMesh: {
    enabled: true,
    color: '#64ffda',
    lineWidth: '0.5%',
    animate: true,
    animationDirection: 'both',
    animationSpeed: 6,
    simplifyFaceMesh: true
  }
};
</script>

动画方向 ​

方向行为
'vertical'上下扫掠网格(未设置时的默认值)
'horizontal'左右扫掠网格
'both'四向扫掠
'ripple'从鼻尖向外扩散的涟漪

扫掠是应用在线框上的 CSS 遮罩动画;animationSpeed 控制一次扫掠的持续时间(秒),animationDelay 偏移动画的起始时间(使用负值可从周期中间开始)。

简化网格 ​

将 simplifyFaceMesh 设为 true 可移除外圈以及周围的结构性锯齿连接,留下更简洁、聚焦于面部轮廓的网格。当完整网格在视觉上过于密集时(例如小屏幕)非常有用。

动态更新 ​

typescript
// 更改动画方向
camera.visualizationOptions = {
  ...camera.visualizationOptions,
  faceMesh: { animationDirection: 'ripple' }
};

// 简化网格
camera.visualizationOptions = {
  ...camera.visualizationOptions,
  faceMesh: { simplifyFaceMesh: true }
};

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

FaceMeshOptions 接口 ​

typescript
type FaceMeshAnimationDirection = 'horizontal' | 'vertical' | 'both' | 'ripple';

interface FaceMeshOptions {
  enabled?: boolean;                  // 启用/停用覆盖层
  color?: string;                     // CSS 颜色(默认:'lightgreen')
  lineWidth?: number | `${number}%`;  // 像素,或面部宽度的百分比(默认:'1%')
  animate?: boolean;                  // 启用扫描动画(默认:true)
  animationSpeed?: number;            // 动画时长(秒)
  animationDelay?: number;            // CSS animation-delay(秒)
  animationDirection?: FaceMeshAnimationDirection;
  simplifyFaceMesh?: boolean;         // 移除外圈与锯齿连接(默认:false)
}

TIP

当扫描序列编排器启用时,它会接管面部网格(以及热感遮罩、边界框)的生命周期。此时应通过序列自身的选项与 idleStage 配置网格,而非顶层的 faceMesh 选项。