使用 Python 实现一个简单的智能聊天机器人

使用 Python 实现一个简单的智能聊天机器人

文章目录

*

+ 使用 Python 实现一个简单的智能聊天机器人
+
* 简要说明
* 总体的思路
* 需要准备的环境
* 接收用户的语音输入, 并将其存为音频文件
* 调用百度AI接口, 识别音频文件并以文本信息返回
* 请求智能机器人, 发送文本信息, 返回智能聊天内容
* 将回答信息转化为语音文件并输出
* 组合成为自动聊天机器人(它很硬气)
* 后续

简要说明

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

总体的思路

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

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

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

需要准备的环境

以下是需要安装的一些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
FILEPATH = '../voices/myvoices.wav'

class Speak():

    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 = 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:

            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开放平台,搜索 语音识别

使用 Python 实现一个简单的智能聊天机器人

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

使用 Python 实现一个简单的智能聊天机器人

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

使用 Python 实现一个简单的智能聊天机器人

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

使用 Python 实现一个简单的智能聊天机器人

使用 Python 实现一个简单的智能聊天机器人
使用 Python 实现一个简单的智能聊天机器人

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

使用 Python 实现一个简单的智能聊天机器人

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

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):

         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]

    print("本人说:", text)
    response_dialogue = talkWithRobot(text)
    print("青云客说:", response_dialogue)

    robotSay.say(response_dialogue)

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

"""
正在讲话...

讲话结束...

本人说: 你好呀。
青云客说: 哟~ 都好都好
正在讲话...

讲话结束...

本人说: 你叫什么名字呀?
青云客说: 我是小美人菲菲呀~
正在讲话...

讲话结束...

本人说: 哇,那你多美呀。
青云客说: 你似有問題多啲囉!

正在讲话...

讲话结束...

本人说: 我好看吗?
青云客说: 你真是个地道的美人啊。就是说你只有在地道里才算美人,因为地道里没灯
正在讲话...

讲话结束...

本人说: 你可真是个小可爱呀。
青云客说: 呀,你怎么知道。。。我就是啊。。
正在讲话...

讲话结束...

本人说: 不和你说了。
青云客说: 不说拉倒
"""

后续

现在就是功能的一个简单组合, 之后会做出来一个GUI界面,多增加点功能,分享给大家!

Original: https://blog.csdn.net/weixin_43479947/article/details/124256347
Author: Gaolw1102
Title: 使用 Python 实现一个简单的智能聊天机器人

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/671496/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球