本文共 4231 字,大约阅读时间需要 14 分钟。
当对一个或多个人的谈话进行记录时,采用一种高度准确和自动化的方式将口语提取为文本非常有用。这使得后续的分析和功能利用更加便捷。以下将介绍如何使用 AssemblyAI(https://www.assemblyai.com/)的高精度语音转文本Web API从MP3录音中提取文本。
本教程将使用以下依赖项。请确保您的环境中安装了Python 3,最好是3.6或更高版本:
转到保存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
注册 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/