如何使用python使用async io循环浏览播客列表
#python #speechtotext #transcription #asyncio

阅读本简介教程后,您将更好地了解如何使用语音到文本提供商Async IO转录播客剧集列表,并与Python一起循环。要查看完整的代码示例,请向下滚动到本文的底部。否则,让我们逐步走进您将完成的工作。

与Python的asyncio库一起工作可能很棘手,但是在一些指导下,它的痛苦比人们想象的要少。在Deepgram的语音到文本Python SDK的帮助下,我们可以循环浏览所有播客剧集,并使用我们的预先记录的转录转录它们。

在进行任何AI语音识别之前,您可能会想知道为什么我们可能需要使用异步IO和那些讨厌的async/await Python关键字。

在下一部分中,我们会发现使用Python的异步IO以及异步和同步代码之间的差异。

Python中异步和同步代码的高级概述

同步或异步运行代码是两个不同的编程概念,这些概念很重要,尤其是在异步IO方面。任务是异步还是同步取决于程序中如何以及何时执行任务。要理解每种方法,请在高级别上稍作潜水。

我们可以将同步编程视为顺序运行的离散任务:逐步,一个接一个。任务没有重叠,因此它们是顺序运行的。想象一下,我们正在烤蛋糕,我们按照食谱说明进行了说明。将按顺序执行以下步骤,而不会跳过一步或向前跳下:

  1. 将烤箱预热至350度
  2. 在一个大碗中混合面粉,发酵粉和盐
  3. 在碗中打黄油和糖
  4. 加入鸡蛋
  5. 添加香草提取物
  6. 混合所有成分
  7. 将蛋糕面糊倒入平底锅或弹簧模具
  8. 烤蛋糕30分钟直到金黄色

使用异步编程,我们可以想象我们可以同时执行多任务或执行多个任务,而不是顺序做事。

按照上面的同一示例,这是异步蛋糕烘烤的样子,逐步:

  1. 将烤箱预热至350度
  2. 烤箱预热,在一个大碗中混合面粉,发酵粉和盐,然后在碗中搅拌黄油和糖
  3. 加入鸡蛋并加入香草提取物
  4. 混合所有成分
  5. 将蛋糕面糊倒入平底锅或弹簧模具
  6. 烤蛋糕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。我们还将导入asynciojson。我们需要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代码段中,我们只是在语音文件夹中浏览音频文件并将其传递到主函数,以便可以转录它们。在此处注意异步/等待关键字的使用。

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并等待主函数做任何事情,但是与此同时,程序可以做其他事情。


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())