前言
前段时间碰到个英文面试,结果差点因为听不懂美式发音的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 = 2print(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 = fsprint(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/
似乎谷歌翻译挂了。。。先关博客
windows
windows 研究了一下发现和mac的区别是不需要装什么额外的虚拟声卡。
开始-运行-输入mmsys.cpl 录制-右键立体混音-启用 然后在脚本里选择立体混音对应的设备编号即可。
更多语言支持
实际上这个工具也可以在你看外语视频的时候实时翻译,所以————
加上VOSK的日语库就能翻译日语了呢。。。。。