技术研究之同声传译

标签: 无 分类: 未分类 创建时间:2026-04-18 03:40:32 更新时间:2026-05-27 11:42:29

前言

最近突然想着借助大模型做点什么东西,于是就利用大模型,想要开发一个同声传译的软件,这样看片的时候,就不用非要找中文字幕了。

自动语音识别(ASR, Automatic Speech Recognition,又称 Speech‑to‑Text, STT)是将人类语音输入以文本形式自动输出的核心技术,为智能语音助手、语音转写、字幕自动生成、可访问性服务等应用提供基础能力。其运作机制包括音频预处理、声学建模、语言建模、解码与后处理等多个阶段。现代 ASR 系统多数基于深度学习架构,能够处理自然语言中的音调、口音、多语种/方言识别与嘈杂环境中的语音抽取。

参考文章:
【1】.免费语音转文字方案盘点:开源语音识别ASR工具推荐与评测对比
【2】.无需再等待口译员:7 款最佳语音转文本翻译应用(2026) 这是 同言传译 的官方广告。
【3】.同声传译翻译器哪个好?别说我没告诉你,这6个绝对值得一选! All language VoiceTranslator、同声传译王、InterpretBank、Waygo、Yandex Translate、Google Translate
【4】.Faster-Whisper 免费开源的高性能语音识别模型 这里倒是很简单的。
【5】.OpenAI Whisper 新一代语音技术(更新至v3-turbo) large-v3-turbo来了,和之前whisper类似的模型架构,更少的decoder层(32层减少到4层),更多的训练轮数(额外两个epoch),在识别性能几乎不怎么降低的情况下(比large-v3略有小幅下降),实现了更快的识别速度(large-v2的近8倍,接近tiny的速度)。
【6】.看片神器:实时字幕翻译 Live Captions Translator(附下载) 1.无障碍功能;2.Windows 11 实时字幕功能加 Live Captions Translator

1.相关技术

SenseVoice (Small): 由阿里开源,在中文识别方面精度极高。除了基础的语音转文字,它还具备独家的情感识别、音频事件检测功能,且能同时输出带时间戳的文本,非常适合长语音转写。
FireRedASR v2: 2026年评测中精度领先的模型之一。它自带VAD(语音活动检测)、标点符号预测、语种识别和时间戳功能,是生产环境中的强力候选项。
Qwen3-ASR: 阿里最新的开源语音识别模型,声称支持52种语言与方言,不仅能识别语速超快的饶舌RAP,还能在极短时间内高效处理长音频

参考文章:
【1】.实时语音转写 免费的支持1路并发,24小时。
【2】.中文语音识别该用谁?6 个开源模型 + 2 个配套工具,一文理清 Paraformer、SenseVoice-Smal、Fun-ASR-Nano、FireRedASR、Qwen3-ASR、Moonshine
【3】.FireRedASR-AED-L快速部署指南:无需conda/pip,Docker一键加载即用 这是docker安装
【4】.FireRedASR:精准识别普通话、方言和歌曲歌词!小红书开源工业级自动语音识别模型 FireRedASR 包含两个版本,FireRedASR-LLM 采用 Encoder-Adapter-LLM 框架,专注于极致的语音识别精度;FireRedASR-AED 采用基于注意力的编码器-解码器架构,平衡了高准确率与推理效率。
【5】. ASR引擎测试:FireRedASR只能说小红书的诚意不够

3.去噪

我在使用录音的时候,发现了很大的问题,那就是会有环境音,于是就想着要先把噪音处理掉。
(1)DeepFilterNet
开始的时候,我尝试使用DeepFilterNet,结果效果不理想,只能换了。

(2)UVR 5
这个是一个桌面软件,我在UVR5上处理我的音频,先是进行了人声分离,然后又去处理了进行了降噪,结果在GUI上可以,但是我想找python,找到了一个python-audio-separator,我倒是写了代码引入了,问题就是当我用python-audio-separator进行人声分离的时候,死活无法降噪,后来我只用了UVR-DeNoise.pth对GUI处理的音频进行降噪倒是可以,但是用用audio-separator处理的音频死活就是不可以。

(3)ZipEnhancer
我发现UVR5 只有界面,没有命令行,而且处理之后,总是有问题,我只能换一个方案了,用了阿里的ZipEnhancer进行处理。

1
pip install datasets==2.18.0 --no-cache-dir

(4)RNNoise

参考文章:
【1】.UVR5使用教程和最新连招
【2】.nomadkaraoke/python-audio-separator
【3】.Spleeter: 音频源分离的革命性工具 Spleeter是由音乐流媒体公司Deezer开发的一款强大的音频源分离工具。作为一个开源项目,Spleeter利用深度学习技术,为音乐制作和音频处理领域带来了革命性的变化。本文将深入探讨Spleeter的功能、应用场景以及它在音频处理领域的重要意义。
【4】.2025实测:Ultimate Vocal Remover GUI模型性能终极指南
【6】.ZipEnhancer语音降噪模型介绍
【7】.使用RNNoise进行音频降噪
【8】.uvr5-cli-no-ui
【9】.python-audio-separator

4.断句

使用 silero_vad 库,可以识别一句话是否已经说完了。

4.流程

(1)我现在已经在modules已经有了audio_preprocessing.py模块,vad.py 模块,有了asr.py模块,有了translation.py模块,虚拟环境translation-server,这样就可以修改test/test_complete_flow.py这个全流程模块,从音频输入,去噪、vad 处理,然后进行asr音频识别,识别之后,利用deepseek进行补全和翻译。为了模拟websocket从前端传入音频,我采用data\owyE03YvRvQefwEvafrQBGg4jGfg_20260420_160334.wav这个文件,将这个文件进行切片,每3秒一个切片,模拟websocket3秒发送一个视频片段,然后进行处理,最后输出这个音频的翻译结果。在asr识别时为了保证语音连贯,可以保留最近几个切片,同时进行识别,但是输出只输出当前切片内容,在deepseek补全和翻译时也是,为了让语句连贯,也需要利用前面几个分片的内容,但是最后只保留当前切片的翻译结果。

(2)用流式处理的方法,第一个分片进来,去噪后存储到缓冲区,通过vad判断这段音频是否是一个完整的话,如果是,那就进行asr识别和翻译,如果不是,那就继续的等待第二个分片进入,去噪后和第一个分片合并,将这一个整体进行vad判断,是否有完整的句子,如果有,则将前半部分送入识别模块进行识别,剩下的继续保存到缓冲区,等待下一个分片进入。剩余的后半部分加上新进入的分片组成一个新的整体,再次进行vad识别,是否达成了一个完整句子,重复上面的过程,直到音频结尾

5.环境安装

(1) 安装cuda版本的pytoch

1
2
3
4
5
6
7
8
9
# 早期版本
pip install torch==2.1.2+cu121 torchvision==0.16.2+cu121 torchaudio==2.1.2+cu121 --extra-index-url https://download.pytorch.org/whl/cu121

# 最新的128版本
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128 --force-reinstall --no-cache-dir
pip install onnxruntime-gpu --extra-index-url https://aiinfra.pkgs.visualstudio.com/PublicPackages/_packaging/onnxruntime-cuda-12/pypi/simple/


audio-separator data\owyE03YvRvQefwEvafrQBGg4jGfg_20260420_160334.wav --model_filename UVR-MDX-NET-Inst_HQ_3.onnx --model_file_dir model --output_format WAV

(2) .faster-whisper
直接使用 docker 版本的即可,需要确保docker可以使用GPU

1
2
3
4
5
6
7
8
9
10
# 强制清除并重新填充文件
yum reinstall -y libnvidia-container-tools libnvidia-container1 nvidia-container-toolkit

# 检查核心 CLI 工具是否存在
ls -l /usr/bin/nvidia-container-cli

# 检查工具包是否存在
ls -l /usr/bin/nvidia-container-toolkit
# 确保GPU能用
docker run --rm --gpus all nvidia/cuda:12.0.0-base-ubuntu22.04 nvidia-smi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
version: '3.8'

services:
faster-whisper:
image: onerahmet/openai-whisper-asr-webservice:latest-gpu
container_name: faster-whisper
ports:
- "8765:9000"
environment:
- ASR_MODEL=large-v3-turbo
- ASR_LANGUAGE=ja
- ASR_DEVICE=cuda
- ASR_ENGINE=faster_whisper
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
restart: unless-stopped

使用docker启动之后,可以浏览器 http://127.0.0.1:8765/docs#/Endpoints/asr_asr_post 进行识别测试。

1
2
3
4
5
6
docker stop faster-whisper
docker rm faster-whisper

docker compose -u up
# 查看日志
docker logs -f faster-whisper

注意
因为我的UOS 20 1020a 的英伟达驱动cuda 只有12.4,所以高版本的不能用,只能用低版本的,这也是我不断尝试之后的结果,本来想着要升级驱动版本,结果需要先升级内核版本。升级内核版本,又因为UOS不能升级,结果就变成了两头堵了,没办法只能先尝试降级faster-whisper的版本看看了。

1
docker run -d --gpus all -p 8765:9000 -e HF_ENDPOINT=https://hf-mirror.com -e WHISPER_MODEL=large-v3-turbo --name faster-whisper  onerahmet/openai-whisper-asr-webservice:v1.7.1-gpu
参考文章:
【1】.openai-whisper-asr-webservice 查找相应版本

6.浏览器插件

参考文章:
【1】.你的第一个扩展
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件(ititchuan@gmail.com)通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
ititchuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。