树莓派语音交互机器人基于python

这是我之前在csdn上看到的一个版本的语音交互项目,但是原作的版本是py2的,现在我的版本是py3的,经过本人的研究修改绝对可用,用来造福更多做语音项目的朋友们。

之前参考的文章链接

链接:​​​​​​https://blog.csdn.net/qq_41676577/article/details/112856555

首先是创建百度语音项目,可以免费领取基本的语音识别和合成,不懂的其他文章都应该能找到如何创建百度语音。这是语音识别的代码。创建一个yuyinshibie.py的python文件

# coding: utf-8

import sys
import json
import urllib.request
import base64
import requests
import importlib,sys
importlib.reload(sys)

def get_access_token():
    url = "https://openapi.baidu.com/oauth/2.0/token"
    body = {
    "grant_type":"client_credentials",
    "client_id" :"百度id",
    "client_secret":"密码",
    }
    r = requests.post(url,body,verify=True)
    respond = json.loads(r.text)
    return respond["access_token"]
def yuyinshibie_api(audio_data,token):
    speech_data = base64.b64encode(audio_data).decode("utf-8")
    speech_length = len(audio_data)
    post_data = {
        "format" : "wav",
        "rate" : 16000,
        "channel" : 1,
        "cuid" : "B8-27-EB-BA-24-14",
        "token" : token,
        "speech" : speech_data,
        "len" : speech_length
        }
    url = "http://vop.baidu.com/server_api"
    json_data = json.dumps(post_data).encode("utf-8")
    json_length = len(json_data)
    #print(json_data)

    req = urllib.request.Request(url, data=json_data)
    req.add_header("Content-Type", "application/json")
    req.add_header("Content-Length", json_length)
    
    #print("asr start request\n")
    resp = urllib.request.urlopen(req)
    #print("asr finish request\n")
    resp = resp.read()
    resp_data = json.loads(resp.decode("utf-8"))
    if resp_data["err_no"] == 0:
        return resp_data["result"]
    else:
        print(resp_data)
        return None
    
def asr_main(filename,tok):
    try:
        f = open(filename, "rb")
        audio_data = f.read()
        f.close()
        resp = yuyinshibie_api(audio_data,tok)
        return resp[0]
    except Exception as e:
        print("e:",e)
        return "识别失败".encode("utf-8")


第二部分是一个很好用的图灵机器人,需要付费,但是如果简单的开发语音是非常方便的,可以买一个turling。创建一个turling.py的python文件

# coding: utf-8
 
import requests
import json
import sys
import importlib

importlib.reload(sys)

def Tuling(words):
    Tuling_API_KEY = "e63ae466836f4b82bf0f634bcf5b796d这个得填自己的"

    body = {"key":Tuling_API_KEY,"info":words.encode("utf-8")}
    
    url =  "http://www.tuling123.com/openapi/api"
    r = requests.get(url,body,verify=True)


    if r:
        date = json.loads(r.text)
        print(date["text"])
        return date["text"]
    else:
        return None

第三部分是语音合成的部分,同样是借助于百度语音,话不多说代码

创建一个yuyinhecheng.py的python文件

# coding: utf-8
import sys
import urllib.request
import json
import os
import yuyinshibie
import importlib
import requests
importlib.reload(sys)
def yuyinhecheng_api(tok,tex):
    cuid = "B8-27-EB-BA-24-14"
    spd = "4"
    url = "http://tsn.baidu.com/text2audio?tex="+tex+"&lan=zh&cuid="+cuid+"&ctp=1&tok="+tok+"&per=3"
    #print (url)
    response = urllib.request.urlopen(url)
    date = response.read()
    return url
def tts_main(filename,words,tok):
    voice_date = yuyinhecheng_api(tok,words)
    f = open(filename,"wb")
    f.write(voice_date)
    f.close()

最后部分就是整合的一段代码

创建一个yuyin.py的python文件

# coding: utf-8

import os
import time
import yuyinhecheng
import Turling
import yuyinshibie


tok = yuyinshibie.get_access_token()

switch = True
while switch:
    os.system('sudo arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav')
    time.sleep(0.5)
    info = yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
    if '关闭'.encode("utf-8") in info.encode("utf-8"):
        while True:
            os.system('sudo arecord -D "plughw:1" -f S16_LE -r 16000 -d 10 /home/pi/Desktop/voice.wav')
            time.sleep(10)
            info = yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
            
        if '开启'.encode("utf-8") in info.encode("utf-8"):
            break
        url = "http://tsn.baidu.com/text2audio?tex=开启成功&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
        os.system('mpg123 "%s"'%url)
        
    elif '暂停'.encode("utf-8") in info.encode("utf-8"):
        url = "http://tsn.baidu.com/text2audio?tex=开始暂停&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
        os.system('mpg123 "%s"'%url)
        time.sleep(10)
        url = "http://tsn.baidu.com/text2audio?tex=暂停结束&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
        os.system('mpg123 "%s"'%url)
        continue
    
    else:
        tex = Turling.Tuling(info)
        url = yuyinhecheng.yuyinhecheng_api(tok,tex)
        os.system('mpg123 "%s"'%url)
        time.sleep(0.5)


注意事项:因为此项目是树莓派的基础上的,所以很多py库需要自己在命令框中下载,还有此项目用到了mpg123播放器也得手动下载,下载是很方便的,一个命令就行了,以上的代码分别保存在不同的文件文件名依次是yuyinshibie,turling,yuyinhecheng,yuyin。文件名涉及到最后整合代码的调用,如果想改名,大伙可以自行根据修改。代码本人最近刚刚使用,代码是一定没有问题的。(如果过程遇到了一些问题可以发在评论区)

谢谢大家的支持!!!

  • 7
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值