基于Python构建一个智能语音机器人

 更新时间:2023年12月21日 08:20:00   作者:狼_先生  
这篇文章主要为大家详细介绍了如何基于Python构建一个智能语音机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

树莓派准备

包的安装

Python 3 默认安装在 Raspberry Pi 操作系统上,并用于许多重要功能。干扰系统 Python 安装可能会导致操作系统出现问题,因此,如果安装第三方 Python 库,请使用正确的包管理工具,这一点很重要。

有两种方法可以将库安装到默认python 发行版中。您可以使用 apt 并安装预配置的系统软件包,也可以使用 pip 安装未作为 Raspberry Pi OS 的一部分分发的软件包。

例如,要安装 Python 3 库以支持 Raspberry Pi 构建 HAT,您需要:

$ sudo apt install python3-build-hat

但是我们大概率会遇到包管理工具冲突的问题

产生此错误的原因是您尝试将第三方包安装到系统 Python 中。对于 Python 用户来说,一个长期存在的实际问题是操作系统包管理器(如 apt)与 Python 特定的包管理工具(如 pip)之间的冲突。这些冲突包括 Python 级 API 不兼容和文件所有权冲突。

因此,从 Bookworm 开始,通过 pip 安装的软件包必须使用 < /span>venv。虚拟环境是一个容器,您可以在其中安全地安装第三方模块,这样它们就不会干扰或破坏您的 Python 系统。

虚拟环境

要使用虚拟环境,您需要创建一个容器来存储环境。您可以通过多种方法来完成此操作,具体取决于您想要使用 Python 的方式。您可以继续的一种方法是为您创建的每个 Python 项目创建一个新的虚拟环境。在这里,您将创建一个目录来保存您自己的代码以及虚拟环境目录:

$ mkdir my_project
$ cd my_project
$ python -m venv (你的项目名)

如果您现在查看 my_project 目录,您将看到一个名为 你的项目名 的目录。

下一步,我们来通过指令: python -m venv --system-site-packages (你的项目名) 来创建虚拟环境。`

$ source (你的项目名)/bin/activate

(你的项目名) $

现在我们就可以使用 pip 进行安装了。

Pycharm准备

所需要的包

以下是需要安装的一些python依赖包

  • pip install speech_recognition 安装speech_recognition依赖包, 用于录音、生成wav文件
  • pip install baidu-aip 安装百度AI的sdk, 调用语音技术接口将音频识别为文本数据返回
  • pip install pygame 安装pygame依赖包, 将文本信息以音频的格式播放出来

编程逻辑

  • 第一步: “拾音”
  • 第二步: STT转换
  • 第三步: MOSS机器人回复文本
  • 第四步: TTS转换 + 语音合成
  • 第五步: 外放语音

第一步: 拾音

首先我们测试录音设备是否存在。我们在树莓派终端里面输入指令:

arecord -l

会得到如下回复:

这就是说明我们的设备是存在的。我们也能在这里看到有几个设备,可以选择用哪个。

arecord -D "plughw:3" -f S16_LE -r16000 -d4 /home/admin/PyCode/WS_Project_MOSS/voices/myvoices.wav

参数解析

- -D 指定录音设备,-D hw:1,0的意思就是选用card1(SmartIC Audio Device)设备录音

- -c 设置通道个数,-c2的意思就是录制2通道的音频文件

- -r 设置采样率,-r16000的意思就是设置采样率为16000

- -f 指定录音格式,-fS16_LE的意思就是录制S16_LE格式的音频文件

-h,—help(帮助)

-V,–version(打印版本信息)

-l,–list-devices(列出全部声卡和数字音频设备)

-L,–list-pcms(列出全部PCM定义)

-D,–device(指定PCM设备名称)

-q,–quiet(安静模式)

-t,–file-type(文件类型voc,wav,raw或au)

-c,–channels(设置通道数)

-f,–format(设置格式)

-r,–rate(设置频率)

-d,–duration(设置持续时间,单位为秒)

-s,–sleep-min(设置最小休眠时间)

-M,–mmap(mmap流)

-N,–nonblock(设置为非块模式)

-B,–buffer-time(缓冲持续时长,单位为微秒)

-v,–verbose(显示PCM结构和设置)

-I,–separate-channels(设置为每个通道一个单独文件)

第二步:语音识别

通过百度语音识别服务(可以去官网上找一下,然后注册应用,获得自己的 APP_IDAPP_KEYSECRET_KEY

根据百度语音识别官方给的文档,我们来对接一下这个API接口

from aip import AipSpeech
import request
import json



# 配置一下API接口所需要的参数
APP_ID = '___________'  
API_KEY = '________________'  
SECRET_KEY = '___________________'  
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)  
path = 'voices/myvoices.wav'


def listen():  
    # 读取录音文件  
    with open(path, 'rb') as fp:  
    voices = fp.read()  
    try:  
        # 参数dev_pid:1536普通话(支持简单的英文识别)、1537普通话(纯中文识别)、1737英语、1637粤语、1837四川话、1936普通话远场  
        result = client.asr(voices, 'wav', 16000, {'dev_pid': 1537})  
        result_text = result["result"][0]  
        print("我听到你说: " + result_text)  
        return result_text  
    except KeyError:  
        print(result.get('err_no'))

第三步:机器人的思考回答

现在我们来等待机器人的回复。这里我们需要调用接口,我们现在使用的是 ERNIE-BOT-4.0, 我们后续会尝试一下调用 ChatGPT的API接口,就相当于是把机器人的大脑换一下。

很简单,依据 文档,我们来写一下以下两个函数。

def get_access_token():  
    """  
    使用 API Key,Secret Key 获取access_token,替换下列应用API Key、应用Secret Key  
    """  

    url = "https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=你的信息&client_secret=你的信息"  

    payload = json.dumps("")  
    headers = {  
    'Content-Type': 'application/json',  
    'Accept': 'application/json'  
    }  

    response = requests.request("POST", url, headers=headers, data=payload)  
    return response.json().get("access_token")
    

def bot(question):  
    # url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=" + get_access_token()  
    url = "https://aip.baidubce.com/rpc/2.0/ai_custom/v1/wenxinworkshop/chat/completions_pro?access_token=24.3990f1717b7636be7b8a4de154a49b5a.2592000.1705210204.282335-45017968"  

    payload = json.dumps({  
        "messages": [  
        {  
            "role": "user",  
            "content": f"{question}"  
        }]  
        })  
        headers = {  
            'Content-Type': 'application/json'  
        }  

    response = requests.request("POST", url, headers=headers, data=payload)  

    temp = json.loads(response.text)  
    print(temp.get('result'))  
    return temp.get('result')

第四步:TTS转换 + 外放语音

接下来,我们要把机器人回复给我们的文字转换成语音

import os
import sys


def say(response):  
    result = client.synthesis(f'{response}', 'zh', 1, {  
        'vol': 5,  
    })  

    # 识别正确返回语音二进制 错误则返回dict 参照下面错误码  
    if not isinstance(result, dict):  
        with open('robot/audio.mp3', 'wb') as f:  
            f.write(result)
            
    os.system('sudo aplay /home/admin/PyCode/WS_Project_MOSS/robot/audio.mp3')

第五步:整合

详情请阅览 gitee 仓库源码

到此这篇关于基于Python构建一个智能语音机器人的文章就介绍到这了,更多相关Python语音机器人内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python常见工厂函数用法示例

    Python常见工厂函数用法示例

    这篇文章主要介绍了Python常见工厂函数用法,简单描述了工厂函数的功能、定义并结合具体实例形式分析了Python常见工厂函数的相关使用技巧,需要的朋友可以参考下
    2018-03-03
  • Python实现批量识别图片文字并存为Excel

    Python实现批量识别图片文字并存为Excel

    批量文字识别是Python办公自动化的基本操作,应用在我们工作生活中的方方面面。本文主要以开源免费的easyocr来实现批量识别图片文字并存为Excel,感兴趣的可以学习一下
    2022-06-06
  • django站点管理详解

    django站点管理详解

    这篇文章主要介绍了django站点管理详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • python实现sqlalchemy的使用概述

    python实现sqlalchemy的使用概述

    SQLAlchemy是Python中最有名的ORM工具,特点是操纵Python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易懂,具体内容详情跟随小编一起看看吧
    2021-08-08
  • python 自动去除空行的实例

    python 自动去除空行的实例

    今天小编就为大家分享一篇python 自动去除空行的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python剪切视频与合并视频的实现

    python剪切视频与合并视频的实现

    这篇文章主要介绍了python剪切视频与合并视频的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • Pytorch之如何dropout避免过拟合

    Pytorch之如何dropout避免过拟合

    这篇文章主要介绍了Pytorch 如何dropout避免过拟合的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • Pandas数据处理加速技巧汇总

    Pandas数据处理加速技巧汇总

    Pandas 处理数据的效率还是很优秀的,相对于大规模的数据集只要掌握好正确的方法,就能让在数据处理时间上节省很多很多的时间。本文为大家汇总了一些Pandas数据处理加速技巧,需要的可以参考一下
    2022-04-04
  • Python语法垃圾回收机制原理解析

    Python语法垃圾回收机制原理解析

    这篇文章主要介绍了Python语法垃圾回收机制原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 详细聊聊为什么Python中0.2+0.1不等于0.3

    详细聊聊为什么Python中0.2+0.1不等于0.3

    最近在学习过程中发现在计算机JS时发现了一个非常有意思事,0.1+0.2的结果不是0.3,而是0.30000000000000004,下面这篇文章主要给大家介绍了关于为什么Python中0.2+0.1不等于0.3的相关资料,需要的朋友可以参考下
    2022-12-12

最新评论