文章目录
近年来,随着语音识别技术的进步和应用场景的增多,越来越多的开发者希望将自动化录音识别功能集成到自己的项目中。阿里云录音识别 API(Paraformer)是一款功能强大、精度高的服务,能够帮助开发者轻松实现录音转文字、语音分析等需求。本文将从 API 调用到实际项目集成,详细介绍阿里云录音识别的使用方法。
一、前提准备
1. 阿里云账号
确保拥有阿里云账号,若没有,可以在 阿里云官网注册。需要完成实名认证,确保可以访问 API 服务。
2. 开通录音识别服务
在阿里云控制台搜索“录音识别”或“SenceVoice”,找到相关服务,并根据项目需求选择合适的计费方式。
3. 获取 API Key 和 Access Token
访问阿里云的 访问控制管理(RAM),创建一个用户或角色以生成 Access Key ID
和 Access Key Secret
。这是访问 API 的必要凭证。
二、阿里云录音识别 API 的主要功能介绍
阿里云录音识别 API 提供了丰富的语音处理能力,主要功能包括:
- 实时识别:对实时音频流进行识别,适用于实时对话场景。
- 文件识别:上传音频文件,并将其转换为文本,适用于电话录音、会议记录等场景。
- 语音增强:优化音频质量,减少背景噪音。
我们本文将重点介绍“文件识别”功能,使用阿里云录音识别 API 将上传的音频文件转换成文字。
三、完整代码流程
1. 导入依赖库
from http import HTTPStatus
import dashscope
import json
import requests
import pandas as pd
import os
2. 设置环境变量
// 替换为实际的 Access Key ID 和 Access Key Secret
String accessKeyId = "your-access-key-id";
String accessKeySecret = "your-access-key-secret";
3. 生成 Token
阿里云 API 请求需要 Access Key
和 Access Token
认证。为了保证请求的安全性,建议将生成的 Token 存储在安全的环境中,避免硬编码。
// 使用阿里云 SDK 或手动生成 Token,请参阅官方文档。
# 如您未将API Key配置到环境变量中,可带上下面这行代码并将your-dashscope-api-key替换成您自己的API Key
dashscope.api_key =
获取APIkey:
阿里apikey获取
4. 上传文件并发起识别请求
我们可以通过 API 将音频文件上传到阿里云的服务器并请求识别。以 HTTP POST 请求的方式上传音频文件,API 会返回任务 ID,用于获取识别结果。
文件转写是异步任务,开发者可以通过HTTP提交接口提交任务,并且在循环中通过查询接口确认任务状态。在文件转写完成后获得语音识别结果。
4.1 请求
curl -X POST \
-H 'Authorization: Bearer {api-key}' \
-H 'Content-Type: application/json' \
-H 'X-DashScope-Async: enable' \
-d '{"model":"paraformer-v2","input":{"file_urls":["https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav"]},"parameters":{"channel_id":[0],"language_hints":["zh", "en"]}}' \
https://dashscope.aliyuncs.com/api/v1/services/audio/asr/transcription
返回
{
"output": {
"task_status": "PENDING",
"task_id": "c2e5d63b-96e1-4607-bb91-************"
},
"request_id": "77ae55ae-be17-97b8-9942--************""
}
4.2 请将’{api-key}‘替换为你的apikey,’{task_id}'为提交任务成功后获得的task_id。
curl -X POST -i 'https://dashscope.aliyuncs.com/api/v1/tasks/{task_id}' --header 'Authorization: Bearer {api-key}'
返回
{
"request_id": "f9e1afad-94d3-997e-a83b-************",
"output": {
"task_id": "f86ec806-4d73-485f-a24f-************",
"task_status": "SUCCEEDED",
"submit_time": "2024-09-12 15:11:40.041",
"scheduled_time": "2024-09-12 15:11:40.071",
"end_time": "2024-09-12 15:11:40.903",
"results": [
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/3bdf7689-b598-409d-806a-121cff5e4a31-1.json?Expires=1726211500&OSSAccessKeyId=LTAI5tQZd8AEcZX6KZV4****&Signature=Fj%2BaF%2FH0Kayj3w3My2ECBeP****%3D",
"subtask_status": "SUCCEEDED"
},
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/409a4b92-445b-4dd8-8c1d-f110954d82d8-1.json?Expires=1726211500&OSSAccessKeyId=LTAI5tQZd8AEcZX6KZV4****&Signature=v5Owy5qoAfT7mzGmQgH0g8C****%3D",
"subtask_status": "SUCCEEDED"
}
],
"task_metrics": {
"TOTAL": 2,
"SUCCEEDED": 2,
"FAILED": 0
}
},
"usage": {
"duration": 9
}
}
5. 解析识别结果
API 会返回一个包含转录的url(transcription_url
) 的 JSON 响应:
"transcription_url": "https://dashscope-result-bj.oss-cn-beijing.aliyuncs.com/pre/filetrans-16k/20240912/15%3A11/409a4b92-445b-4dd8-8c1d-f110954d82d8-1.json?Expires=1726211500&OSSAccessKeyId=LTAI5tQZd8AEcZX6KZV4****&Signature=v5Owy5qoAfT7mzGmQgH0g8C****%3D",
四、Python 代码
1. 配置Maven
from http import HTTPStatus
import dashscope
import json
import requests
import pandas as pd
import os
2. 代码
# 如您未将API Key配置到环境变量中,可带上下面这行代码并将your-dashscope-api-key替换成您自己的
dashscope.api_key =
def get_asr_aliyun(url):
task_response = dashscope.audio.asr.Transcription.async_call(
model='paraformer-v2',
file_urls=[url],
channel_id=[0,1],
language_hints=['zh', 'en'] # “language_hints”只支持paraformer-v2和paraformer-realtime-v2模型
)
print(task_response)
return task_response.output.task_id
""" 获取的文本转换"""
def format_conversation(text):
# 假设文本是一个列表,包含每个角色的话
# 这里用示例数据替代
formatted_text = ""
for transcript in text['transcripts']:
for sentence in transcript['sentences']:
speaker_id = sentence['speaker_id']
# 拼接说话人 换行
speaker = f"角色{speaker_id+1}"
formatted_text += f"{speaker}:{sentence['text']}\n"
return formatted_text
3.获取转录结果
""" 获取转录结果 """
def process_url(task_id):
transcribe_response = dashscope.audio.asr.Transcription.wait(task=task_id)
if transcribe_response.status_code == HTTPStatus.OK:
try:
print(json.dumps(transcribe_response.output, indent=4, ensure_ascii=False))
print('transcription done!')
# 通过url获取录音json数据
results = transcribe_response.output.results
conversation_text = ''
for result in results:
# 获取转录url
print(result)
transcription_url = result['transcription_url']
print(transcription_url)
connection = requests.get(transcription_url)
# 格式化输出json结果
json_data = connection.json()
print(json.dumps(json_data, indent=4, ensure_ascii=False))
conversation_text = format_conversation(json_data)
conversation_text += conversation_text
print(conversation_text)
return conversation_text
except Exception as e:
print(f"任务id:{task_id} 处理转录结果时出错: {str(e)}")
return None
else:
print(f"任务id:{task_id} 转录失败,状态码: {transcribe_response.status_code}")
return None
4. 响应格式
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_male2.wav",
"properties": {
"audio_format": "pcm_s16le",
"channels": [
0
],
"original_sampling_rate": 16000,
"original_duration_in_milliseconds": 4726
},
"transcripts": [
{
"channel_id": 0,
"content_duration_in_milliseconds": 4570,
"text": "Hello world, 这里是阿里巴巴语音实验室。",
"sentences": [
{
"begin_time": 140,
"end_time": 4710,
"text": "Hello world, 这里是阿里巴巴语音实验室。",
"words": [
{
"begin_time": 140,
"end_time": 597,
"text": "Hello ",
"punctuation": ""
},
{
"begin_time": 597,
"end_time": 1054,
"text": "world",
"punctuation": ", "
},
{
"begin_time": 1054,
"end_time": 1663,
"text": "这里",
"punctuation": ""
},
{
"begin_time": 1663,
"end_time": 2272,
"text": "是阿",
"punctuation": ""
},
{
"begin_time": 2272,
"end_time": 2881,
"text": "里巴",
"punctuation": ""
},
{
"begin_time": 2881,
"end_time": 3490,
"text": "巴语",
"punctuation": ""
},
{
"begin_time": 3490,
"end_time": 4099,
"text": "音实",
"punctuation": ""
},
{
"begin_time": 4099,
"end_time": 4710,
"text": "验室",
"punctuation": "。"
}
]
}
]
}
]
}
{
"file_url": "https://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav",
"properties": {
"audio_format": "pcm_s16le",
"channels": [
0
],
"original_sampling_rate": 16000,
"original_duration_in_milliseconds": 3834
},
"transcripts": [
{
"channel_id": 0,
"content_duration_in_milliseconds": 3530,
"text": "Hello world, 这里是阿里巴巴语音实验室。",
"sentences": [
{
"begin_time": 280,
"end_time": 3810,
"text": "Hello world, 这里是阿里巴巴语音实验室。",
"words": [
{
"begin_time": 280,
"end_time": 633,
"text": "Hello ",
"punctuation": ""
},
{
"begin_time": 633,
"end_time": 986,
"text": "world",
"punctuation": ", "
},
{
"begin_time": 986,
"end_time": 1456,
"text": "这里",
"punctuation": ""
},
{
"begin_time": 1456,
"end_time": 1926,
"text": "是阿",
"punctuation": ""
},
{
"begin_time": 1926,
"end_time": 2396,
"text": "里巴",
"punctuation": ""
},
{
"begin_time": 2396,
"end_time": 2866,
"text": "巴语",
"punctuation": ""
},
{
"begin_time": 2866,
"end_time": 3336,
"text": "音实",
"punctuation": ""
},
{
"begin_time": 3336,
"end_time": 3810,
"text": "验室",
"punctuation": "。"
}
]
}
]
}
]
}
5.返回参数
五、结果处理与应用
在接收到录音识别的结果后,可以将文本内容用于:
- 实时字幕生成:适用于直播、会议等场景。
- 录音内容分析:通过自然语言处理技术进一步分析录音内容,例如情绪分析、关键词提取等。
六、错误处理和优化建议
在开发过程中,建议对以下可能出现的错误进行处理:
- 鉴权失败:检查 Access Key、Access Token 是否有效。
- 请求超时:通过重试机制提升请求的可靠性。
- 任务未完成:如果任务处于处理中,可以设置轮询或异步回调机制,提高响应速度。
总结
本文介绍了使用阿里云录音识别 API 的完整流程,从前提准备到代码实现,为开发者提供了便捷的音频识别方案。通过将该功能集成到应用中,可以显著提升项目的智能化程度,更好地服务于用户。
标签:end,示例,text,dashscope,API,time,识别,id From: https://blog.csdn.net/qq_41791705/article/details/143720816