编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

逆天了!能控制电脑还能和你聊天的机器人?

wxchong 2024-07-06 00:54:08 开源技术 12 ℃ 0 评论

作为复仇者联盟的智慧和财富担当,你是否羡慕托尼斯塔克,给不了你小辣椒,给不了你钢铁战甲,就用python实现一个贾维斯吧。利用python的GUI编程,结合图灵机器人和百度语音识别,给你一个能控制电脑还能和你智能对话聊天的桌面软件

第三方库

pip install pyttsx3

pip install requests

pip install pypiwin32

pip install PyAudio

  1. 完成这个桌面软件,首先你得先创建桌面软件



导入第三方库

from tkinter import *

# 实例化 创建一个GUI对象

master = Tk()

# 设置标题

master.title('贾维斯')

# 设置窗体大小以及出现在屏幕上面的位置

# 宽x高+X轴+Y轴

# 此处有坑,不是*,而是x

master.geometry('300x100+450+300')

master.resizable(False,False)

# 设置标签

# # 网格布局

Label(master,text='输入指令:',font=('黑体',18),fg='blue').grid()

# Label(master,text.txt='结果:',font=('黑体',18),fg='blue').grid(row=1,column=0)

# 设置第一个输入框

entry1 = Entry(master)

# 网格布局

entry1.grid(row=0,column=1)

button1 = Button(master,text='运行',width=10,command=action)

button1.grid(row=1,column=0)

button = Button(master,text='声控',width=10)

button.grid(row=1,column=1)

button.bind("<Button-1>",ok)

button.bind("<ButtonRelease-1>",voiceControl)

# 消息循环

master.mainloop()

2.有了桌面软件之后,需要去完善操控方法

引入另外一份文件

import Control

def action():

# 获取输入框的内容

data = entry1.get().strip()

# 根据内容执行操作

control = Control.Order()

# 运行指令

control.run(data)</pre>

  1. 完成了通过文字输入来操控电脑,接下来我们事先通过语音来控制

这里我们需要引入第二份文件进行录制音频,然后借助百度的语音识别转成文字



from aip import AipSpeech
import Recorder



# 实例化对象

rec = Recorder.Recorder()

def ok(event):

print('开始录音')

rec.start()

def no():

print('结束录音')

# 结束录音

rec.stop()

# 保存音频

file = rec.save('audio')

# 调用百度aip语音识别转义成文字

APP_ID = '16396825'

API_KEY = 'ryPOMzsWAqmI2y5o2nma25uV'

SECRET_KEY = '2LYcqQ23IX01C9YWBQOFec3pUB0YOvvS'

client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)

with open(file,'rb') as fp:

data = fp.read()

result = client.asr(data,'wav',16000,{

'dev_pid':1536

})

print(result)

try:

data = result['result'][0]

except Exception as err:

exit(err)

return data

除了操控还可以智能聊天

import pyttsx3
import requests
import json
def voiceControl(event):
 result = no()
 print(result)
 # 提取前三位,判断是操控还是聊天
 data = result[0:3]
 order = result[3:]
 if data =='贾维斯':
 control = Control.Order()
 control.run(order)
 else:
 show(result)
def show(content):
 # 构造请求参数
 request_data = {
 "key":"d3c006b99ee94e28b6d8340f68577f02",
 "info":content,
 "userid":"laoyang"
 }
 # 构造请求url
 url = "http://www.tuling123.com/openapi/api"
 # 发送请求
 result = requests.post(url,request_data)
 # 转换格式
 response = json.loads(result.text)
 # 语音输出
 engine = pyttsx3.init()
 engine.say(response['text'])
 engine.runAndWait()

完整代码

from tkinter import *
from aip import AipSpeech
import Recorder
import Control
import pyttsx3
import requests
import json
def action():
 # 获取输入框的内容
 data = entry1.get().strip()
 # 根据内容执行操作
 control = Control.Order()
 # 运行指令
 control.run(data)
# 实例化对象
rec = Recorder.Recorder()
def ok(event):
 print('开始录音')
 rec.start()
def no():
 print('结束录音')
 # 结束录音
 rec.stop()
 # 保存音频
 file = rec.save('audio')
 # 调用百度aip语音识别转义成文字
 APP_ID = '16396825'
 API_KEY = 'ryPOMzsWAqmI2y5o2nma25uV'
 SECRET_KEY = '2LYcqQ23IX01C9YWBQOFec3pUB0YOvvS'
 client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)
 with open(file,'rb') as fp:
 data = fp.read()
 result = client.asr(data,'wav',16000,{
 'dev_pid':1536
 })
 print(result)
 # 如果周围比较吵,会识别不出来
 try:
 data = result['result'][0]
 except Exception as err:
 exit(err)
 return data
def voiceControl(event):
 result = no()
 print(result)
 # 提取前三位,判断是操控还是聊天
 data = result[0:3]
 order = result[3:]
 if data =='贾维斯':
 control = Control.Order()
 control.run(order)
 else:
 show(result)
def show(content):
 # 构造请求参数
 request_data = {
 "key":"d3c006b99ee94e28b6d8340f68577f02",
 "info":content,
 "userid":"laoyang"
 }
 # 构造请求url
 url = "http://www.tuling123.com/openapi/api"
 # 发送请求
 result = requests.post(url,request_data)
 # 转换格式
 response = json.loads(result.text)
 # 语音输出
 engine = pyttsx3.init()
 engine.say(response['text'])
 engine.runAndWait()
# exit()
# 实例化 创建一个GUI对象
master = Tk()
# 设置标题
master.title('贾维斯')
# 设置窗体大小以及出现在屏幕上面的位置
# 宽x高+X轴+Y轴
# 此处有坑,不是*,而是x
master.geometry('300x100+450+300')
master.resizable(False,False)
# 设置标签
# # 网格布局
Label(master,text='输入指令:',font=('黑体',18),fg='blue').grid()
# Label(master,text.txt='结果:',font=('黑体',18),fg='blue').grid(row=1,column=0)
# 设置第一个输入框
entry1 = Entry(master)
# 网格布局
entry1.grid(row=0,column=1)
button1 = Button(master,text='运行',width=10,command=action)
button1.grid(row=1,column=0)
button = Button(master,text='声控',width=10)
button.grid(row=1,column=1)
button.bind("<Button-1>",ok)
button.bind("<ButtonRelease-1>",voiceControl)
# 消息循环
master.mainloop()


最后,小编想说:我是一名python开发工程师,

整理了一套最新的python系统学习教程,

想要这些资料的可以关注私信小编“01”即可,希望能对你有所帮助

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表