在这个虚拟会议层出不穷的数字时代,我们看到大量的虚拟会议被记录下来以备将来之用。这些记录有很多用途,包括与无法参加现场会议的人分享,分发用作培训,以及保留备份供将来参考。然而,这些记录的一个方面被认为是理所当然的,那就是可及性。在这篇博客中,我们将演示如何从你的Dolby.io通信会议中获取录音,并使用Deepgram将其转录为文本。
拥有会议录音的文本副本是提供消化信息的其他方式的一个好方法。有些人的阅读速度比他们听口语快。有些人的第一语言可能与会议中的语言不一样,读起来更舒服。其他人可能有听力障碍,更喜欢阅读,以获得最大的舒适度。不管是什么原因,我们想让转录生成过程简单化,自动化。在这里,我们将使用Dolby.io通信REST APIs与Deepgram的预录音频API在Python中作为一个例子,说明如何生成这个过程,在理想情况下,这可以用你选择的工具重新创建。
安装库
在我们开始编码之前,我们需要确保我们有所有适当的库来调用这些API。我们可以用一个简单的pip命令来完成这个任务(为你的操作系统使用适当的pip命令)。
pip3 install asyncio deepgram-sdk dolbyio-rest-apis
这将安装Dolby.io和Deepgram SDK,以及Python的本地异步函数库,以帮助我们调用这两个SDK使用的异步请求。
如果你还没有注册一个免费的Dolby.io和Deepgram账户,获得你的API凭证也是一个好主意。
获得API令牌
为了使用Dolby.io通信REST APIs,我们需要首先生成一个临时访问令牌。这是为了防止您的永久账户凭证被意外泄露,因为该令牌会自动过期。
要了解更多这方面的信息,请阅读文档。
在这种情况下,我们要用我们的通信API(不是媒体)的凭证来填写消费者密钥和秘密。然后我们在一个函数中调用get_api_access_token 端点,这样我们就可以在每次调用时生成一个新的令牌。这不是最安全的处理方式,但将确保我们不会遇到任何过期的凭证。要了解更多信息,请参阅Dolby.io安全最佳实践指南。
from dolbyio_rest_apis.communications import authentication
import asyncio
# Input your Dolby.io Communications Credentials here
CONSUMER_KEY = ""
CONSUMER_SECRET = ""
# Create a function that will generate a new api access token when needed
async def gen_token():
response = await authentication.get_api_access_token(CONSUMER_KEY, CONSUMER_SECRET)
return response['access_token']
print(f"Access Token: {await gen_token()}")
获得会议ID
现在我们可以调用Dolby.io的API了,我们首先要获得我们要转录的录音的内部会议ID。我们可以通过简单地用我们的令牌调用get_conferences 端点来实现这一目的。
from dolbyio_rest_apis.communications.monitor import conferences
response = await conferences.get_conferences(await gen_token())
# Save the most recent conference. Change '-1' to whichever conference you want.
confId = response['conferences'][-1]['confId']
print(confId)
请注意,在这个代码示例中,我们使用的是参数:['conferences'][-1]['confId'] 。这将只提取列表中最近的会议,如"-1 "数组值所示。如果你要自动处理每一个新产生的会议,这可能不是一个问题。但是,如果你想对一个特定的会议进行处理,我们建议使用get_conferences端点中的可选参数来获得所需的会议ID。
获取录音
有了会议ID,我们现在可以调用一个端点来生成一个包含我们会议音频文件的URL。在这个代码示例中,我们使用的是杜比语音会议,所以我们将使用端点来获取杜比语音的音频记录。如果你知道你没有使用杜比语音,你可以使用这个端点代替。请注意,我们只获取会议的音轨,而不是同时获取音频和视频。这是为了与转录软件的最大文件兼容性。请注意,产生的URL也是临时的,一段时间后就会失效。
from dolbyio_rest_apis.communications.monitor import recordings
# Save only the mp3 file and return as a URL.
# If your conference does not use Dolby Voice, use 'download_mp3_recording' instead.
# https://github.com/dolbyio-samples/dolbyio-rest-apis-client-python/blob/main/client/src/dolbyio_rest_apis/communications/monitor/recordings.py
response = await recordings.get_dolby_voice_recordings(await gen_token(), confId)
recording_url = response['url']
print(recording_url)
为了帮助说明,这里有一个为上述代码产生的转录而制作的会议录音实例。链接
用Deepgram进行转录
虽然Deepgram确实可以使用本地文件,但预设的录音URL为我们节省了许多步骤,避免了需要下载和上传文件到安全服务器的麻烦。有了这个URL,我们可以跳过这些步骤,直接将URL插入到下面的代码中,这些代码改编自他们的Python入门指南。所提供的代码只使用了标点符号功能,但可以很容易地用Deepgram提供的各种功能来扩展。
from deepgram import Deepgram
# Your Deepgram API Key
DEEPGRAM_API_KEY = ''
# Location of the file you want to transcribe. Should include filename and extension.
FILE = recording_url
async def main():
# Initialize the Deepgram SDK
deepgram = Deepgram(DEEPGRAM_API_KEY)
# file is remote
# Set the source
source = {
'url': FILE
}
# Send the audio to Deepgram and get the response
response = await asyncio.create_task(
deepgram.transcription.prerecorded(
source,
{
'punctuate': True
}
)
)
# Write only the transcript to the console
print(response['results']['channels'][0]['alternatives'][0]['transcript'])
try:
await main()
# If not running in a Jupyter notebook, run main with this line instead:
# asyncio.run(main())
except Exception as e:
exception_type, exception_object, exception_traceback = sys.exc_info()
line_number = exception_traceback.tb_lineno
print(f'line {line_number}: {exception_type} - {e}')
Deepgram的响应提供了许多与我们的讲话有关的数据点,但为了只提取文件的转录,我们正在调用['results']['channels'][0]['alternatives'][0]['transcript'] 。请随意修改响应,以生成与你的需求最相关的东西。对于上述提供的样本,转录的结果如下。
以下文字是羊皮纸独立宣言的转写。该文件在rot国家档案博物馆展出。拼写和标点符号反映了原件的内容。
接下来的步骤
这是关于如何开始转录你的会议录音的一个非常基本的尝试。我们强烈建议你投入一些时间来扩展它,以适应你的具体使用情况,使你从使用这些工具中获得最大的利益。
如前所述,我们建议看一下Deepgram提供的额外功能,你可以在转录过程中加入这些功能。比如说。
示例录音的转录并不完美。这有很多原因,包括不完善的录音环境,混乱的语音模式,以及压缩等例子。为了帮助给转录算法一个更好的机会,一个选择可以是使用Dolby.io媒体增强API,试图在将音频发送到转录之前清理一下。
如果你想在每次录音结束后自动生成转录,我们可以利用webhooks来为你消除人工干预。事实上,Recording.Audio.Available事件在事件本身中提供了录音的URL,减少了获得它所需的步骤。
最后一个想法是,如果你由于某种原因只准备好了视频文件,你可以使用Dolby.ioMedia Transcode API将视频文件转换成转录服务所接受的格式。
你可以在这个GitHub资源库中找到存储在Jupyter笔记本中的源代码文件。祝你编码成功!