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

简要说明

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

总体的思路

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

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

许多现成的库函数可以安装在这里,以帮助我们的系统的实施。

[En]

Many ready-made library functions can be installed here to assist the implementation of our system.

需要准备的环境

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

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

然后我会逐步实现上面的每一个功能,最后把它们放在一起。

[En]

Then I will gradually implement each of the above functions, and finally put them together.

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

import timeimport wavefrom pyaudio import PyAudio, paInt16framerate = 16000  # 采样率num_samples = 2000  # 采样点channels = 1  # 声道sampwidth = 2  # 采样宽度2bytesFILEPATH = '../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开放平台,搜索 语音识别。

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

单击以立即使用。如果您没有帐户,您可以先创建一个帐户,然后获取免费资源以供使用。

[En]

Click to use now. If you don’t have an account, you can create an account first, and then get free resources to use.

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

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

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

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

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

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

您可以查看接口文档并执行特定的接口操作

[En]

You can view the interface documentation and perform specific interface operations

使用 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):        # 调用百度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'}

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

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

[En]

Before our teacher recommended me to use Turing robot intelligent chat, but later found that the certification has been unable to pass, and need to pay a fee.

后来发现了一个免费、无需注册、只需要发送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 pyttsx3class 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)                 #播放回答信息

跑步的结果(发现很难)

[En]

The result of running (found to be very hard)

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

后续

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

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

Original: https://blog.51cto.com/u_10487107/5561010
Author: 周萝卜123
Title: 使用 Python 实现一个简单的智能聊天机器人

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

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

(0)

大家都在看

  • ubuntu系统配置pytorch环境(安装conda)

    根据自己浅薄的理解或我之前的习惯,先安装conda(anaconda),再配置cuda(包括cudatookit、cuda drivers、cudnn),然后用conda去安装py…

    Python 2023年9月9日
    060
  • 【教程】FastAPI-Amis-Admin注册SQLModel模型管理类,快速实现数据的增删改查(CRUD)

    fastapi-amis-admin中的模型管理类 ModelAdmin与 Django-admin中的 ModelAdmin使用方法非常相似,也具备 django-admin中的…

    Python 2023年8月4日
    044
  • pygame练习の球球

    Pygame是一个开源的Python模块,专门用于多媒体应用(如电子游戏)的开发,其中包含对图像、声音、视频、事件、碰撞等的支持。Pygame建立在SDL的基础上,SDL是一套跨平…

    Python 2023年9月24日
    051
  • Python数据分析|Numpy学习(一)

    重要的Python库 使用NumPy,可以执行以下操作: 多维数组的算数和逻辑运算。 基于元素的数组计算或者数组间数学操作函数 用于读写硬盘中的基于数组的数据集的工具 傅立叶变换和…

    Python 2023年8月26日
    060
  • 飞机大战小游戏源码—飞机大战初体验

    开发环境: Windows10,pycharm,python3 源码使用教程: 打开pycharm,创建一个新的项目,文件–>新建项目 项目命名:飞机大战初体验,…

    Python 2023年9月19日
    057
  • python中pygame库的功能_python中pygame模块用法实例

    本文实例讲述了python中pygame模块用法,分享给大家供大家参考。具体方法如下: import pygame, sys from pygame.locals import *…

    Python 2023年9月20日
    074
  • 北斗GPS校时器,卫星时钟服务器,NTP网络授时服务器

    北斗GPS校时器,卫星时钟服务器,NTP网络授时服务器 北斗GPS校时器,卫星时钟服务器,NTP网络授时服务器 京准电子科技 官微——ahjzsz 【摘要】时钟系统是一个大型标准计…

    Python 2023年10月28日
    042
  • 除了 filter 还有什么置灰网站的方式?

    大家都知道,当一些重大事件发生的时候,我们的网站,可能需要置灰,像是这样: 当然,通常而言,全站置灰是非常简单的事情,大部分前端同学都知道,仅仅需要使用一行 CSS,就能实现全站置…

    Python 2023年10月13日
    039
  • ORM的增删改查

    增:添加数据 利用模型类创建对象来进行增加 语法: 对象名 = 模型类(字段=值) 需要自己手动保存对象名.save() 利用模型类管理器增加数据 语法: 模型类.objects….

    Python 2023年11月2日
    061
  • 【算法入门&搜索法】走迷宫|单源最短路径1

    ✅作者简介:热爱后端语言的大学生,CSDN内容合伙人✨精品专栏:C++面向对象🔥系列专栏:算法百炼成神 文章目录 🔥前言 1、AB20 走迷宫 * 1.1、解题思路 1.2、代码实…

    Python 2023年10月27日
    037
  • 【python】matplotlib 实现双(多)Y轴图

    【python】matplotlib 实现双(多)Y轴图 先来点简单的 两个Y轴 三个以及多个Y轴 来亿点点美化 先来点简单的 先来个最简单的画图,比如一个 y = s i n (…

    Python 2023年8月30日
    041
  • 可视化分析(机器学习)

    目录 一、实验内容 二、实验过程 1、算法思想: 2、算法原理 3、算法分析 (1)需求分析 (2)数据预处理 (3)分析与建模 (4)模型评价与优化 (5)部署 三、源程序代码 …

    Python 2023年9月29日
    073
  • python数据分析day6

    目录 1.911数据分析实战 2.pandas时间序列 3.pm2.5项目实战 1.911数据分析实战 如果遇到文件的数据量比较大,默认打印无法全部显示。 可以尝试输入以下代码: …

    Python 2023年8月16日
    041
  • Pandas DataFrame

    #### DataFrame * 三个基本属性:values,columns,index Pandas DataFrame.values属性返回对应的二维数组的numpy数值, P…

    Python 2023年8月6日
    042
  • 我不谈ChatGPT

    (1)数据 有两个未经证实的传闻: 1、客服问答:80%用户问的问题都是那20%常见问题,但是就是这样,占用了客服人员80%的工作量和工作时间 2、资讯搜索:谷歌一位员工说,在互联…

    Python 2023年11月3日
    053
  • 《吐血整理》高级系列教程-吃透Fiddler抓包教程(24)-Fiddler如何优雅地在正式和测试环境之间来回切换-中篇

    1.简介 在开发或者测试的过程中,由于项目环境比较多,往往需要来来回回地反复切换,那么如何优雅地切换呢?宏哥今天介绍几种方法供小伙伴或者童鞋们进行参考。 2.实际工作场景 2.1问…

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