当前位置: 首页 > news >正文

2024 年最新 Python 基于百度智能云实现短语音识别、语音合成详细教程

百度智能云语音识别

采用国际领先的流式端到端语音语言一体化建模算法,将语音快速准确识别为文字,支持手机应用语音交互、语音内容分析、机器人对话等场景。百度短语音识别可以将 60 秒以下的音频识别为文字。适用于语音对话、语音控制、语音输入等场景。

接口类型:通过 REST API 的方式提供的通用的 HTTP 接口。适用于任意操作系统,任意编程语言
接口限制:需要上传完整的录音文件,录音文件时长不超过 60 秒。浏览器由于无法跨域请求百度语音服务器的域名,因此无法直接调用API接口。
支持音频格式:pcm、wav、amr、m4a
音频编码要求:采样率 160008000(仅支持普通话模型),16 bit 位深,单声道(音频格式查看及转换)

在这里插入图片描述

创建新应用

在这里插入图片描述

安装语音识别 Python SDK

SDK 下载安装地址:https://ai.baidu.com/sdk#asr

语音识别 Python SDK目录结构

├── README.md
├── aip                   //SDK目录
│   ├── __init__.py       //导出类
│   ├── base.py           //aip基类
│   ├── http.py           //http请求
│   └── speech.py 		  //语音识别
└── setup.py              //setuptools安装

安装使用 Python SDK

如果已安装 pip,执行 pip install baidu-aip 即可。
如果已安装 setuptools,执行 python setup.py install 即可。

新建 AipSpeech

AipSpeech是语音识别的Python SDK客户端,为使用语音识别的开发人员提供了一系列的交互方法。常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

from aip import AipSpeech""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

配置 AipSpeech

如果用户需要配置AipSpeech的网络请求参数(一般不需要配置),可以在构造 AipSpeech 之后调用接口设置参数。

在这里插入图片描述

语音识别 SDK 接口文档

接口描述:向远程服务上传整段语音进行识别

请求说明:举例,要对段保存有一段语音的语音文件进行识别:

def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()client.asr(get_file_content('audio.pcm'), 'pcm', 16000, {'dev_pid': 1537,
})

接口函数说明
在这里插入图片描述
dev_pid 参数列表
在这里插入图片描述

返回数据参数详情

在这里插入图片描述

{"err_no": 0,"err_msg": "success.","corpus_no": "15984125203285346378","sn": "481D633F-73BA-726F-49EF-8659ACCC2F3D","result": ["北京天气"]
}

详细接口文档:https://ai.baidu.com/ai-doc/SPEECH/0lbxfnc9b

本地语音识别案例

读取本地 pcm 语音文件,识别语音的内容。

from aip import AipSpeechdef get_file_content(filePath):"""读取本地文件:param filePath: :return: """with open(filePath, 'rb') as fp:return fp.read()def recognize_audio(client: AipSpeech, filePath: str):"""识别本地 pcm 语音文件:param client::param filePath::return:"""result = client.asr(get_file_content(filePath), 'pcm', 16000, {'dev_pid': 1537,})return result['result'][0]

主函数源码

import os
import time
from aip import AipSpeech
import dotenvimport baidu_speech_tooldotenv.load_dotenv(".env")APP_ID = os.getenv("APP_ID")
API_KEY = os.getenv("API_KEY")
SECRET_KEY = os.getenv("SECRET_KEY")client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)"""记录开始时间"""
start_time = time.time()filePath = "2024060302300905.pcm"result = baidu_speech_tool.recognize_audio(client=client, filePath=filePath)
"""记录结束时间"""
end_time = time.time()"""计算并打印执行时间"""
execution_time = end_time - start_time
print(f"Execution time: {execution_time: .4f} seconds")"""识别结果"""
print(result)

百度智能云语音合成

百度短文本在线合成服务,基于HTTP请求的REST API接口,将文本转换为可以播放的音频文件。本文档描述了使用语音合成服务REST API的方法。

接口文档:https://ai.baidu.com/ai-doc/SPEECH/mlbxh7xie

tex 字段 2 次urlencode

由于urlencode有两个标准 RFC 1738和RFC 3986. 百度为了更好地兼容,支持1次及2次urlencode, 其中2次urlencode可以覆盖全部的特殊字符。因而推荐传递tex 参数时做2次urlencode编码。

测试用例:“1+1=2”。 一次urlencode时,“+”可能会没有合成。

POST 调用方式(推荐)

将文本以及其他参数写入到body里面,利用html表单的方式将参数传递到服务端。 所有的参数都在body中。body里面的数据为:

tex=***&lan=zh&cuid=***&ctp=1&aue=3&tok=***

tex 原始参数是"百度你好“

第一次urlencode后 tex=%e7%99%be%e5%ba%a6%e4%bd%a0%e5%a5%bd
第二次urlencode后 tex=%25e7%2599%25be%25e5%25ba%25a6%25e4%25bd%25a0%25e5%25a5%25bd

GET 调用方式

将所有的参数都填写到URL地址中,可以通过浏览器可以播放合成的语音结果。

https://tsn.baidu.com/text2audio?tex=***&lan=zh&cuid=***&ctp=1&tok=***

注意 tex 参数需要按照 url 参数标准使用 url_encode UTF8编码,如合成文字为“百度你好” 。

http://tsn.baidu.com/text2audio?tex=%e7%99%be%e5%ba%a6%e4%bd%a0%e5%a5%bd&lan=zh&cuid=***&ctp=1&tok=***

如果合成成功返回的Content-Type以“audio”开头。

aue =3 ,返回为二进制mp3文件,具体header信息 Content-Type: audio/mp3;
aue =4 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=16000;channel=1
aue =5 ,返回为二进制pcm文件,具体header信息 Content-Type:audio/basic;codec=pcm;rate=8000;channel=1
aue =6 ,返回为二进制wav文件,具体header信息 Content-Type: audio/wav;

如果合成出现错误,则会返回json文本,具体header信息为:Content-Type: application/json。其中sn字段主要用于DEBUG追查问题,如果出现问题,可以提供sn帮助确认问题。

安装语音合成 Python SDK

SDK 下载安装地址:https://ai.baidu.com/sdk#asr

语音识别 Python SDK目录结构

├── README.md
├── aip                   //SDK目录
│   ├── __init__.py       //导出类
│   ├── base.py           //aip基类
│   ├── http.py           //http请求
│   └── speech.py         //语音合成
└── setup.py              //setuptools安装

安装使用 Python SDK

如果已安装 pip,执行 pip install baidu-aip 即可。
如果已安装 setuptools,执行 python setup.py install 即可。

新建 AipSpeech

AipSpeech是语音识别的Python SDK客户端,为使用语音识别的开发人员提供了一系列的交互方法。常量APP_ID在百度云控制台中创建,常量API_KEY与SECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证,可在AI服务控制台中的应用列表中查看。

from aip import AipSpeech""" 你的 APPID AK SK """
APP_ID = '你的 App ID'
API_KEY = '你的 Api Key'
SECRET_KEY = '你的 Secret Key'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

配置 AipSpeech

如果用户需要配置AipSpeech的网络请求参数(一般不需要配置),可以在构造 AipSpeech 之后调用接口设置参数。

在这里插入图片描述

语音合成 SDF 接口文档

接口描述:基于该接口,开发者可以轻松的获取语音合成能力

文档地址:https://ai.baidu.com/ai-doc/SPEECH/plbxhh4be

请求说明

合成文本长度必须小于1024字节,如果本文长度较长,可以采用多次请求的方式。文本长度不可超过限制
举例,要把一段文字合成为语音文件:

result  = client.synthesis('你好百度', 'zh', 1, {'vol': 5,
})# 识别正确返回语音二进制 错误则返回dict 参照下面错误码
if not isinstance(result, dict):with open('audio.mp3', 'wb') as f:f.write(result)

在这里插入图片描述
tex 字段 2 次 urlencode

由于urlencode有两个标准 RFC 1738和RFC 3986. 百度为了更好地兼容,支持1次及2次urlencode, 其中2次urlencode可以覆盖全部的特殊字符。SDK内部加了1次urlencode,因而推荐传递tex 参数时再做1次urlencode编码。

测试用例:“1+1=2”。 依靠 SDK 内的 1 次 urlencode 时,“+”可能会没有合成。

返回样例

// 成功返回二进制文件流
// 失败返回
{"err_no":500,"err_msg":"notsupport.","sn":"abcdefgh","idx":1
}

语音合成音色

本页面为调用发音人所属音库、发音人名称、调用per参数等信息。语音合成音色:https://ai.baidu.com/ai-doc/SPEECH/Rluv3uq3d

试听:https://ai.baidu.com/tech/speech/tts_online

在这里插入图片描述

本地语音合成案例

API 调用案例

import requests
import osimport dotenvdotenv.load_dotenv(".env")APP_ID = os.getenv("APP_ID")
API_KEY = os.getenv("API_KEY")
SECRET_KEY = os.getenv("SECRET_KEY")def create_audio(text: str, file_name: str):url = "https://tsn.baidu.com/text2audio"payload = f'tex={text}&tok=' + get_access_token() + '&cuid=naAUL3Evzwj8A79l1kFHvRz1oUWZfOmo&ctp=1&lan=zh&spd=5&pit=5&vol=5&per=0&aue=4'headers = {'Content-Type': 'application/x-www-form-urlencoded','Accept': '*/*'}response = requests.request("POST", url, headers=headers, data=payload)with open(f"./{file_name}.pcm", 'wb') as f:f.write(response.text)response = requests.get(url, stream=True, headers=headers, data=payload)# 检查请求是否成功if response.status_code == 200:# 打开文件以二进制写入模式with open(f"./{file_name}.pcm", 'wb') as file:# 分块读取并写入文件for chunk in response.iter_content(1024):if chunk:file.write(chunk)else:print(f"请求失败,状态码:{response.status_code}")def get_access_token():"""使用 AK,SK 生成鉴权签名(Access Token):return: access_token,或是None(如果错误)"""url = "https://aip.baidubce.com/oauth/2.0/token"params = {"grant_type": "client_credentials", "client_id": API_KEY, "client_secret": SECRET_KEY}return str(requests.post(url, params=params).json().get("access_token"))if __name__ == '__main__':create_audio("你好", "test")

AipSpeech SDK 版本

import osimport dotenvdotenv.load_dotenv(".env")
from aip import AipSpeechAPP_ID = os.getenv("APP_ID")
API_KEY = os.getenv("API_KEY")
SECRET_KEY = os.getenv("SECRET_KEY")client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)def baidu_create_audio(text):result = client.synthesis('你好百度', 'zh', 1, {'vol': 5,'per': 5118})# 识别正确返回语音二进制 错误则返回 dict 参照下面错误码if not isinstance(result, dict):with open('audio.pcm', 'wb') as f:f.write(result)baidu_create_audio("你好")

常见调用问题

access_token 错误 API_KEY / SECRET_KEY 错误

    params['access_token'] = authObj['access_token']~~~~~~~^^^^^^^^^^^^^^^^
KeyError: 'access_token'Process finished with exit code 1

相关文章:

  • memcached介绍和详解
  • 【尚庭公寓SpringBoot + Vue 项目实战】图片上传(十)
  • 数学术语:“suprema” 和 “supremum”指什么
  • 刺客信条找不到emp.dll怎么解决?emp.dll缺失的解决方法解析
  • Arduino入门1——认识Arduino,点亮一个LED
  • 8个常用的辅助函数!!
  • try-with-resources 工作原理
  • DockerHub无法访问,国内镜像拉取迂回解决方案
  • 万字长文爆肝Spring(一)
  • CSS选择器种类总结
  • Spring Boot中Excel的导入导出的实现之EasyPoi框架使用教程
  • docker安装消息队列mq中的rabbit服务
  • python操作数据库,django操作数据库
  • 【Vue】自学笔记(四)
  • 有没有硅基生命?AGI在哪里?
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • IOS评论框不贴底(ios12新bug)
  • Java新版本的开发已正式进入轨道,版本号18.3
  • SQLServer插入数据
  • sublime配置文件
  • 如何优雅的使用vue+Dcloud(Hbuild)开发混合app
  • 使用Maven插件构建SpringBoot项目,生成Docker镜像push到DockerHub上
  • 腾讯大梁:DevOps最后一棒,有效构建海量运营的持续反馈能力
  • 线上 python http server profile 实践
  • 新书推荐|Windows黑客编程技术详解
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 06-01 点餐小程序前台界面搭建
  • ionic入门之数据绑定显示-1
  • ​​​​​​​​​​​​​​汽车网络信息安全分析方法论
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (差分)胡桃爱原石
  • (二)fiber的基本认识
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (三)c52学习之旅-点亮LED灯
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)Android学习笔记 --- android任务栈和启动模式
  • ... 是什么 ?... 有什么用处?
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net 8 发布了,试下微软最近强推的MAUI
  • .NET Core WebAPI中使用swagger版本控制,添加注释
  • .net core使用EPPlus设置Excel的页眉和页脚
  • .NET NPOI导出Excel详解
  • .NET 读取 JSON格式的数据
  • .NET 自定义中间件 判断是否存在 AllowAnonymousAttribute 特性 来判断是否需要身份验证
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .net开源工作流引擎ccflow表单数据返回值Pop分组模式和表格模式对比
  • .net下简单快捷的数值高低位切换
  • @RestControllerAdvice异常统一处理类失效原因
  • @vue/cli 3.x+引入jQuery
  • [ vulhub漏洞复现篇 ] Apache APISIX 默认密钥漏洞 CVE-2020-13945
  • [ 蓝桥杯Web真题 ]-Markdown 文档解析
  • [10] CUDA程序性能的提升 与 流