首页 > 编程语言 >[AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码示例Python版本

[AIGC]使用阿里云Paraformer语音识别录音识别 API 进行音频处理 —— 完整流程及代码示例Python版本

时间:2024-11-12 18:43:31浏览次数:3  
标签:end 示例 text dashscope API time 识别 id

文章目录

近年来,随着语音识别技术的进步和应用场景的增多,越来越多的开发者希望将自动化录音识别功能集成到自己的项目中。阿里云录音识别 API(Paraformer)是一款功能强大、精度高的服务,能够帮助开发者轻松实现录音转文字、语音分析等需求。本文将从 API 调用到实际项目集成,详细介绍阿里云录音识别的使用方法。

一、前提准备

1. 阿里云账号

确保拥有阿里云账号,若没有,可以在 阿里云官网注册。需要完成实名认证,确保可以访问 API 服务。

2. 开通录音识别服务

在阿里云控制台搜索“录音识别”或“SenceVoice”,找到相关服务,并根据项目需求选择合适的计费方式。

3. 获取 API Key 和 Access Token

访问阿里云的 访问控制管理(RAM),创建一个用户或角色以生成 Access Key IDAccess 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 KeyAccess 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

相关文章

  • 京东关键词API接口获取
    获取京东关键词API接口主要有以下步骤:一、注册京东开发者账号:访问京东开放平台(https://open.jd.com/)。点击页面上的“注册”按钮,按照系统提示填写相关信息,完成账号注册。二、创建应用:登录京东开发者账号后,在开放平台上创建一个应用。填写应用的基本信息,如应用名称、应......
  • 淘宝详情API接口有什么用处?
    淘宝详情API接口有什么用处?主要体现在以下几个方面:电商数据分析:通过调用API接口获取商品详情数据,可以对商品的销售情况、价格变化、属性分布等进行深入分析。这些数据为电商运营提供了决策支持,帮助商家更好地了解市场趋势和消费者需求。竞品分析:通过获取竞品的商品详情数据,商......
  • 调用分页的 API 接口,如何快速返回全部数据?
    当调用分页的API接口并希望快速返回全部数据时,可以采用以下策略:一、优化网络请求并发请求原理:大多数现代编程语言都支持并发编程。通过并发地发送多个分页请求,可以大大减少获取全部数据所需的总时间。例如,在Python中,可以使用asyncio库(对于异步操作)或者concurrent.fu......
  • 亚马逊商品API接口:运用及收益的深度探讨
    作为全球最大的电商平台之一,亚马逊不仅提供了丰富的商品选择,还通过其开放平台为开发者提供了多种API接口,其中商品详情API接口尤为关键。这些接口不仅为开发者提供了获取商品信息的途径,还带来了诸多商业机会和收益。本文将深入探讨亚马逊商品API接口的运用及其带来的收益。一......
  • 基于yolov8、yolov5的番茄成熟度检测识别系统(含UI界面、训练好的模型、Python代码、数
    摘要:番茄成熟度检测在农业生产及质量控制中起着至关重要的作用,不仅能帮助农民及时采摘成熟的番茄,还为自动化农业监测提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的番茄成熟度检测模型,该模型使用了大量图片进行训练,能够准确识别不同成熟度阶段的......
  • HarmonyOS Next在游戏防作弊系统中的应用:利用Device Certificate Kit对外挂的智能识别
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。在当今蓬勃发展的游戏产业中,游戏公平性......
  • 推荐7款程序员常用的API管理工具
    前言现如今API接口的编写与调试已成为开发人员不可或缺的技能,工欲善其事,必先利其器,选择一款优秀的API管理工具显得尤为重要。本文大姚给大家推荐7款程序员常用的API管理工具,大家可以根据自身和团队情况按需选择一款进行使用。使用情况投票统计微信使用情况投票统计:https://mp.w......
  • Qt构建与解析Json示例
    本文以B站UP主“明王讲QT”的【QT开发专题-天气预报】中的章节内容作为学习Qt中构建、解析Json的参考方法。1、Json文本{"info":{"asian":true,"captical":"beijing","founded":1949},"name":"China&qu......
  • 三网话费余额查询API系统源码,可对接TG,可分销,可API对接客户
    本套系统是用thinkphp6.0框架开发的,PHP版本需8.1以上,可查询手机号话费余额、归属地和运营商等信息,系统支持用户中心在线查询和通过API接口对接发起查询,可以对接TG,可以分销,可以单独给代理设置渠道价格,用户余额充值是对接usdt接口或者通过后台生成卡密,源码全开源,支持懂技术的......
  • AUTOSAR_EXP_ARAComAPI的7章笔记(2)
    ☞返回总目录相关总结:服务发现实现策略总结7.2服务发现的实现策略如前面章节所述,ara::com期望产品供应商实现服务发现的功能。服务发现功能基本上是在API级别通过FindService、OfferService和StopOfferService方法定义的,协议和实现细节是开放的。当一个AP节点(更......