博客
关于我
用Python将音频内容转换为文本格式,方言可以吗?
阅读量:235 次
发布时间:2019-03-01

本文共 4161 字,大约阅读时间需要 13 分钟。

当对一个或多个人的谈话进行记录时,采用一种高度准确和自动化的方式将口语提取为文本非常有用。这使得后续的分析和功能利用更加便捷。以下将介绍如何使用 AssemblyAI(https://www.assemblyai.com/)的高精度语音转文本Web API从MP3录音中提取文本。

教程要求

本教程将使用以下依赖项。请确保您的环境中安装了Python 3,最好是3.6或更高版本:

  • requests 2.24.0 用于向 AssemblyAI 语音文本API发出HTTP请求
  • AssemblyAI 账户,您可以通过 (https://app.assemblyai.com/login/)注册免费的API访问密钥

搭建开发环境

转到保存Python虚拟环境的目录。我将我的目录保存在用户主目录下的venvs子目录中。使用以下命令为此项目创建一个新的virtualenv:

python3 -m venv ~/venvs/pytranscribe

用 shell 命令激活 virtualenv:

source ~/venvs/pytranscribe/bin/activate

执行上述命令后,命令提示符将发生更改,示例如下:

(pytranscribe) $

请记住,您必须在每个 virtualenv 中使用依赖项的新终端窗口中激活您的 virtualenv。

现在,我们可以将 requests 包安装到已激活但为空的 virtualenv 中:

pip install requests==2.24.0

安装完成后,我们已经准备好开始编码了。

上传、启动和转录音频

我们将编写三个文件来实现音频转文本功能:

  • upload_audio_file.py:将音频文件上传到 AssemblyAI 服务上的安全位置,以便进行处理。
  • initial_transcription.py:向 API 要转录并立即启动。
  • get_transcription.py:检查转录状态或在处理完成后显示转录结果。
  • 创建一个名为 pytranscribe 的新目录,进入该目录:

    mkdir pytranscribe && cd pytranscribe

    导出 API 密钥

    注册 AssemblyAI 帐户并登录 AssemblyAI 仪表板,复制“您的API token”。在终端中执行:

    export ASSEMBLYAI_KEY=your-api-key-here

    请确保在运行脚本的终端中将该标记导出,以保证 API 可访问。

    上传音频文件并进行转录

    创建 upload_audio_file.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"CDN_URL = "https://cdn.assemblyai.com/"def upload_file_to_api(filename):    if not os.path.exists(filename):        return None    headers = {'authorization': os.getenv("ASSEMBLYAI_KEY")}    response = requests.post(        f"{API_URL}upload",        headers=headers,        data=read_file(filename)    )    return response.json()def read_file(filename, chunk_size=5242880):    with open(filename, 'rb') as _file:        while True:            data = _file.read(chunk_size)            if not data:                break            yield dataif __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("filename")    args = parser.parse_args()    upload_filename = args.filename    response_json = upload_file_to_api(upload_filename)    if not response_json:        print("file does not exist")    else:        print(f"File uploaded to URL: {response_json['upload_url']}")

    运行脚本:

    python upload_audio_file.py /path/to/your/audio.mp3

    完成后,脚本会打印一条包含唯一URL的消息。保存该URL,以备下一步使用。

    启动转录

    创建 initial_transcription.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"CDN_URL = "https://cdn.assemblyai.com/"def initiate_transcription(file_id):    endpoint = f"{API_URL}transcript"    json_data = {"audio_url": f"{CDN_URL}upload/{file_id}"}    headers = {        "authorization": os.getenv("ASSEMBLYAI_KEY"),        "content-type": "application/json"    }    response = requests.post(endpoint, json=json_data, headers=headers)    return response.json()if __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("file_id")    args = parser.parse_args()    file_id = args.file_id    response_json = initiate_transcription(file_id)    print(response_json)

    运行脚本并传入上一步生成的文件标识符:

    python initial_transcription.py gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067

    API 会返回一个 JSON 响应,其中包含转录标识符。记住该标识符,以便下一步检索转录结果。

    检索转录结果

    创建 get_transcription.py 文件,并添加以下代码:

    import argparseimport osimport requestsAPI_URL = "https://api.assemblyai.com/v2/"def get_transcription(transcription_id):    endpoint = f"{API_URL}transcript/{transcription_id}"    headers = {"authorization": os.getenv("ASSEMBLYAI_KEY")}    response = requests.get(endpoint, headers=headers)    return response.json()if __name__ == "__main__":    parser = argparse.ArgumentParser()    parser.add_argument("transcription_id")    args = parser.parse_args()    transcription_id = args.transcription_id    response_json = get_transcription(transcription_id)    if response_json['status'] == "completed":        for word in response_json['words']:            print(word['text'], end=" ")    else:        print(f"current status of transcription request: {response_json['status']}")

    运行脚本并传入上一步生成的转录标识符:

    python get_transcription.py gkuu2krb1-8c7f-4fe3-bb69-6b14a2cac067

    如果转录完成,脚本会打印转录文本;否则,会打印当前状态。

    下一步是什么?

    我们已经完成了一些脚本,这些脚本调用 AssemblyAI API 将带有语音的录音转录为文本输出。您可以查阅文档(https://docs.assemblyai.com/overview/getting-started)来增加一些更高级功能:

    • 支持不同的文件格式
    • 转录双通道/立体声录音
    • 获取扬声器标签(扬声器隔离)

    转载地址:http://npgp.baihongyu.com/

    你可能感兴趣的文章
    Python在def函数中使用for循环
    查看>>
    Python在Conda环境中,但在Windows虚拟环境中没有激活
    查看>>
    python系列【仅供参考】:python pip 错误 ModuleNotFoundError: No module named pip._internal 解决办法
    查看>>
    python图像条状状噪声,使用PYTHON PIL从验证码图像中删除背景嘈杂的线条
    查看>>
    Python图像处理:从内存加载jpeg
    查看>>
    python固定后缀(名物化词汇)词频统计:抽取+统计+可视化
    查看>>
    python商品评论数据采集与分析可视化系统 Flask框架 requests爬虫 NLP情感分析 毕业设计 源码
    查看>>
    python商品数据分析可视化系统(带爬虫)京东销售数据分析 计算机毕业设计 源码下载
    查看>>
    python商品库存管理系统 django框架 商品网站 MySQL数据库 源码下载 计算机毕业设计
    查看>>
    Python哪个版本最稳定好用2023.10.19
    查看>>
    Python和黑客技术的渊源
    查看>>
    Python和RF编写接口自动化
    查看>>
    Python和RF编写web自动化
    查看>>
    python和js哪个难_【Python】记一次学习,Python 与 js 在实现闭包时的差异
    查看>>
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>