利用百度API进行语音识别,语音合成

创建百度应用程序

创建百度应用获取秘钥

创建应用

  • 您需要创建应用才可正式调用语音技术能力,应用是您调用服务的基本操作单元,您可以基于应用创建成功后获取的API KeySecret Key,进行接口调用操作,及相关配置。

示例

百度应用管理中心

调用百度 API

短语音识别百度官方教程

语音合成百度官方教程

百度语音SDK下载

语音识别 Python SDK目录结构

├── README.md
├── aip                   //SDK目录
│   ├── __init__.py       //导出类
│   ├── base.py           //aip基类
│   ├── http.py           //http请求
│   └── speech.py //语音识别
└── setup.py              //setuptools安装
  • 如果已安装pip,执行pip install baidu-aip即可。

新建 AipSpeech

AipSpeech是语音识别的Python SDK客户端,为使用语音识别的开发人员提供了一系列的交互方法。

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)

在上面代码中,常量APP_ID在百度云控制台中创建,常量API_KEYSECRET_KEY是在创建完毕应用后,系统分配给用户的,均为字符串,用于标识用户,为访问做签名验证。

语音识别及合成

录音文件audio_record.py

import keyboard
import pyaudio,wave
from tqdm import tqdmdef record(filename):p =  pyaudio.PyAudio()      # 实例化pyaudio对象SECONDS = 5                 # 时长(秒)FORMAT = pyaudio.paInt16    # 音频格式,即采样位深CHANNELS = 1                # 通道数RATE = 16000               	# 采样率CHUNK = 1024                # 采样帧OUTPUT_FILE = filename      #输出的录音文件# 打开音频流准备开始录制stream = p.open(rate=RATE,format=FORMAT,channels=CHANNELS,input=True,                 # 代表此时是输入音频流frames_per_buffer=CHUNK)    # 缓冲区大小为一帧frames = []frame_num = int(RATE * SECONDS / CHUNK)    	# 采样帧个数print("按下空格键开始录制音频!") while True:if keyboard.is_pressed(' '):breakprint("录制中...")       for i in tqdm(range(frame_num)):            #tqdm显示进度条data = stream.read(CHUNK)       frames.append(data)stream.stop_stream()    # 停止采集stream.close()          # 关闭音频流p.terminate()           # 关闭pyaudiowf = wave.open(OUTPUT_FILE, 'wb')   # 打开文件# 设置参数wf.setframerate(RATE)wf.setnchannels(CHANNELS)wf.setsampwidth(p.get_sample_size(FORMAT))  # 采样位深(字节)# frames为二进制列表文件,数据个数为采样帧数,这里把数据连续写入wf.writeframes(b''.join(frames))    wf.close()

播放文件audio_play.py

os.system(cmd)可以像终端一样调用系统命令

import osdef play(file_name):"""audio play"""os.system(f"ffplay -autoexit {file_name}")		#播放完毕自动退出

百度接口baidu_ai.py

from aip import AipSpeechAPP_ID = '31151205'
API_KEY = 'e4FjjcWCVRalcCzQlbIe54ax'
SECRET_KEY = 'HmnVGM3CcLssQqtkTjK38R9aL0EvR6ah'client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)def audio_to_text(wav_file):"""audio to testArgs:wav_file (str): File to be convertedReturns:str: file context"""#读取音频文件with open(wav_file, 'rb') as fp:file_context = fp.read()# 识别本地文件res = client.asr(file_context, 'wav', 16000, {'dev_pid': 1537})     #res为字典类型res_str = res['result'][0]return res_strdef text_to_audio(synth_file, res_str):# 准备语音合成synth_context = client.synthesis(res_str,'zh',1,{'spd' : 5,  #语速(0-9)'vol' : 5,  #音量(0-9)'pit' : 5,  #音调(0-9)'per' : 4,  #发音人:度丫丫})# 确定合成内容已生成,因为生成错误会返回字典类型报错if not isinstance(synth_context, dict):with open(synth_file, 'wb') as f:f.write(synth_context)return 0else:return -1

主程序 main.py

from audio_record import record
from audio_play import play
from baidu_ai import audio_to_text, text_to_audiofile = 'test.wav'           # 语音录制,识别文件
synth_file = "synth.mp3"    # 语音合成文件 record(file)                # 录制音频 res_str = audio_to_text(file)               # 语音识别
print(res_str)                              # 打印识别结果ret = text_to_audio(synth_file, res_str)    # 语音合成if ret != -1:play(synth_file)                        # 播放合成结果

本文链接:https://my.lmcjl.com/post/11146.html

展开阅读全文

4 评论

留下您的评论.