目录

百度API

tkinter界面设计

完整代码


实现结果如下:

百度API

这里聊天机器人的功能也是结合第一篇的语音识别(【python】tkinter界面化+百度API—语音识别_张顺财的博客-CSDN博客)和新的百度API智能对话定制与服务平台去实现的。我们需要在百度AI开放平台-全球领先的人工智能服务平台   或者智能对话定制与服务平台UNIT-百度AI开放平台 去创建获取ID、API key和Secre Key。

进入选择立即使用之后跳转到如下页面,然后选择云端版的免费试用

点击创建机器人,填写信息后创建

创建完机器人我们需要 为机器人添加技能,添加步骤如图所示:

然后是获取我们机器人的ID、API key和Secre Key。

 技术文档看这里:https://ai.baidu.com/ai-doc/UNIT/qkpzeloou

tkinter界面设计

1.界面的初始化及布局:

    def __init__(self):self.ID = '语音识别的ID'self.Key = '语音识别的API key'self.Secret = '语音识别的secret key'# 用语音类创建对象self.client = AipSpeech(self.ID, self.Key, self.Secret)  # 语音识别对象#创建窗口self.page = Tk()# Toplevel() # Tk()self.page.resizable(width=False, height=False)self.page.title('聊天机器人')  #设置标题self. page. geometry('500x800') #设置窗口大小# 打开图像,转为tkinter兼容的对象,img = Image.open('5.jpg').resize([500,800])self.img = ImageTk.PhotoImage(img)#创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.page, width=500, height=800) #设置画布的宽、高self.canvas.place(x=0, y=0)self.canvas.create_image(250,400,image = self.img) #把图像放到画布,默认放置中心点self.canvas.create_text(250, 100, text='聊天机器人', font=('宋体', 40))self.canvas.create_text(110, 170, text='内容:', font=('宋体', 20), fill='green')self.canvas.create_text(110, 270, text='回答:', font=('宋体', 20), fill='blue')# 创建内容文本框self.text = Text(self.page, width=22, height=2, font=('宋体', 20))self.text.place(x=100, y=200)# 创建回答文本框self.Reply = Text(self.page, width=22, height=2, font=('宋体', 20))self.Reply.place(x=100, y=300)# 创建按钮,游客直接登录到单词界面,学生则需验证账号密码Button(self.page, width=8, text='聊天', font=('宋体', 20), fg='white',command=lambda:self.adio_run(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=200, y=600)  # activebackground 设置按键按下有变化 activebforeground设置前景色Button(self.page, width=8, text='返回', font=('宋体', 20), fg='white',command=lambda:self.back(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=200, y=650)Button(self.page, width=5, text='清空', font=('宋体', 20), fg='white',command=lambda: self.delete_text(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=330, y=380)self.page.mainloop(0)

2.access_token的获取模块

    def token(self):Key = '聊天机器人的API key'Secret = '聊天机器人的secret key'url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + Key + '&client_secret=' + Secretresult = requests.post(url)result = result.json()access_token = result['access_token']return access_token

3.智能对话模块(百度API的调用)

    def Unit(self,chat):url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat'url = url + '?access_token=' + self.token()params = {'version': '3.0','service_id': '聊天机器人的ID','log_id': str(random.random()),'session_id': '','request': {'terminal_id': '123456', 'query': chat},}response = requests.post(url=url, json=params)result = response.json()'result{response[{action[{confidence,say'# 报错的处理if result['error_code'] != 0:return '网页正忙'result = result['result']['responses'][0]['actions']reply_act = random.choice([conf for conf in result if conf['confidence'] > 0])reply = reply_act['say']# print(reply)return reply

上面代码里聊天机器人的ID不是APIkey那个界面的ID,而是创建完机器人那个界面的ID。如图:

4.下面是录音模块,文本朗读模块和语音转文本模块的内容

 def get_adio(self, sec=0):p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=16000,input=True,frames_per_buffer=1024)wf = wave.open('test.wav', 'wb')wf.setnchannels(1)wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))wf.setframerate(16000)print('开始说话')stopflag = 0conflag = 0while True:data = stream.read(1024)rt_data = np.frombuffer(data, np.dtype('<i2'))fft_temp_data = fftpack.fft(rt_data, rt_data.size, overwrite_x=True)fft_data = np.abs(fft_temp_data)[0:fft_temp_data.size // 2 + 1]# print(sum(fft_data) // len (fft_data))# 判断麦克风是否停止,判断说话是否结束,#麦克风阀值,默认7000if sum(fft_data) // len(fft_data) > 7000:conflag += 1else:stopflag += 1oneSecond = int(16000 / 1024)if stopflag + conflag > oneSecond:  # 如果两种情况的次数超过一帧的大小if stopflag > oneSecond // 3 * 2:  # 其中无声的部分超过一帧的2/3,则停止breakelse:stopflag = 0conflag = 0wf.writeframes(data)print('停止说话')stream.stop_stream()stream.close()p.terminate()wf.close()return 'test.wav'def say(self,text):engine = pyttsx3.init()engine.say(text)engine.runAndWait()def StoT(self):file = self.get_adio()# 调用对象进行识别,需要为对象传递参数:# 识别三种格式:wav,pcm,amr# 语音文件,语音格式,采样频率,识别ID(1573:中文普通话)Format = file[-3:]data = open(file, 'rb').read()result = self.client.asr(data, Format, 16000, {'dev_pid': 1537})result = result['result'][0]# print(result)return resultdef adio_run(self):self.delete_text()text = self.StoT()self.text.insert('insert',text)# print('原文:', text)reply = self.Unit(text)self.Reply.insert('insert',reply)# print('回答内容:', reply)self.say(reply)

完整代码

from tkinter import *
from PIL import Image,ImageTk
import random
import requests
from scipy import fftpack
import wave
import numpy as np
import pyaudio
import pyttsx3
from aip import  AipSpeech#主界面面设计,创建类,在构造方法中没计界面
class UnitPage():def __init__(self):self.ID = '语音识别的ID'self.Key = '语音识别的API key'self.Secret = '语音识别的secret key'# 用语音类创建对象self.client = AipSpeech(self.ID, self.Key, self.Secret)  # 语音识别对象#创建窗口self.page = Tk()# Toplevel() # Tk()self.page.resizable(width=False, height=False)self.page.title('聊天机器人')  #设置标题self. page. geometry('500x800') #设置窗口大小# 打开图像,转为tkinter兼容的对象,img = Image.open('5.jpg').resize([500,800])self.img = ImageTk.PhotoImage(img)#创建画布,将图像作为画布背景, 铺满整个窗口self.canvas = Canvas(self.page, width=500, height=800) #设置画布的宽、高self.canvas.place(x=0, y=0)self.canvas.create_image(250,400,image = self.img) #把图像放到画布,默认放置中心点self.canvas.create_text(250, 100, text='聊天机器人', font=('宋体', 40))self.canvas.create_text(110, 170, text='内容:', font=('宋体', 20), fill='green')self.canvas.create_text(110, 270, text='回答:', font=('宋体', 20), fill='blue')# 创建内容文本框self.text = Text(self.page, width=22, height=2, font=('宋体', 20))self.text.place(x=100, y=200)# 创建回答文本框self.Reply = Text(self.page, width=22, height=2, font=('宋体', 20))self.Reply.place(x=100, y=300)# 创建按钮,游客直接登录到单词界面,学生则需验证账号密码Button(self.page, width=8, text='聊天', font=('宋体', 20), fg='white',command=lambda:self.adio_run(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=200, y=600)  # activebackground 设置按键按下有变化 activebforeground设置前景色Button(self.page, width=8, text='返回', font=('宋体', 20), fg='white',command=lambda:self.back(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=200, y=650)Button(self.page, width=5, text='清空', font=('宋体', 20), fg='white',command=lambda: self.delete_text(), bg='dodgerblue', activebackground='black',activeforeground='white').place(x=330, y=380)self.page.mainloop(0)def delete_text(self):self.text.delete(0.0, END)self.Reply.delete(0.0, END)def token(self):Key = '聊天机器人的API key'Secret = '聊天机器人的secret key'url = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + Key + '&client_secret=' + Secretresult = requests.post(url)result = result.json()access_token = result['access_token']return access_tokendef get_adio(self, sec=0):p = pyaudio.PyAudio()stream = p.open(format=pyaudio.paInt16,channels=1,rate=16000,input=True,frames_per_buffer=1024)wf = wave.open('test.wav', 'wb')wf.setnchannels(1)wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))wf.setframerate(16000)print('开始说话')stopflag = 0conflag = 0while True:data = stream.read(1024)rt_data = np.frombuffer(data, np.dtype('<i2'))fft_temp_data = fftpack.fft(rt_data, rt_data.size, overwrite_x=True)fft_data = np.abs(fft_temp_data)[0:fft_temp_data.size // 2 + 1]# print(sum(fft_data) // len (fft_data))# 判断麦克风是否停止,判断说话是否结束,#麦克风阀值,默认7000if sum(fft_data) // len(fft_data) > 7000:conflag += 1else:stopflag += 1oneSecond = int(16000 / 1024)if stopflag + conflag > oneSecond:  # 如果两种情况的次数超过一帧的大小if stopflag > oneSecond // 3 * 2:  # 其中无声的部分超过一帧的2/3,则停止breakelse:stopflag = 0conflag = 0wf.writeframes(data)print('停止说话')stream.stop_stream()stream.close()p.terminate()wf.close()return 'test.wav'def say(self,text):engine = pyttsx3.init()engine.say(text)engine.runAndWait()def StoT(self):file = self.get_adio()# 调用对象进行识别,需要为对象传递参数:# 识别三种格式:wav,pcm,amr# 语音文件,语音格式,采样频率,识别ID(1573:中文普通话)Format = file[-3:]data = open(file, 'rb').read()result = self.client.asr(data, Format, 16000, {'dev_pid': 1537})result = result['result'][0]# print(result)return resultdef adio_run(self):self.delete_text()text = self.StoT()self.text.insert('insert',text)# print('原文:', text)reply = self.Unit(text)self.Reply.insert('insert',reply)# print('回答内容:', reply)self.say(reply)def Unit(self,chat):url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat'url = url + '?access_token=' + self.token()params = {'version': '3.0','service_id': '聊天机器人的ID','log_id': str(random.random()),'session_id': '','request': {'terminal_id': '123456', 'query': chat},}response = requests.post(url=url, json=params)result = response.json()'result{response[{action[{confidence,say'# 报错的处理if result['error_code'] != 0:return '网页正忙'result = result['result']['responses'][0]['actions']reply_act = random.choice([conf for conf in result if conf['confidence'] > 0])reply = reply_act['say']# print(reply)return replydef back(self):self.page.destroy()UnitPage()

【python】tkinter界面化+百度API—聊天机器人(四)相关推荐

  1. 【python】tkinter界面化+百度API—人脸检测(三)

    目录 百度API tkinter界面设计. 完整代码 实现结果如下: 百度API 人脸检测也是调用百度API去实现的.所以我们需要在百度AI开放平台-全球领先的人工智能服务平台里去进行人脸检测与属性分 ...

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

    使用 Python 实现一个简单的智能聊天机器人 文章目录 使用 Python 实现一个简单的智能聊天机器人 简要说明 总体的思路 需要准备的环境 接收用户的语音输入, 并将其存为音频文件 调用百度A ...

  3. (附完整代码和实验报告)【python 大作业】实现一个聊天机器人,关键词双重查找,结合语境查找,爬虫查询,图形化界面,语音播报。

    完整项目分享: 链接:https://pan.baidu.com/s/17GO0RoyMs2qwCoxcvFiHkg 提取码:5969 (如果这个项目帮助到你了,麻烦点个赞,谢谢) 1.实现功能: 1 ...

  4. python 机器人聊天_使用python构建您的第一个聊天机器人并将其集成到电报中

    python 机器人聊天 Did you know? 你知道吗? "Chatbots can cut operational costs by up to 30%. eCommerce ch ...

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

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

  6. 界面按钮太多 聊天机器人都快被玩坏了

    10月8日消息,据VentureBeat报道,分析聊天机器人工具Dashbot.io近来处理的信息超过7000万条.对于开发者来说,在此期间最常遇到的问题之一就是界面按钮太多.自由形式的文本输入与按钮 ...

  7. python tkinter界面 控件位置随窗体自动调整适应_如何实现python tkinter控件随窗口变化?...

    不管是对于Java还是对于Python,我们最开始学习的时候,都会碰到关于开发上的窗口设置,如果不设置这个内容,你所呈现的项目效果,是非常不美观的,而往往为了符合美化,大家都会花费很多心思在基础的窗口 ...

  8. python实战篇(五)---百度api实现车型识别

    十二年来,有笑泪,有阴晴,相伴一场,人来人往,只是日常.--蔡康永 前言 api全称为应用程序接口,说白了就是别人写好了一个可实现功能的函数接口,我们可以直接调用来实现功能,今天,我们一起来学习,用百 ...

  9. python tkinter界面布局,python图形界面tkinter布局那些事

    布局 任何界面都有自己的布局风格,有些是横向布局,有些是纵向布局,有些是流水布局,还有些是网格布局,总之布局就是一种考虑如何放置元素或者组件的一种说明方式. 包裹(包装)布局 thinter中使用pa ...

最新文章

  1. 计算机组成原理 — 服务器组成
  2. LeetCode Shortest Unsorted Continuous Subarray
  3. C语言经典例40-逆置数组
  4. 四元数(Quaternion)和欧拉角(Eulerangle)
  5. 使用.NET类库操作CSV文件
  6. Java 重定向 无法写入_java IO 文件读入,写入,重定向
  7. eclipse+tomcat开发web程序
  8. 磁盘Raid方案简单对比
  9. C语言程序设计打鱼还是晒网,C语言编程三天打鱼两天晒网
  10. c语言博客作业03-函数
  11. xbanner 动画特效设置android,Axure教程:如何实现爱彼迎App首页Banner的切换效果
  12. 11 个非常受欢迎的 JavaScript 动画库
  13. spring4+struts2+hibernate5整合出现spring异常
  14. 二范数-特征值的意义-矩阵范数-向量范数-
  15. 翻译「C++ Rvalue References Explained」C++右值引用详解 Part3:右值引用
  16. python如何删除对象_Python-从列表中删除对象
  17. 土方回填施工方案范本_外购土方回填施工方案
  18. GET请求淘宝H5页面获取商品信息
  19. mac安装appium环境 iPhone真机测试
  20. 联想电脑u盘安装Linux,如何使用u盘安装linux系统

热门文章

  1. 使用python turtle库13行代码实现奥运五环
  2. PMP学习笔记 第13章 项目相关方管理
  3. 多链钱包鼻祖bitpay 10.0.1最新版官方版下载和使用方法
  4. ubuntu 刷新频率 如何查看_Ubuntu分辨率和刷新频率设置
  5. 摄影曝光口诀_通过学习曝光元素来改善摄影
  6. 阿里巴巴离职DBA 35岁总结的职业生涯-职业规划
  7. 谷歌研究利用AI合成图片,使静态图片动起来
  8. 一款功能强大的设备调试、接口调试工具
  9. android 系统gpu 调试_基于Android系统的GPU动态调频方案 | Imagination中文技术社区
  10. 用Python绘制各国新冠肺炎确诊病例发展趋势图