Files
2026-07-13 12:28:27 +08:00

99 lines
2.7 KiB
Python

# coding: utf-8
"""
服务端数据类模块
定义服务端使用的数据类,包括任务(Task)和结果(Result)。
使用 dataclass 提供类型安全和清晰的数据结构。
"""
from dataclasses import dataclass, field
from typing import List, Optional
@dataclass
class Task:
"""
语音识别任务
封装发送到识别进程的任务数据,包含音频数据和元信息。
Attributes:
type: 任务类型 ('mic' 麦克风, 'file' 文件, 'cmd' 命令)
data: 原始音频数据 (float32, 16kHz, mono)
offset: 当前片段在整段音频中的时间偏移(秒)
overlap: 片段重叠时间(秒),用于去重
task_id: 任务唯一标识
socket_id: WebSocket 连接标识
is_final: 是否为音频流的最后一个片段
time_start: 录音/音频开始时间戳
time_submit: 任务提交时间戳
samplerate: 采样率,默认 16000 Hz
"""
type: str
data: bytes
offset: float
overlap: float
task_id: str
socket_id: str
is_final: bool
time_start: float
time_submit: float
context: str = ''
language: str = 'auto'
samplerate: int = 16000
command: str = '' # 特殊命令,如 'gpu_boost' / 'gpu_unboost'
@dataclass
class Result:
"""
语音识别结果
封装识别进程返回的结果数据。
Attributes:
task_id: 任务唯一标识
socket_id: WebSocket 连接标识
source: 音频来源 ('mic' 或 'file')
duration: 已处理的音频总时长(秒)
time_start: 录音/音频开始时间戳
time_submit: 片段提交时间戳
time_complete: 识别完成时间戳
text: 主要输出 - 简单文本拼接(不依赖时间戳,用于语音输入)
text_accu: 精确输出 - 时间戳去重拼接(用于字幕生成)
tokens: 字级 token 列表(与 timestamps 对应)
timestamps: 字级时间戳列表(秒)
is_final: 是否已完成所有片段识别
"""
task_id: str
socket_id: str
type: str
duration: float = 0.0
time_start: float = 0.0
time_submit: float = 0.0
time_complete: float = 0.0
# 主要输出(简单文本拼接)
text: str = ''
# 精确输出(时间戳拼接)
text_accu: str = ''
tokens: List[str] = field(default_factory=list)
timestamps: List[float] = field(default_factory=list)
is_final: bool = False
@dataclass
class RecognitionSession:
"""
识别会话
封装单个 task_id 的所有中间识别状态。
"""
task_id: str
result: Result
# 未来可在此扩展会话级状态,如 N-best 假设、中间特征缓存等