基于python语音控制大疆创新EP机器人并进行对话——第二步将录音通过百度AI识别并播放

Onida ·
更新时间:2024-09-20
· 856 次阅读

基于python语音控制大疆创新EP机器人并进行对话——第二步将录音通过百度AI识别并播放 说一下上一篇文章的错误

上一篇文章在编程思维上有一点小问题,因为在后面我加上了进行对话,忘记改编程思维了,下面我就将一下我觉得的编程思维吧
电脑录音——通过百度AI识别成文本——将文本信息发送给EP——将文本信息发给图灵机器人——将图灵机器人返回的结果转化成MP3——将MP3播放

讲一下上一篇文章中的代码

流程:采样-》写入文件

import pyaudio #导入pyAudio的源代码文件,我们下面要用到,不用到就不用导入啦 import wave def record(): #定义函数 CHUNK = 1024 FORMAT = pyaudio.paInt16 #量化位数 CHANNELS = 1 #采样管道数 RATE = 16000 #采样率 RECORD_SECONDS = 2 WAVE_OUTPUT_FILENAME = "output.wav" #文件保存的名称 p = pyaudio.PyAudio() #创建PyAudio的实例对象 stream = p.open(format=FORMAT, #调用PyAudio实例对象的open方法创建流Stream channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] #存储所有读取到的数据 print('* recording >>>') #打印开始录音 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): #for循环,控制录音时间 data = stream.read(CHUNK) #根据需求,调用Stream的write或者read方法 frames.append(data) print('* stop >>>') #打印结束录音 stream.close() #调用Stream的close方法,关闭流 p.terminate() #调用pyaudio.PyAudio.terminate() 关闭会话 wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') #写入wav文件里面 wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() record() #运行异常改函数

这就是代码的一个大概讲解,我们不必去记住它的细节怎么样的,我们只用记住它是干嘛的就行了,直接调用

录的音怎么样通过百度AI识别

百度语音是百度云 AI 开放平台提供的支持语音识别和语音合成的服务,注册以后就可以直接访问它的 REST API 了,并且有向普通用户提供免费的调用额度,好像是5000次。

注册成功以后,进入语音服务的控制台创建一个新的应用,记下自己的 AppID、API Key 和 Secret Key,这些是需要写到代码中的。
注册百度AI,并创建运用
在浏览器上搜索百度AI开饭平台,并进入官网。
注册
在这里插入图片描述
登录以后找到AI语音技术
在这里插入图片描述
创建运用
在这里插入图片描述
完成创建并记下自己的 AppID、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)

下面是接口说明:举例,要对段保存有一段语音的语音文件进行识别:
在这里插入图片描述

# 读取文件 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, result_text = result["result"][0] print("you said: " + result_text) return result_text })

识别完之后我们还将识别的文本读变成语音,这时候我们也用到看百度语音(TTS),很多软件都有文本转语音的功能,但是百度语音的4号是好听的小姐姐声音哦。

from aip import AipSpeech APP_ID = 'Your AppID' API_KEY = 'Your API Key' SECRET_KEY = 'Your Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def speak(text=""): result = client.synthesis(text, 'zh', 1, { 'spd': 4, 'vol': 5, 'per': 4, }) if not isinstance(result, dict): with open('audio.mp3', 'wb') as f: f.write(result) speak("很高兴见到你")

现在已经把文本转成语音了,下面就需要播放MP3了,我用了playsound库,所以我们要安装playsound库,pip install playsound,播放代码如下:

def speak1(): playsound("audio.mp3") speak1()

这个时候我们将录音通过百度AI识别并播放的代码都将完了,完整代码

import pyaudio #导入pyAudio的源代码文件,我们下面要用到,不用到就不用导入啦 import wave from aip import AipSpeech from playsound import playsound APP_ID = '自己的APP_ID' #新建AiPSpeech API_KEY = '自己的API_KEY' SECRET_KEY = '自己的SECRET_KEY' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def record(): #定义函数 CHUNK = 1024 FORMAT = pyaudio.paInt16 #量化位数 CHANNELS = 1 #采样管道数 RATE = 16000 #采样率 RECORD_SECONDS = 2 WAVE_OUTPUT_FILENAME = "output.wav" #文件保存的名称 p = pyaudio.PyAudio() #创建PyAudio的实例对象 stream = p.open(format=FORMAT, #调用PyAudio实例对象的open方法创建流Stream channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) frames = [] #存储所有读取到的数据 print('* 开始录音 >>>') #打印开始录音 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) #根据需求,调用Stream的write或者read方法 frames.append(data) print('* 结束录音 >>>') #打印结束录音 stream.close() #调用Stream的close方法,关闭流 p.terminate() #调用pyaudio.PyAudio.terminate() 关闭会话 wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') #写入wav文件里面 wf.setnchannels(CHANNELS) wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() def cognitive(): #读取文件 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() result = client.asr(get_file_content('output.wav'), 'wav', 16000, { 'dev_pid': 1537, #识别本地文件 }) result_text = result["result"][0] print("you said: " + result_text) return result_text def speak(text=""): result = client.synthesis(text, 'zh', 1, { 'spd': 4, 'vol': 5, 'per': 4, }) if not isinstance(result, dict): with open('audio.mp3', 'wb') as f: f.write(result) def speak1(): playsound("audio.mp3") record() #录音模块 result = cognitive() #百度识别结果 speak(result) #将百度识别结果转化成语音 speak1() #朗读百度识别结果

好了。截图就到这里结束啦,大家可以尝试一下。
参考资料
playsound库
百度AI语音识别技术文档


作者:qq_43603247



百度ai ep Python

需要 登录 后方可回复, 如果你还没有账号请 注册新账号