fix: 清理导出服务日志并简化whisper接口参数

- 移除exportService中的冗余console日志输出
- 简化whisper API接口,移除downloadModel和getModelStatus的payload参数
- 清理图片、表情、语音导出过程中的调试日志
- 移除数据库查询和媒体处理中的详细日志记录
- 优化代码可读性,减少控制台输出噪音
This commit is contained in:
Forrest
2026-01-17 16:24:18 +08:00
parent 82ba0344b9
commit dc12df0fcf
9 changed files with 33 additions and 104 deletions

View File

@@ -1,4 +1,4 @@
import { parentPort, workerData } from 'worker_threads'
import { parentPort, workerData } from 'worker_threads'
import * as fs from 'fs'
interface WorkerParams {
@@ -9,37 +9,23 @@ interface WorkerParams {
}
async function run() {
console.info('[TranscribeWorker] Worker process starting...');
if (!parentPort) {
console.error('[TranscribeWorker] Critical Error: parentPort is null');
return;
}
try {
console.info('[TranscribeWorker] Loading sherpa-onnx-node...');
// 动态加载以捕获可能的加载错误(如 C++ 运行库缺失等)
let sherpa: any;
try {
sherpa = require('sherpa-onnx-node');
console.info('[TranscribeWorker] sherpa-onnx-node loaded successfully.');
} catch (requireError) {
console.error('[TranscribeWorker] Failed to load sherpa-onnx-node:', requireError);
} catch (requireError) {
parentPort.postMessage({ type: 'error', error: 'Failed to load speech engine: ' + String(requireError) });
return;
}
const { modelPath, tokensPath, wavData: rawWavData, sampleRate } = workerData as WorkerParams
const wavData = Buffer.from(rawWavData);
console.info('[TranscribeWorker] Params received:', {
modelPath,
tokensPath,
sampleRate,
wavDataLength: wavData?.length
});
// 1. 初始化识别器 (SenseVoiceSmall)
console.info('[TranscribeWorker] Initializing OfflineRecognizer...');
const recognizerConfig = {
modelConfig: {
senseVoice: {
@@ -52,12 +38,8 @@ async function run() {
}
}
const recognizer = new sherpa.OfflineRecognizer(recognizerConfig)
console.info('[TranscribeWorker] OfflineRecognizer initialized.');
// 2. 初始化 VAD (用于流式输出效果)
const vadPath = modelPath.replace('model.int8.onnx', 'silero_vad.onnx');
console.info('[TranscribeWorker] VAD Path:', vadPath);
const vadConfig = {
sileroVad: {
model: vadPath,
@@ -73,8 +55,6 @@ async function run() {
// 检查 VAD 模型是否存在,如果不存在则退回到全量识别
if (!fs.existsSync(vadPath)) {
console.warn('[TranscribeWorker] VAD model not found, falling back to full transcription.');
const pcmData = wavData.slice(44)
const samples = new Float32Array(pcmData.length / 2)
for (let i = 0; i < samples.length; i++) {
@@ -86,15 +66,11 @@ async function run() {
recognizer.decode(stream)
const result = recognizer.getResult(stream)
console.info('[TranscribeWorker] Full transcription result:', result.text);
parentPort.postMessage({ type: 'final', text: result.text })
return
}
console.info('[TranscribeWorker] Initializing Vad...');
const vad = new sherpa.Vad(vadConfig, 60) // 60s max
console.info('[TranscribeWorker] VAD initialized.');
// 3. 处理音频数据
const pcmData = wavData.slice(44)
const samples = new Float32Array(pcmData.length / 2)
@@ -107,7 +83,6 @@ async function run() {
let offset = 0
let accumulatedText = ''
console.info('[TranscribeWorker] Starting processing loop...');
let segmentCount = 0;
while (offset < samples.length) {
@@ -120,9 +95,6 @@ async function run() {
while (!vad.isEmpty()) {
const segment = vad.front(false)
// Log segment detection
console.info(`[TranscribeWorker] VAD Segment detected. Duration: ${segment.samples.length / sampleRate}s`);
const stream = recognizer.createStream()
stream.acceptWaveform({ sampleRate, samples: segment.samples })
recognizer.decode(stream)
@@ -133,7 +105,6 @@ async function run() {
if (text.length > 0) {
accumulatedText += (accumulatedText ? ' ' : '') + text
segmentCount++;
console.info(`[TranscribeWorker] Partial update #${segmentCount}: "${text}" -> Total: "${accumulatedText.substring(0, 50)}..."`);
parentPort.postMessage({ type: 'partial', text: accumulatedText })
}
}
@@ -149,26 +120,23 @@ async function run() {
vad.flush();
while (!vad.isEmpty()) {
const segment = vad.front(false);
console.info(`[TranscribeWorker] Final VAD Segment detected. Duration: ${segment.samples.length / sampleRate}s`);
const stream = recognizer.createStream()
stream.acceptWaveform({ sampleRate, samples: segment.samples })
recognizer.decode(stream)
const result = recognizer.getResult(stream)
if (result.text) {
accumulatedText += (accumulatedText ? ' ' : '') + result.text.trim()
console.info(`[TranscribeWorker] Final partial update: "${result.text.trim()}"`);
parentPort.postMessage({ type: 'partial', text: accumulatedText })
}
vad.pop();
}
console.info('[TranscribeWorker] Loop finished. Final text length:', accumulatedText.length);
parentPort.postMessage({ type: 'final', text: accumulatedText })
} catch (error) {
console.error('[TranscribeWorker] Fatal error:', error);
parentPort.postMessage({ type: 'error', error: String(error) })
}
}
run();