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

基于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语音识别技术文档

发布了2 篇原创文章 · 获赞 3 · 访问量 263

猜你喜欢

转载自blog.csdn.net/qq_43603247/article/details/105561515