Files
CamTalk/frontend/src/components/EdgeProcessor/index.tsx

59 lines
1.7 KiB
TypeScript
Raw Normal View History

// ============================================================
// EdgeProcessor — 边缘预处理VAD + 关键帧检测)
// 职责:浏览器端语音活动检测、关键帧筛选
// 技术:@ricky0123/vad-webVAD、ONNX Runtime Web关键帧检测
// ============================================================
import { useCallback, useState } from "react";
export interface VADOptions {
/** 语音结束回调,携带录音 Float32Array */
onSpeechEnd?: (audio: Float32Array) => void;
/** 语音开始回调 */
onSpeechStart?: () => void;
}
export function useVAD(_options?: VADOptions) {
const [isSpeaking] = useState(false);
// TODO: 初始化 @ricky0123/vad-web加载后设为 true
const isReady = false;
// TODO: 实现 VAD 初始化
// 1. 加载 @ricky0123/vad-web
// 2. 配置 VAD 参数(阈值、最小语音时长等)
// 3. 连接麦克风 stream
// 4. 在 onSpeechEnd 时收集音频并回调 _options.onSpeechEnd
const start = useCallback(() => {
// TODO: 启动 VAD 监听
}, []);
const stop = useCallback(() => {
// TODO: 停止 VAD 监听
}, []);
return { isSpeaking, isReady, start, stop };
}
// ---- 关键帧检测ONNX Runtime Web----
export function useKeyframeDetection() {
// TODO: 加载 ONNX 模型后设为 true
const isReady = false;
// TODO: 实现关键帧检测
// 1. 加载 ONNX 模型
// 2. 对比当前帧与上一帧的像素差异
// 3. 超过阈值则判定为关键帧
const isKeyframe = useCallback(
(_currentFrame: ImageData, _previousFrame: ImageData): boolean => {
// TODO: 实现像素差异对比
return true; // 暂时所有帧都视为关键帧
},
[],
);
return { isReady, isKeyframe };
}