LocalTrans 是一个端侧本地部署的 AI 实时翻译工具,支持从音频输入到 ASR、MT、TTS 的完整链路,提供 CLI 和 GUI 两种使用方式。
- 本地离线处理,默认不依赖云端接口。
- 实时语音识别 + 翻译 + 语音合成。
- 支持虚拟声卡接入会议软件(腾讯会议、Zoom 等)。
- 支持模型下载管理,并在 GUI 中自动下载与自动应用。
- 支持打包为 Windows 可执行文件(
localtrans.exe/localtrans-qml.exe)。 - 支持双向会话编排(
我->对方与对方->我)。 - 双向场景已内置跨方向防回授抑制(减少回声自激循环)。
- 双向场景已支持方向级自动恢复(单方向异常时自动拉起,不拖垮全会话)。
当前架构文档:
docs/loci_qml_software_architecture.mddocs/bidirectional_architecture_design.md
当前冻结定位:
- 面向会议与实时沟通场景的跨平台本地 AI 翻译工作台
- ASR:
vosk - MT:
argos-ct2 - TTS:
pyttsx3
可选真实模型能力(已接入):
- ASR:
whisper-*,faster-whisper-*,funasr,sherpa-onnx(可选) - MT:
nllb-*,argos-* - TTS:
piper-*
- Python:
3.10或3.11(推荐3.11) - 系统: Windows 10/11(项目当前主要验证于 Windows)
- 虚拟声卡: VB-Cable(会议路由推荐)
conda create -n localtrans python=3.11 -y
conda activate localtranspip install -U pip
pip install -e ".[qml,download]"说明:
- 基础依赖已包含
vosk、argostranslate、ctranslate2、pyttsx3。 - 若需要 Whisper 模型下载/推理,请额外安装:
pip install openai-whisper- 若环境可安装 FunASR(中文流式识别候选):
pip install funasr-
若要启用 Qwen3-ASR(依赖 FunASR):
-
若已执行上一步
pip install funasr,此处无需重复安装。 -
若要启用 sherpa-onnx(中文流式识别候选):
pip install sherpa-onnx- 若需要 Piper 本地 TTS,请额外安装:
pip install piper-ttslocaltrans modelslocaltrans download vosk-model-small-en-us-0.15
localtrans download argos-en-zh
localtrans download argos-zh-en
localtrans download piper-zh_CN-huayan
localtrans download qwen3-asr-0.6b
localtrans download wenet-u2pp-cn- ASR:
whisper-tiny,whisper-base,whisper-small,whisper-turbo,faster-whisper-base,faster-whisper-small,faster-whisper-medium,faster-whisper-large-v3,faster-whisper-distil-large-v3,funasr-sensevoice-small,qwen3-asr-0.6b,qwen3-asr-1.7b,wenet-u2pp-cn,sherpa-onnx-zh-en-zipformer,vosk-model-small-en-us-0.15,vosk-model-small-cn-0.22 - MT:
nllb-200-distilled-600M,nllb-200-1.3B,argos-en-zh,argos-zh-en - TTS:
piper-zh_CN-huayan,piper-en_US-lessac
模型默认目录:
C:\Users\<你的用户名>\.localtrans\models
localtrans --help
localtrans check
localtrans diagnose
localtrans devices
localtrans run -s zh -t en
localtrans run -s zh -t en --profile realtime
localtrans run -s zh -t en --profile quality --asr-direct-translate禁用 TTS:
localtrans run -s zh -t en --no-tts双向会话:
localtrans run --bidirectional --input-device 3 --reverse-input-device 7 -s zh -t en前沿实验模式(保留稳定模式):
localtrans run -s zh -t en --mode frontier说明:
--mode stable(默认):稳定链路,优先可用性。--mode frontier:前沿实验链路,优先尝试 Qwen3-ASR/FunASR 等更高质量方案,自动回退到可用后端。
双向稳定性策略(可选):
localtrans run --bidirectional --input-device 3 --reverse-input-device 7 -s zh -t en `
--restart-check-interval 0.6 `
--restart-cooldown 1.5 `
--restart-max-attempts 3 `
--restart-backoff-factor 2.0 `
--restart-max-cooldown 12 `
--restart-open-circuit 20 `
--restart-healthy-run 8说明:
- 双向模式下
--input-device必填(本地麦克风)。 --reverse-input-device可选;不填则自动探测会议回录设备(Stereo Mix / VB-CABLE 等)。- CLI 会输出“会话摘要”,包含每方向设备、模型与输出模式。
- 上述
--restart-*参数仅作用于当前会话,不会改写全局默认配置。 - 若需要排查共享行为,可添加
--no-share-mt禁用双向 MT 引擎共享。 - 若需要排查共享行为,也可添加
--no-share-tts禁用双向 TTS 引擎共享。
localtrans-qmlGUI 关键功能:
- 在“运行配置”页可选择 ASR/MT/TTS 后端。
- 新增“运行方案”档位:
稳定模式 / 前沿实验模式(前沿模式会优先尝试更高质量 ASR 链路)。 - 可选“Whisper中译英直出(跳过MT)”实验模式(仅 whisper/faster-whisper + 目标英文)。
- 在“模型下载与自动配置”中可选择要下载的模型。
- 新增“环境诊断”按钮,可直接在 GUI 内输出设备/模型/TTS 可听性报告。
- 提供“极速(<1s)预设”一键切到中译英低延迟组合。
- 新增“运行模式”档位:
实时优先 / 平衡 / 质量优先。 - 勾选“应用/启动时自动下载并配置所选模型”后,点击“应用到当前会话”或“开始翻译”会自动处理模型。
- 实时链路已启用增量流式输出(短句分段即译),并将 TTS 与 MT 解耦,减少排队延迟。
- 双向模式下 GUI 顶部会显示“当前会话”摘要(每方向设备、模型、输出模式、重启信息)。
- 双向模式启用编排层,包含跨方向防回授抑制与方向级自动恢复。
在 GUI「运行配置 -> 音频与延迟」中建议:
ASR缓冲时长(s) = 0.6ASR重叠时长(s) = 0.05最大翻译队列 = 2
推荐组合(中译英):
- ASR:
faster-whisper-small(实时优先)或faster-whisper-distil-large-v3(精度优先,GPU推荐) - MT:
argos-ct2+argos-zh-en - TTS:
piper-en_US-lessac(若先追求最低延迟,可先关闭 TTS 验证文本链路)
CLI(源码环境或 exe):
localtrans benchmark -s zh -t en --iterations 20 --warmup 3
localtrans benchmark -s zh -t en --iterations 20 --warmup 3 --no-tts
localtrans benchmark -s zh -t en --audio-file .\sample.wav --iterations 10脚本方式(源码仓库):
python scripts/benchmark_latency.py --iterations 20 --warmup 3输出会包含 MT/TTS/TOTAL(或含音频文件时的 ASR/MT/TTS/TOTAL)的 P50/P95/AVG。
说明:
- 实时管线已加入低置信度片段过滤、中文字符占比过滤、常见幻听短语清洗(如“感谢观看/字幕by”),以减少误翻译噪声。
python -u scripts/fullchain_realtime_eval.py --asr-model-type faster-whisper --asr-model-size small输出包含:
- 首次输出时间(是否在音频结束前实时输出)
- 分段
MT/TTS/E2E延迟P50/P95 - 近似准确度(ASR/翻译文本相似度,便于回归对比)
目标链路:你麦克风输入 -> LocalTrans 翻译与合成 -> 输出到虚拟声卡 -> 腾讯会议把虚拟声卡当麦克风发送。
- LocalTrans 中选择输入设备为你的真实麦克风。
- LocalTrans 勾选“输出到虚拟设备”。
- 腾讯会议中将“麦克风”设为
CABLE Output (VB-Audio Virtual Cable)。 - 讲话后,会议中其他人会听到翻译后的 TTS 语音。
- 不要把“会议扬声器输出捕获”和“翻译语音回灌会议”混在同一条设备链路。
- 建议将“听会场景”和“发言转译场景”分开配置,必要时使用双虚拟线缆。
项目已兼容 piper-tts 新版接口(1.4.x)。
在 GUI 中可直接:
- 选择
TTS引擎 = piper - 在“模型下载与自动配置”选择
piper-zh_CN-huayan或piper-en_US-lessac - 点击“下载并应用所选模型”
CLI 也可通过环境变量覆盖:
$env:LOCALTRANS_TTS__ENGINE="piper"
$env:LOCALTRANS_TTS__MODEL_PATH="C:\Users\<你的用户名>\.localtrans\models\tts\piper-zh_CN-huayan\zh\zh_CN\huayan\medium\zh_CN-huayan-medium.onnx"
$env:LOCALTRANS_TTS__LANGUAGE="en"
localtrans run -s zh -t en- 当前默认流程下,MT 使用
ctranslate2,可独立利用 CUDA(不依赖 torch CUDA 版)。 whisper/transformers等 torch 路线若要上 GPU,需要自行安装对应 CUDA 版 torch。- 可用以下命令检查:
python -c "import torch;print(torch.__version__, torch.cuda.is_available(), torch.version.cuda)"
python -c "import ctranslate2;print(ctranslate2.get_cuda_device_count())"在 localtrans 环境执行:
$env:PYTHONPATH="src"
pyinstaller localtrans.spec --noconfirm --clean
pyinstaller localtrans-qml.spec --noconfirm --clean输出目录:
dist\localtrans.exedist\localtrans-qml.exe
.\dist\localtrans.exe --version
.\dist\localtrans.exe check
.\dist\localtrans.exe models
.\dist\localtrans.exe devices运行时日志目录:
C:\Users\<你的用户名>\.localtrans\logs
可使用 Hugging Face 镜像:
$env:HF_ENDPOINT="https://hf-mirror.com"也可切换到 ModelScope(魔塔)下载源:
$env:LOCALTRANS_MODEL_HUB="modelscope" # 仅走魔塔
localtrans download funasr-sensevoice-small --force下载源策略说明:
LOCALTRANS_MODEL_HUB=auto(默认):先 Hugging Face,失败后自动回退到 ModelScope。LOCALTRANS_MODEL_HUB=huggingface:只使用 Hugging Face,不回退。LOCALTRANS_MODEL_HUB=modelscope:只使用 ModelScope(魔塔)。
- 检查是否启用 TTS(
启用语音合成)。 - 检查所选 TTS 引擎依赖是否安装(如
piper-tts)。 - 在 GUI 中点击“刷新模型状态”,确认目标 TTS 模型显示
[OK]。
以 localtrans models 或模型目录实际文件为准进行复核。
- 先执行
localtrans devices,确认本地麦克风与回录设备都可见。 - 双向 CLI 至少指定本地麦克风:
--input-device <id>。 - 若自动探测回录设备失败,显式指定
--reverse-input-device <id>。 - 检查会议软件设备路由,避免“播放端”和“采集端”指向同一链路导致回授抑制持续触发。
使用诊断命令:
localtrans diagnose -s zh -t en诊断输出会包含:
- 输入设备是否支持
16kHz/1ch - 关键 ASR 依赖是否可用
- 中英文 TTS 可听性探测结果(音频长度/幅值/时长)
建议最少覆盖以下维度并记录结果,避免“GUI 可启动但链路不可用”:
| 维度 | 最小验证项 | 命令/动作 |
|---|---|---|
| CLI 基础 | 可执行、设备可枚举、模型可读取 | localtrans --version / localtrans devices / localtrans models |
| 单向链路 | ASR->MT->TTS 可持续输出 |
localtrans run -s zh -t en |
| 双向链路 | 两方向都产生输出且互不阻塞 | localtrans run --bidirectional --input-device <A> --reverse-input-device <B> -s zh -t en |
| 稳定性 | 长时运行无崩溃、自动恢复可触发 | 连续运行 30-60 分钟并观察日志 |
| GUI 可用性 | 不仅存活,还可启动/停止并有可听输出 | GUI 启动后完整跑通一次双向会话 |
| 打包产物 | EXE 功能与源码环境一致 | dist\localtrans*.exe 重复以上关键用例 |
已内置对应 CI 工作流(GitHub Actions):
.github/workflows/ci-smoke.yml- 覆盖:Windows x86_64、Linux x86_64、Linux aarch64(Docker/QEMU)
- 包含:
pytest双向冒烟 + CLI 命令级冒烟
- 双向会话由
SessionOrchestrator统一编排(CLI/GUI 已接入)。 - 新增跨方向防回授抑制,降低回声自激循环概率。
- 新增方向级自动恢复,单方向异常不再拖垮整会话。
如需扩展模型或定制下载源,请修改:
src/localtrans/utils/model_downloader.py