Python 实现简单智能聊天机器人

 更新时间:2022年05月30日 11:39:13   作者:​ Python编程学习圈   ​  
这篇文章主要介绍了Python 实现简单智能聊天机器人,首先通过计算机接收用户的语音输入再将用户输入的语音输入转化为文本信息展开实现过程,需要的小伙伴可以参考一下

简要说明:

最近两天需要做一个python的小程序, 就是实现人与智能机器人(智能对话接口)的对话功能,目前刚刚测试了一下可以实现, 就是能够实现个人与机器的智能对话(语音交流)。

总体的思路:

大家可以设想一下, 如果要实现人与机器的智能对话, 肯定要有以下几个步骤:

  • 计算机接收用户的语音输入
  • 将用户输入的语音输入转化为文本信息
  • 调用智能对话接口, 发送请求文本信息, 获取接口返回的智能回答文本信息
  • 将回答文本信息转化为语音格式输出

这里可以安装很多现成的库函数, 辅助我们系统的实现。

需要准备的环境

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

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

接下来我会逐步实现以上每个功能,最后再组合起来。

接收用户的语音输入,并将其存为音频文件

import time
import wave
from pyaudio import PyAudio, paInt16
framerate = 16000  # 采样率
num_samples = 2000  # 采样点
channels = 1  # 声道
sampwidth = 2  # 采样宽度2bytes
FILEPATH = '../voices/myvoices.wav'      #该文件目录要存在
#用于接收用户的语音输入, 并生成wav音频文件(wav、pcm、mp3的区别可详情百度)
class Speak():
    #将音频数据保存到wav文件之中
    def save_wave_file(self, filepath, data):
        wf = wave.open(filepath, 'wb')
        wf.setnchannels(channels)
        wf.setsampwidth(sampwidth)
        wf.setframerate(framerate)
        wf.writeframes(b''.join(data))
        wf.close()
    # 进行语音录制工作
    def my_record(self):
        pa = PyAudio()
        # 打开一个新的音频stream
        stream = pa.open(format=paInt16, channels=channels,
                         rate=framerate, input=True, frames_per_buffer=num_samples)
        my_buf = []  # 存放录音数据
        t = time.time()
        print('正在讲话...')
       while time.time() < t + 5:  # 设置录音时间(秒)
            # 循环read,每次read 2000frames
            string_audio_data = stream.read(num_samples)
            my_buf.append(string_audio_data)
        print('讲话结束')
        self.save_wave_file(FILEPATH, my_buf)    #保存下录音数据
        stream.close()

调用百度AI接口, 识别音频文件并以文本信息返回

之前使用过好几次百度AI的接口,我的毕业设计<在线课堂学生异常行为与分析>也是使用到了百度的智能平台,个人调试的话有很多免费产品,总体来说百度在人工智能领域做得还是相当不错的。

在调用百度AI接口之前,需要首先进入百度AI开放平台,搜索语音识别

 点击立即使用,没有账号的话可以先创建一个账号,然后领取免费的资源使用

我之前已经创建1个了, 假设再次点击创建

系统会自动勾选上语音识别接口,直接创建应用即可,之后会有 AppID、 API Key、Secret Key, 之后调用百度接口直接调用即可。

可以查看接口文档,进行具体的接口操作

 前奏准备好, 便可以直接调用接口进行语音识别

from aip import AipSpeech
""" 你的 APPID AK SK """
APP_ID = '25990397'
API_KEY = 'iS91n0uEOujkMIlsOTLxiVOc'
SECRET_KEY = ''              #此处填写自己的密钥
"""调用接口, 调用BaiDu AI 接口进行录音、语音识别"""
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
class ReadWav():
    # 读取文件
    def get_file_content(self, filePath):
        with open(filePath, 'rb') as fp:
            return fp.read()
    def predict(self):
        # 调用百度AI的接口, 识别本地文件
         return client.asr(self.get_file_content('../voices/myvoices.wav'), 'wav', 16000, {
            'dev_pid': 1537,
        })
readWav = ReadWav()          #实例化方法
print(readWav.predict())      #调用识别方法, 并输出

执行结果 ( 音频文件存的录音是: 你叫什么名字呀?)

{'corpus_no': '7087884083428433929', 'err_msg': 'success.', 'err_no': 0, 'result': ['你叫什么名字呀?'], 'sn': '255158586831650276613'}

 请求智能机器人, 发送文本信息, 返回智能聊天内容

之前我们老师推荐我使用图灵机器人的智能聊天,后来发现认证一直无法通过,且需要付费。

后来发现了一个免费、无需注册、只需要发送get请求就可实现聊天的青云客智能机器人,直接调用接口即可。

代码如下:

def talkWithRobot(msg):
    url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
    html = requests.get(url)
    return html.json()["content"]
print(talkWithRobot("你好呀!"))

 输出:

哟~ 都好都好

 将回答信息转化为语音文件并输出

此处需要导入pyttsx3包,具体代码如下:​​​​

import pyttsx3
class RobotSay():
    def __init__(self):
        # 初始化语音
        self.engine = pyttsx3.init()  # 初始化语音库

        # 设置语速
        self.rate = self.engine.getProperty('rate')
        self.engine.setProperty('rate', self.rate - 50)
    def say(self, msg):
        # 输出语音
        self.engine.say(msg)  # 合成语音
        self.engine.runAndWait()
robotSay = RobotSay()
robotSay.say("你好呀")          #会讲出    ~你好呀(女声)
复制代码

 组合成为自动聊天机器人(它很硬气)

代码如下:

def talkWithRobot(msg):
    url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg={}'.format(urllib.parse.quote(msg))
    html = requests.get(url)
    return html.json()["content"]
robotSay = RobotSay()
speak = Speak()
readTalk = ReadWav()
while True:
    speak.my_record()                               #录音
    text = readTalk.predict()['result'][0]          #调用百度AI接口, 将录音转化为文本信息
    print("本人说:", text)                           #输出文本信息
    response_dialogue = talkWithRobot(text)         #调用青云客机器人回答文本信息并返回
    print("青云客说:", response_dialogue)             #输出回答文本信息
    robotSay.say(response_dialogue)                 #播放回答信息

 运行结果(发现它很硬气)

"""
正在讲话...
讲话结束...
本人说: 你好呀。
青云客说: 哟~ 都好都好
正在讲话...
讲话结束...
本人说: 你叫什么名字呀?
青云客说: 我是小美人菲菲呀~
正在讲话...
讲话结束...
本人说: 哇,那你多美呀。
青云客说: 你似有問題多啲囉!
正在讲话...
讲话结束...
本人说: 我好看吗?
青云客说: 你真是个地道的美人啊。就是说你只有在地道里才算美人,因为地道里没灯
正在讲话...
讲话结束...
本人说: 你可真是个小可爱呀。
青云客说: 呀,你怎么知道。。。我就是啊。。
正在讲话...
讲话结束...
本人说: 不和你说了。
青云客说: 不说拉倒
"""

到此这篇关于Python 实现简单智能聊天机器人的文章就介绍到这了,更多相关Python 实现聊天机器人内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python pycharm提交代码遇到冲突解决方法

    Python pycharm提交代码遇到冲突解决方法

    这篇文章主要介绍了Python pycharm提交代码遇到冲突解决方法,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-08-08
  • Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加)

    今天小编就为大家分享一篇Tensorflow矩阵运算实例(矩阵相乘,点乘,行/列累加),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • 如何使用 Python 读取文件和照片的创建日期

    如何使用 Python 读取文件和照片的创建日期

    这篇文章主要介绍了如何使用 Python 读取文件和照片的创建日期,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Keras使用ImageNet上预训练的模型方式

    Keras使用ImageNet上预训练的模型方式

    这篇文章主要介绍了Keras使用ImageNet上预训练的模型方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)

    Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法(亲测100%有效)

    最近很多朋友给小编留言在安装PaddleX的时候总是出现各种奇葩问题,不知道该怎么处理,今天小编通过本文给大家介绍下Python Pycharm虚拟下百度飞浆PaddleX安装报错问题及处理方法,真的有效,遇到同样问题的朋友快来参考下吧
    2021-05-05
  • Python 框架 FastAPI详解

    Python 框架 FastAPI详解

    FastAPI 是一个现代、快速且高性能的 Web 框架,用于 Python 3.6+,基于 Python 类型提示构建 API,它通过 Starlette 和 Pydantic 优化,支持多种 HTTP 方法、异步编程、数据验证和自动生成交互式文档,FastAPI 适合快速开发高性能、可扩展的 Web 服务
    2024-11-11
  • Python编程实现删除VC临时文件及Debug目录的方法

    Python编程实现删除VC临时文件及Debug目录的方法

    这篇文章主要介绍了Python编程实现删除VC临时文件及Debug目录的方法,涉及Python针对文件与目录的遍历、删除等相关操作技巧,需要的朋友可以参考下
    2017-03-03
  • python类属性学习深入讲解

    python类属性学习深入讲解

    这篇文章主要介绍了python类属性学习深入讲解,文中对于python的类属性的理解有正在学习python的同学可以一块学习下
    2021-03-03
  • 关于python的第三方库下载与更改方式

    关于python的第三方库下载与更改方式

    这篇文章主要介绍了关于python的第三方库下载与更改方式,使用python的朋友都知道python有很多非常方便的第三方库可以使用,那么如果下载这些第三方库呢,今天小编就带你们来看看
    2023-04-04
  • Python 实现Image和Ndarray互相转换

    Python 实现Image和Ndarray互相转换

    今天小编就为大家分享一篇Python 实现Image和Ndarray互相转换,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02

最新评论