99 lines
2.7 KiB
Python
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 假设、中间特征缓存等
|