基于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() #朗读百度识别结果
好了。截图就到这里结束啦,大家可以尝试一下。