python实现免费同声传译 (离线语音识别+免费翻译接口+系统声音录制)

前言

前段时间碰到个英文面试,结果差点因为听不懂美式发音的python(派送)而GG了。。。我一直说的都是"派森"。。。所以就有个想法,英文电话会议的时候是不是可以做一个实时翻译的小工具,这样就可以给我这样的口语渣渣多点提示了。

So,让我们开始吧

第一步 语音识别ASR

测试了百度和AWS的语音识别效果,都还行,就是都要钱,而我的目标是给所有小伙伴免费用,所以怎么能收费呢————因此转进免费ASR库VOSK,它是用离线的模型计算的,准确性是不如在线API的,但是好在不要钱。参考地址

第二步 免费的翻译接口~

这个也是有各种API存在的,不过和前面一样的问题,折腾了几次最后决定用谷歌的免费API,每小时1000次请求,感觉也差不多刚好够用。也碰到了一些问题。好在最后搞定了。

2023.4.21更新:
谷歌关闭了cn节点,虽然可以通过修改hosts连接,但是感觉也不稳定。建议换成其他翻译sdk,比如百度翻译

第三步 音频录制

最后发现这个才是最难的地方。。。尤其是mac平台
MAC

安装pyaudio:
1

brew install portaudio
pip3 install pyaudio

用brew按照portaudio时我报了个 Error: pkg-config: wrong number of arguments (given 1, expected 0) 错误,用brew update-reset修复了

2 安装虚拟声卡blakhole 这东西的作用是把系统声音做成一个输入。而pyaudio只能抓输入。

brew install blackhole-2ch

3 设置MIDI
mac应用中搜索midi设置
新增一个多输出设备,选择blackhole和你的耳机或者扬声器。这样声音就会既被你听到,又被blackhole转成了一个输出。增加完之后需要右键将这个设备设置成输出设备。

在这里插入图片描述

测试代码

# -*- coding: utf-8 -*-
# @date    : 2022/3/1 2:52 下午
# @author  : meng_zhihao
# @email   : 312141830@qq.com
import sounddevice as sd
import scipy.io.wavfile

# Recording properties
SAMPLE_RATE = 48000
SECONDS = 10

# Channels
MONO = 1
STEREO = 2

print(sd.query_devices())  # 打印设备列表 这里的输出设备会显示为>xxx
# Command to get all devices listed: py -m sounddevice
# Device you want to record
# sd.default.device = "外置麦克风"
# 貌似mac有坑
sd.default.device[0] = 0  # 我的BlackHole是第0个设备,所以这里sd.default.device[0] = n, n选择0
fs = 48000
sd.default.samplerate = fs

print(f'Recording for {SECONDS} seconds')

# Starts recording
recording = sd.rec(int(SECONDS * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=MONO)
sd.wait()  # Waits for recording to finish
print("done recording")
scipy.io.wavfile.write("test3.wav", SAMPLE_RATE, recording, )  # 貌似文件名不能重

代码整合

最后的成品项目地址:https://github.com/MemoryAndDream/freeRealtimeTranslation/

似乎国内连谷歌翻译挂了。。。这个我也没办法,可以考虑改成国内的翻译SDK

windows

windows 研究了一下发现和mac的区别是不需要装什么额外的虚拟声卡。
开始-运行-输入mmsys.cpl 录制-右键立体混音-启用 然后在脚本里选择立体混音对应的设备编号即可。

更多语言支持

实际上这个工具也可以在你看外语视频的时候实时翻译,所以————
加上VOSK的日语库就能翻译日语了呢。。。。。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值