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

  • 9
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个比较复杂的项目,需要几个模块的协同工作,我来一步一步地给你讲解。 首先,我们需要准备的硬件有: - 树莓派 - USB麦克风 - RGB LED灯 接下来,我们需要安装一些必要的软件包: - pyaudio:用于录制麦克风音频 - baidu-aip:百度语音识别API的Python SDK - requests:用于HTTP请求 - simplejson:用于JSON解析 安装命令如下: ``` sudo apt-get install python3-pyaudio pip3 install baidu-aip requests simplejson ``` 接下来,我们需要注册百度语音识别API并获取API Key和Secret Key。具体步骤可以参考百度的官方文档。 然后,我们需要创建一个图灵机器人账号,并获取API Key。同样,具体步骤可以参考图灵机器人的官方文档。 现在,我们可以开始编写代码了。整个项目可以分为三个模块:语音识别模块、图灵机器人模块和LED控制模块。 语音识别模块: ```python import pyaudio import wave import requests import json import time from aip import AipSpeech # 百度语音识别API的账号信息 APP_ID = '你的APP_ID' API_KEY = '你的API_KEY' SECRET_KEY = '你的SECRET_KEY' # 录音参数 CHUNK = 1024 FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 RECORD_SECONDS = 5 # 初始化百度语音识别SDK client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) def record(): # 初始化录音 audio = pyaudio.PyAudio() stream = audio.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("开始录音,请说话...") frames = [] # 录音 for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) print("录音结束!") # 保存录音文件 wf = wave.open("record.wav", 'wb') wf.setnchannels(CHANNELS) wf.setsampwidth(audio.get_sample_size(FORMAT)) wf.setframerate(RATE) wf.writeframes(b''.join(frames)) wf.close() # 调用百度语音识别API with open("record.wav", 'rb') as fp: audio_data = fp.read() result = client.asr(audio_data, 'wav', RATE, { 'dev_pid': 1536, }) if result['err_no'] == 0: text = result['result'][0] print("您说的是:", text) return text else: print("识别出错:", result['err_msg']) return None ``` 这个模块包括了录音、保存录音文件以及调用百度语音识别API的功能。当我们调用record()函数时,它会录制5秒钟的音频文件,然后调用百度语音识别API将音频转换为文字。 图灵机器人模块: ```python # 图灵机器人API的账号信息 API_KEY = '你的API_KEY' # 图灵机器人API的请求地址 URL = 'http://openapi.tuling123.com/openapi/api/v2' def turing_chat(text): # 构造请求体 payload = { "reqType": 0, "perception": { "inputText": { "text": text } }, "userInfo": { "apiKey": API_KEY, "userId": "123456" } } headers = {'content-type': 'application/json'} # 发送POST请求 r = requests.post(URL, data=json.dumps(payload), headers=headers) result = r.json() if result['results']: return result['results'][0]['values']['text'] else: return None ``` 这个模块包括了调用图灵机器人API的功能。当我们调用turing_chat()函数时,它会将我们的文本发送到图灵机器人API,并返回机器人的回答。 LED控制模块: ```python import RPi.GPIO as GPIO # LED的引脚 RED_PIN = 11 GREEN_PIN = 12 BLUE_PIN = 13 # 初始化GPIO GPIO.setmode(GPIO.BOARD) GPIO.setup(RED_PIN, GPIO.OUT) GPIO.setup(GREEN_PIN, GPIO.OUT) GPIO.setup(BLUE_PIN, GPIO.OUT) def set_color(color): # 根据颜色设置RGB灯 if color == '红色': GPIO.output(RED_PIN, GPIO.HIGH) GPIO.output(GREEN_PIN, GPIO.LOW) GPIO.output(BLUE_PIN, GPIO.LOW) elif color == '绿色': GPIO.output(RED_PIN, GPIO.LOW) GPIO.output(GREEN_PIN, GPIO.HIGH) GPIO.output(BLUE_PIN, GPIO.LOW) elif color == '蓝色': GPIO.output(RED_PIN, GPIO.LOW) GPIO.output(GREEN_PIN, GPIO.LOW) GPIO.output(BLUE_PIN, GPIO.HIGH) else: GPIO.output(RED_PIN, GPIO.LOW) GPIO.output(GREEN_PIN, GPIO.LOW) GPIO.output(BLUE_PIN, GPIO.LOW) ``` 这个模块包括了控制RGB LED灯的功能。当我们调用set_color()函数时,它会根据我们传入的参数来设置LED灯的颜色。 最后,我们将这三个模块组合起来,实现智能对话语音控制LED灯的功能: ```python while True: # 录音识别文本 text = record() if text: # 调用图灵机器人API response = turing_chat(text) print("机器人回答:", response) # 控制LED灯 set_color(response) time.sleep(1) ``` 这个循环会持续监听麦克风输入,并将输入的文本发送到图灵机器人API,然后根据机器人的回答来控制LED灯的颜色。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值