前言
前段时间碰到个英文面试,结果差点因为听不懂美式发音的python(派送)而GG了。。。我一直说的都是"派森"。。。所以就有个想法,英文电话会议的时候是不是可以做一个实时翻译的小工具,这样就可以给我这样的口语渣渣多点提示了。
So,让我们开始吧
第一步 语音识别ASR
测试了百度和AWS的语音识别效果,都还行,就是都要钱,而我的目标是给所有小伙伴免费用,所以怎么能收费呢————因此转进免费ASR库VOSK,它是用离线的模型计算的,准确性是不如在线API的,但是好在不要钱。参考地址
第二步 免费的翻译接口~
这个也是有各种API存在的,不过和前面一样的问题,折腾了几次最后决定用谷歌的免费API,每小时1000次请求,感觉也差不多刚好够用。也碰到了一些问题。好在最后搞定了。
第三步 音频录制
最后发现这个才是最难的地方。。。尤其是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转成了一个输出。增加完之后需要右键将这个设备设置成输出设备。
测试代码
import sounddevice as sd
import scipy.io.wavfile
SAMPLE_RATE = 48000
SECONDS = 10
MONO = 1
STEREO = 2
print(sd.query_devices())
sd.default.device[0] = 0
fs = 48000
sd.default.samplerate = fs
print(f'Recording for {SECONDS} seconds')
recording = sd.rec(int(SECONDS * SAMPLE_RATE), samplerate=SAMPLE_RATE, channels=MONO)
sd.wait()
print("done recording")
scipy.io.wavfile.write("test3.wav", SAMPLE_RATE, recording, )
代码整合
最后的成品项目地址:https://github.com/MemoryAndDream/freeRealtimeTranslation/
|