Python实现离线音频转文字(时间分隔+区分说话人)

Python实现离线音频转文字(时间分隔+区分说话人)


前言

  • 前阵子因工作原因,需要将一些录音文件转为文字,方便后续记录和摘要。在尝试付费使用了一些成熟的语音识别转写APP后,偶然发现讯飞开放平台有5小时免费时长可领取使用。
  • 虽是免费,但是需要自己编写代码进行使用,于是参考了官网的API使用说明,自己实现了一个python版本的离线音频转写,默认支持普通话和英语。

领取转写时长

  • 浏览器打开讯飞开放平台首页:https://www.xfyun.cn/,点击“语音识别”→“语音转写”,进入语音转写模块页面。
  • 完成新用户的注册登录认证后,即可领取免费时长。
  • **注意:**因为我们要实现的是离线音频上传后转写为文字,所以领取免费时长时领的是“语音转写”,而不是“语音听写”。

创建个人应用

  • 注册登录并领取免费时长后,右上角点击“控制台”,进入控制台页面,并创建一个新应用。
  • 5.png-116.5kB
  • 创建应用后,进入应用管理页面,点击“语音转写”模块,获取APPID和密钥,后面代码运行要用到这两个参数。
  • 6.png-287.9kB

运行Python代码

运行环境

  • Python3.7
  • 需要特别注意的依赖库:requests==2.21.0

解决思路

  • 参考讯飞开放平台上的接口说明和使用demo,输入APPID和密钥后,可访问对应的语音转写接口API,得到转写后的文字数据。
  • 返回数据中包括每一句话的起始点、结束点、说话人、文字内容,所需要做的是对返回的JSON格式数据进行相应的读取,转为可读性高的文本文件。
  • 笔者代码中所做到的,一个是将整段的文本保存下来,不做时间分隔以及说话人区分,便于单人单段演讲或讲话的录音文件转写;另一个是做了时间分隔和说话人区分的版本,便于多人会议或讨论的录音文件转写。
  • 7.png-4.3kB
  • 时间分隔的算法思路是,记录上一句话的结束点,如果与当前这一句话的起始点重合(精确到毫秒),说明这两句话是紧密衔接着的,可以拼接在一起。于是设置一个缓冲区存放当前拼接着的文本,如果上下两句不衔接,则将缓冲区内容写入文件,刷新缓冲区,放入当前句子的文本内容。遍历平台返回数据的每一句话,不断更新和写入缓冲区,便实现了整段音频做了时间分隔并写入文件。
  • 两种转写方式的文本均有保存到代码同目录下,保存格式为txt文件。以下为时间分分割版本的截图:
  • 8.png-33.2kB

修改参数

  • 运行代码时,需修改相关参数为自己创建的应用的APPID和密钥,以及想要转写的录音文件路径。
  • 9.png-32.7kB

代码下载

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Python离线语音文字可以使用SpeechRecognition库来实现。SpeechRecognition是一个开源的Python库,它提供了一种简单方便的方式来处理语音识别任务。 首先,你需要安装SpeechRecognition库。可以使用pip命令来安装,在命令行中输入以下命令: ``` pip install SpeechRecognition ``` 安装完成后,你需要下载和安装一个语音识别引擎。SpeechRecognition库支持多个引擎,包括CMU Sphinx、Google Web Speech API、Google Cloud Speech API等。你可以根据自己的需求选择一个合适的引擎,并按照它的安装指南进行安装。 下面是一个使用CMU Sphinx引擎实现离线语音文字的示例代码: ```python import speech_recognition as sr # 创建一个Recognizer对象 r = sr.Recognizer() # 使用Microphone类来访问麦克风 with sr.Microphone() as source: print("请开始说话:") audio = r.listen(source) # 获取用户输入的音频数据 try: text = r.recognize_sphinx(audio, language='zh-CN') # 使用CMU Sphinx引擎将音频换为文本 print("识别结果:", text) except sr.UnknownValueError: print("语音识别失败") except sr.RequestError as e: print("请求出错:", str(e)) ``` 在上述代码中,我们创建了一个Recognizer对象,然后使用with语句和Microphone类来访问麦克风并获取用户输入的音频数据。之后,我们调用recognize_sphinx方法来使用CMU Sphinx引擎将音频换为文本,并打印出识别结果。 请注意,这只是一个简单的示例,具体的实现方式可能会因为使用的引擎不同而有所差异。你可以根据自己的需求进一步调整代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

霍姆格雷特

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

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

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

打赏作者

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

抵扣说明:

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

余额充值