使用 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, paInt16framerate = 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()# 打开一个新的音频streamstream = 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 2000framesstring_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 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)                 #播放回答信息

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

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

后续

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

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

  1. 使用 Python 实现一个简单的智能聊天机器人(附完整代码)

    文章目录 简要说明 总体的思路 需要准备的环境 接收用户的语音输入,并将其存为音频文件 技术提升 调用百度AI接口, 识别音频文件并以文本信息返回 请求智能机器人, 发送文本信息, 返回智能聊天内容 ...

  2. 实战|轻松用 Python 开发一个简单有趣的聊天小程序

    前言 Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol). UDP 为应用程序提供了一种无需建立连接就可以发送封装的 I ...

  3. [Easyx\C++]一个简单的QQ聊天机器人的实现

    最近看到个很智能的聊天机器人,于是我也想着自己是不是也可以做一个 于是经过一番查询,我发现方法有很多(识图,买机器人服务之类的),比较麻烦. 然后这时候我蹦出了一个清奇的想法- 我可不可以直接右键聊天 ...

  4. 如何用图灵添加一个简单的QQ聊天机器人

    tip:这里是使用简单的软件,添加一个QQ聊天机器人, 如果想要用代码实现, 请按Ctrl + F4 本文比较墨迹, 看的懂的话, 请开3倍速.本文写于2017/05/9,过期就不用看了 1.进入图灵 ...

  5. 用Python实现一个简单的智能换脸软件

    智能换脸软件 基本信息介绍 软件名称 软件名称是Picture Faceswap,表示图片换脸,是一款图片换脸软件. 软件功能 已知一幅A的人脸图像,新输入一张B的人脸图像,按下换脸键后,将A的图像自 ...

  6. python制作一个简单的udp聊天器

    UDP协议 英文名:User Datagram Protocol 中文名:数据报协议 协议说明:UDP是一种面向无连接的传输层通信协议. 举例:发短信,不需要双方建立连接,数据报的大小应限制在64k以 ...

  7. Python|使用 TCP 协议实现智能聊天机器人

    实验内容: 1.熟悉标准库 socket 的用法. 2.熟悉 TCP 协议工作原理. 3.理解端口号的概念与作用. 4.熟悉 Socket 编程.编写聊天程序的服务端代码和客户端代码.完成后,先启动服 ...

  8. Python使用 TCP协议实现智能聊天机器人功能

    目录 1.TCP协议简单介绍(传输控制协议) 2.代码实现 3.进行聊天 1.TCP协议简单介绍(传输控制协议) TCP协议是在计算机网络TCP/IP体系中非常重要而且复杂的一个协议,它主要服务于传输 ...

  9. php百度大脑,百度大脑和图灵机器人制作一个简单的自动聊天机器人【PHP代码】...

    可以和机器人聊天 文字发送消息 网页进行语音回复 这里主要用到了两个接口 一个是百度大脑  用来实现语音合成 一个是图灵机器人用来实现自动聊天 以下是代码分两个版本 版本一是没有语音合成 版本二是加上 ...

最新文章

  1. 【设计模式】-写在前面
  2. zookeeper kafka迁移后logstash消费不了Kafka消息
  3. 佳能MP258的5200错误和P08代码解决方法及清零方法
  4. [html] title与h1、b与strong、i与em的区别分别是什么?
  5. 笔记本电脑键盘切换_有哪些好用的办公键盘
  6. 任意切割一张图片成新图片
  7. 开源软件的许可(License)
  8. winform 往第三方传值 put
  9. 创建分布式爬虫的步骤
  10. 【解决】当前操作环境不支持支付宝控件/一直处于“正在安装证书“中
  11. 鸿蒙HMS大势渐成,P40系列开启华为终端新征程
  12. Automation Anywhere, Blue Prism, UiPath, Pega, 码栈功能对比大全
  13. linux设置家目录,usermod更改用户家目录
  14. 【Grafana】个人体验
  15. MATLAB中median函数
  16. 5750G GT540M显卡游戏蓝屏的终极解决方法!
  17. 淘宝七天自动确认收货,怎么设计?RabbitMQ延迟队列,消息延迟推送delayed_message入门教程!
  18. 手机怎么识别图片上的文字
  19. Global Round 16D2. Seating Arrangements (hard version)(模拟,贪心)
  20. 中国象棋对局软件设计(四)[完]

热门文章

  1. linux 看内存和硬盘型号,Linux下查看CPU、内存和硬盘型号及相关信息命令
  2. 使用C#对Word进行读写、搜索、插入图片等操作
  3. 编写shell脚步--读取键盘输入
  4. 数据库系统概念读书笔记-引言
  5. windows无法配置此无线连接_用Windows 10上网时无法连接无线网怎么办?5种方案帮你解决...
  6. 参数估计—最大似然估计与贝叶斯估计
  7. 企业微信关联微信小程序,小程序端登录授权的改造实现
  8. java web项目保证代码QA的一些工具
  9. 国产手机迈入关键时期,弯道超车指日可待?
  10. Vczh Library++3.0 开源啦!