阅读本简介教程后,您将更好地了解如何使用语音到文本提供商Async IO转录播客剧集列表,并与Python一起循环。要查看完整的代码示例,请向下滚动到本文的底部。否则,让我们逐步走进您将完成的工作。
与Python的asyncio
库一起工作可能很棘手,但是在一些指导下,它的痛苦比人们想象的要少。在Deepgram的语音到文本Python SDK的帮助下,我们可以循环浏览所有播客剧集,并使用我们的预先记录的转录转录它们。
在进行任何AI语音识别之前,您可能会想知道为什么我们可能需要使用异步IO和那些讨厌的async/await
Python关键字。
在下一部分中,我们会发现使用Python的异步IO以及异步和同步代码之间的差异。
Python中异步和同步代码的高级概述
同步或异步运行代码是两个不同的编程概念,这些概念很重要,尤其是在异步IO方面。任务是异步还是同步取决于程序中如何以及何时执行任务。要理解每种方法,请在高级别上稍作潜水。
我们可以将同步编程视为顺序运行的离散任务:逐步,一个接一个。任务没有重叠,因此它们是顺序运行的。想象一下,我们正在烤蛋糕,我们按照食谱说明进行了说明。将按顺序执行以下步骤,而不会跳过一步或向前跳下:
- 将烤箱预热至350度
- 在一个大碗中混合面粉,发酵粉和盐
- 在碗中打黄油和糖
- 加入鸡蛋
- 添加香草提取物
- 混合所有成分
- 将蛋糕面糊倒入平底锅或弹簧模具
- 烤蛋糕30分钟直到金黄色
使用异步编程,我们可以想象我们可以同时执行多任务或执行多个任务,而不是顺序做事。
按照上面的同一示例,这是异步蛋糕烘烤的样子,逐步:
- 将烤箱预热至350度
- 烤箱预热,在一个大碗中混合面粉,发酵粉和盐,然后在碗中搅拌黄油和糖
- 加入鸡蛋并加入香草提取物
- 混合所有成分
- 将蛋糕面糊倒入平底锅或弹簧模具
- 烤蛋糕30分钟直到金黄色
正如我们所看到的,在步骤2和3中,您一次执行多个任务。您可能已经听过编程中的“并发”一词。这是Python中异步编程的基础,这意味着该任务可以以重叠的方式运行(例如“同时”,或与另一个任务一起进行“并行”)。
您可能还注意到,异步编程食谱示例中的步骤少于同步程序。由于您可以同时运行多个任务,因此同步代码通常运行速度要比同步对应物快。
这是异步IO溅入图片的地方。我们使用asyncio
python库在我们的异步代码中使用async/await
语法编写并发代码。
在下一部分中,让我们深入研究代码,以使用带有Python的asyncio
库通过播客列表进行循环。您将看到如何使用语音到文本AI提供商来抄写每个情节,并对async/await
Python关键字有更清晰的了解。
使用python和语音到文本转录播客音频
这是如何使用Deepgram转录我们的预录的音频文件的方法。 Deepgram是一个语音识别提供商,可以从实时流源转录音频或通过批量处理一个或多个预录制文件。播客通常以预录的音频文件分发,因此我们将继续进行。
首先,我们需要在这里抓住一个Deepgram API Key来使用我们的Python SDK。它非常容易注册和创建。您可以使用Google,github或您的电子邮件登录。
一旦我们拥有API密钥,就可以打开我们最喜欢的代码编辑器之一。这可能是视觉工作室代码,Pycharm或其他类似的东西。
接下来,我们继续制作一个名为transcribe-audio-files
的目录。我们将从播客中转录体育演讲,因此创建一个名为transcribe_speeches.py
的Python文件。
让我们在项目中创建一个名为speeches
的文件夹,我们将在这里放置音频mp3文件。 (注意:MP3是播客的传统音频格式。深集可与100多种不同的音频编解码器和文件格式一起使用。)
还建议我们使用该项目创建一个虚拟环境,因此我们的python依赖性仅用于该环境而不是全球。 (但是请放心:这比要求更像是“最佳实践”。您做。)
我们需要安装Deepgram语音到文本Python软件包。为此,请与pip
一起安装它:
pip install deepgram-sdk
现在看一下代码。
带有异步IO关键字的Python代码(异步/等待)
使用以下代码并将其放入Python代码文件中:
from deepgram import Deepgram
import asyncio, json
import os
DEEPGRAM_API_KEY="YOUR_DEEPGRAM_API_KEY"
async def get_audio_files():
path_of_the_speeches = 'speeches'
for filename in os.listdir(path_of_the_speeches):
audio_file = os.path.join(path_of_the_speeches,filename)
if os.path.isfile(audio_file):
await main(audio_file)
return audio_file
async def main(file):
print(f"Speech Name: {file}")
# Initializes the Deepgram SDK
deepgram = Deepgram(DEEPGRAM_API_KEY)
# Open the audio file
with open(file, 'rb') as audio:
# ...or replace mimetype as appropriate
source = {'buffer': audio, 'mimetype': 'audio/mp3'}
response = await deepgram.transcription.prerecorded(source, {'punctuate': True})
print(json.dumps(response, indent=4))
asyncio.run(get_audio_files())
使用异步IO关键字(异步/等待)的Python代码和解释
让我们逐步浏览代码以了解发生了什么。
在这里,我们正在导入深集,因此我们可以使用其Python SDK。我们还将导入asyncio
和json
。我们需要asyncio
来利用异步IO和JSON,因为稍后在代码中,我们将使用JSON.DUMPS将Python对象转换为JSON。
from deepgram import Deepgram
import asyncio, json
import os
接下来,我们将我们先前创建的深集键并用您的API键替换占位符文本,your_deepgram_api_key。
DEEPGRAM_API_KEY="YOUR_DEEPGRAM_API_KEY"
例如,如果您的API密钥是ABCDEFG1234,则您的代码应该看起来像:
DEEPGRAM_API_KEY="abcdefg1234"
在下面的Python代码段中,我们只是在语音文件夹中浏览音频文件并将其传递到主函数,以便可以转录它们。在此处注意异步/等待关键字的使用。
p>
async def get_audio_files():
path_of_the_speeches = 'speeches'
for filename in os.listdir(path_of_the_speeches):
audio_file = os.path.join(path_of_the_speeches,filename)
if os.path.isfile(audio_file):
await main(audio_file)
return audio_file
要使python中的函数异步,我们需要在函数定义中添加异步。因此,我们使用async def get_audio_files()
而不是同步的def get_audio_files()
。
每当我们使用异步Python关键字时,如果我们在内部调用另一个功能,我们也会使用等待。在Code await main(audio_file)
的这一行中,我们说调用主函数并传递到音频文件中。等待的告诉我们要停止执行函数get_audio_files
并等待主函数做任何事情,但是与此同时,程序可以做其他事情。
p>
async def main(file):
print(f"Speech Name: {file}")
# Initializes the Deepgram SDK
deepgram = Deepgram(DEEPGRAM_API_KEY)
# Open the audio file
with open(file, 'rb') as audio:
# ...or replace mimetype as appropriate
source = {'buffer': audio, 'mimetype': 'audio/mp3'}
response = await deepgram.transcription.prerecorded(source, {'punctuate': True})
print(json.dumps(response, indent=4))
asyncio.run(get_audio_files())
现在到语音到文本的python转录。我们初始化了深集并传递API键。
然后,我们以音频打开每个文件,并在此行with open(file, 'rb') as audio
中的字节中读取。我们创建了一个称为源的Python词典,将缓冲区存储为音频和MimeType作为audio/mp3
。
接下来,我们在此行response = await deepgram.transcription.prerecorded(source, {'punctuate': True})
上进行实际预录的转录。我们通过源和punctuate:True
参数,该参数将在成绩单中提供标点符号。
现在,我们可以打印出响应,以便我们可以接收我们的成绩单print(json.dumps(response, indent=4))
。
最后,我们使用asyncio.run(get_audio_files())
运行程序。
结论
希望,您可以更好地理解使用语音到文本转录音频,并使用与Python一起使用async io通过播客列表循环。如果您有任何疑问或需要一些帮助,请随时在我们的Github讨论页面上与我们联系。
完整的Python代码示例通过播客剧集
from deepgram import Deepgram
import asyncio, json
import os
DEEPGRAM_API_KEY="YOUR_DEEPGRAM_API_KEY"
async def get_audio_files():
path_of_the_speeches = 'speeches'
for filename in os.listdir(path_of_the_speeches):
audio_file = os.path.join(path_of_the_speeches,filename)
if os.path.isfile(audio_file):
await main(audio_file)
return audio_file
async def main(file):
print(f"Speech Name: {file}")
# Initializes the Deepgram SDK
deepgram = Deepgram(DEEPGRAM_API_KEY)
# Open the audio file
with open(file, 'rb') as audio:
# ...or replace mimetype as appropriate
source = {'buffer': audio, 'mimetype': 'audio/mp3'}
response = await deepgram.transcription.prerecorded(source, {'punctuate': True})
print(json.dumps(response, indent=4))
asyncio.run(get_audio_files())