科大讯飞中文+日语语音听写(流式版)

需求:记录会议的内容,将会议的语音(中文和日文)转为文字字幕并显示在电脑屏幕上。

1.实现效果

在这里插入图片描述

1.1日语效果

在这里插入图片描述
在这里插入图片描述

2.2中文效果

在这里插入图片描述
在这里插入图片描述

2.具体实现

讯飞语音中文实现很简单,登录讯飞开发者平台,创建应用,下载对应的demo就行了,照着文档弄,很简单。

所以我的重点都是日语语音听写(流式版)的实现。

需要提前说明的是讯飞小语种只有语音听写(流式版)支持,且需要提前开通。
在这里插入图片描述

1.捕捉麦克风语音输入并保存为.wav文件

通过pyaudio捕捉麦克风的语音输入

pip install pyaudio
pa = pyaudio.PyAudio()
stream = pa.open(format=FORMAT,
                     channels=CHANNELS,
                     rate=RATE,
                     input=True,
                     start=False,
                     # input_device_index=2,
                     frames_per_buffer=CHUNK_SIZE)

保存为.wav文件

def record_to_file(path, data, sample_width):
    "Records from the microphone and outputs the resulting data to 'path'"
    # sample_width, data = record()
    data = pack('<' + ('h' * len(data)), *data)
    wf = wave.open(path, 'wb')
    wf.setnchannels(1)
    wf.setsampwidth(sample_width)
    wf.setframerate(RATE)
    wf.writeframes(data)
    wf.close()
record_to_file("recording.wav", raw_data, 2)
2.进行VAD(Voice Activity Detection)检测

讯飞的小语种识别真的巨坑,它的文档中有个参数vad_eos
在这里插入图片描述
这个参数的作用:
在默认vad_eos=2000的情况下,比如我说”你好”后停顿1s,再说”早上好”,它认为音频没结束,返回最终结果“你好,早上好”,但是我说”你好”后停顿3s,再说”早上好”,在”你好”后面的2s里音频没有内容,它认为音频已经结束,返回最终结果”你好”。

但是这个参数在中文条件下才有效,小语种条件下根本不生效。(它的文档里也没写,我问讯飞的技术支持才知道的)
在这里插入图片描述

造成的现象:
中文识别没有任何的问题,小语种识别一直在录音,讯飞不会返回任何结果,直到60s后超时返回报错超时.

所以要在客户端主动的实现VAD(Voice Activity Detection)效果.

之前我的代码都是java写的,但是在github上发现java并没有什么好的vad检测的库,最后全部代码换成了python,找到了一个python的vad检测的库。

参考代码:https://github.com/wangshub/python-vad

注意:

但是这个vad库检测的时候也有个坑,安装pip install webrtcvad的时候报错Microsoft Visual C++ 14.0 is required,解决方法是安装Microsoft Visual C++ 14.0及配置好环境

具体参考博客:Windows系统pip install webrtcvad

3.下载官网python版语音听写demo

官网的语音听写demo很简单,替换掉你自己的服务接口认证信息就能跑起来。
在这里插入图片描述

注意3点:

  1. 方言语种开通日语
  2. 小语种url和中英文不同
    在这里插入图片描述
    3.传参时language是ja_jp
    在这里插入图片描述
4.字幕显示

将上面的步骤整合后就能识别到日语了。但还要在window桌面上显示出来还要用到pyqt5.

字幕UI参考: https://github.com/wingood-xu/suspendLyric

PyQt5中文教程:PyQt5中文教程

5.将Python程序打包为exe

一切都弄好后,还要将程序打包为exe.(不可能别人还要装python运行你的程序吧),我这里使用的是pyinstaller打包为exe.

pip install pyinstaller
pyinstaller -F -w  你的执行文件.py

tip:

  1. -w 代表不显示控制台,如果程序运行报错,建议去掉-w,会有一个一闪而过的控制台带有报错的信息,把握时间,截到这个报错信息,粘贴到word内具体分析错误。
  2. 打包的时候不要在全局python环境内打包,不然会把你没用到的包也打包进去,导致包很大。应该在venv环境下打包
  3. pyinstaller打包python时含有多进程代码会出现bug:在pycharm下运行只有两个进程,打包后运行可能有了3个进程。
    解决方法:http://redino.net/blog/2016/04/multiprocessing-frozen-python/
    if __name__ == '__main__':后面添加此行代码:multiprocessing.freeze_support()

3.其它

生成requirements.txt:

pip freeze > requirements.txt

requirements.txt的安装:

pip install -r requirements.txt

使用pipreqs生成requirements.txt:
python 保存项目用到的包名生成requirements.txt
这种方式生成的requirements.txt里面只含你用到的package.

python日志处理:python 日志 logging模块(详细解析)

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Selenium399

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值