带有基维图形用户界面的语音助手



大家好,我正在使用python进行语音助手项目,我想为助手开发一个只有两个按钮开始和退出的kivy GUI。我做按钮,但我在将按钮与助手脚本连接时遇到了麻烦,我对 kivy 太业余了,有什么原因请帮忙,我会非常感谢 这些是我的文件: main.py(用于辅助脚本(:

import speech_recognition as sr  # recognise speech
import playsound  # to play an audio file
from gtts import gTTS  # google text to speech
import random
from time import ctime  # get time details
import webbrowser  # open browser
import ssl
import certifi
import time
import os  # to remove created audio files
from PIL import Image
import subprocess
import pyautogui  # screenshot
import pyttsx3
import bs4 as bs
import urllib.request

class person:
name = ''
def setName(self, name):
self.name = name

class asis:
name = ''
def setName(self, name):
self.name = name

def there_exists(terms):
for term in terms:
if term in voice_data:
return True

def engine_speak(text):
text = str(text)
engine.say(text)
engine.runAndWait()

r = sr.Recognizer()  # initialise a recogniser

# listen for audio and convert it to text:
def record_audio(ask=""):
with sr.Microphone() as source:  # microphone as source
if ask:
engine_speak(ask)
audio = r.listen(source, 5, 5)  # listen for the audio via source
print("Done Listening")
voice_data = ''
try:
voice_data = r.recognize_google(audio)  # convert audio to text
except sr.UnknownValueError:  # error: recognizer does not understand
engine_speak('I did not get that')
except sr.RequestError:
engine_speak('Sorry, the service is down')  # error: recognizer is not connected
print(">>", voice_data.lower())  # print what user said
return voice_data.lower()

# get string and make a audio file to be played
def engine_speak(audio_string):
audio_string = str(audio_string)
tts = gTTS(text=audio_string, lang='en')  # text to speech(voice)
r = random.randint(1, 20000000)
audio_file = 'audio' + str(r) + '.mp3'
tts.save(audio_file)  # save as mp3
playsound.playsound(audio_file)  # play the audio file
print(asis_obj.name + ":", audio_string)  # print what app said
os.remove(audio_file)  # remove audio file

def respond(voice_data):
# 1: greeting
if there_exists(['hey', 'hi', 'hello']):
greetings = ["hey, how can I help you" + person_obj.name, "hey, what's up?" + person_obj.name,
"I'm listening" + person_obj.name, "how can I help you?" + person_obj.name,
"hello" + person_obj.name]
greet = greetings[random.randint(0, len(greetings) - 1)]
engine_speak(greet)
# 2: name
if there_exists(["what is your name", "what's your name", "tell me your name"]):
if person_obj.name:
engine_speak("whats with my name ")
else:
engine_speak("my name is Jexi . what's your name?")
if there_exists(["my name is"]):
person_name = voice_data.split("is")[-1].strip()
engine_speak("okay, i will remember that " + person_name)
person_obj.setName(person_name)  # remember name in person object
if there_exists(["your name should be"]):
asis_name = voice_data.split("be")[-1].strip()
engine_speak("okay, i will remember that my name is " + asis_name)
asis_obj.setName(asis_name)  # remember name in asis object

# 3: greeting
if there_exists(["how are you", "how are you doing"]):
engine_speak("I'm very well, thanks for asking " + person_obj.name)
# 4: time
if there_exists(["what's the time", "tell me the time", "what time is it"]):
time = ctime().split(" ")[3].split(":")[0:2]
if time[0] == "00":
hours = '12'
else:
hours = time[0]
minutes = time[1]
time = hours + " hours and " + minutes + "minutes"
engine_speak(time)
# 5: search google
if there_exists(["search for"]) and 'youtube' not in voice_data:
search_term = voice_data.split("for")[-1]
url = "https://google.com/search?q=" + search_term
webbrowser.get().open(url)
engine_speak("Here is what I found for" + search_term + "on google")
# 6: search youtube
if there_exists(["youtube"]):
search_term = voice_data.split("for")[-1]
url = "https://www.youtube.com/results?search_query=" + search_term
webbrowser.get().open(url)
engine_speak("Here is what I found for " + search_term + "on youtube")
# 7: get stock price
if there_exists(["price of"]):
search_term = voice_data.split("for")[-1]
url = "https://google.com/search?q=" + search_term
webbrowser.get().open(url)
engine_speak("Here is what I found for " + search_term + " on google")
# 8 time table
if there_exists(["show my time table"]):
im = Image.open(r"D:WhatsApp Image 2019-12-26 at 10.51.10 AM.jpeg")
im.show()
# 9 weather
if there_exists(["weather"]):
search_term = voice_data.split("for")[-1]
url = "https://www.google.com/search?sxsrf=ACYBGNSQwMLDByBwdVFIUCbQqya-ET7AAA%3A1578847393212&ei=oUwbXtbXDN-C4-EP-5u82AE&q=weather&oq=weather&gs_l=psy-ab.3..35i39i285i70i256j0i67l4j0i131i67j0i131j0i67l2j0.1630.4591..5475...1.2..2.322.1659.9j5j0j1......0....1..gws-wiz.....10..0i71j35i39j35i362i39._5eSPD47bv8&ved=0ahUKEwiWrJvwwP7mAhVfwTgGHfsNDxsQ4dUDCAs&uact=5"
webbrowser.get().open(url)
engine_speak("Here is what I found for on google")
# 10 stone paper scisorrs
if there_exists(["game"]):
voice_data = record_audio("choose among rock paper or scissor")
moves = ["rock", "paper", "scissor"]
cmove = random.choice(moves)
pmove = voice_data
engine_speak("The computer chose " + cmove)
engine_speak("You chose " + pmove)
# engine_speak("hi")
if pmove == cmove:
engine_speak("the match is draw")
elif pmove == "rock" and cmove == "scissor":
engine_speak("Player wins")
elif pmove == "rock" and cmove == "paper":
engine_speak("Computer wins")
elif pmove == "paper" and cmove == "rock":
engine_speak("Player wins")
elif pmove == "paper" and cmove == "scissor":
engine_speak("Computer wins")
elif pmove == "scissor" and cmove == "paper":
engine_speak("Player wins")
elif pmove == "scissor" and cmove == "rock":
engine_speak("Computer wins")
# 11 toss a coin
if there_exists(["toss", "flip", "coin"]):
moves = ["head", "tails"]
cmove = random.choice(moves)
engine_speak("The computer chose " + cmove)
# 12 calc
if there_exists(["plus", "minus", "multiply", "divide", "power", "+", "-", "*", "/"]):
opr = voice_data.split()[1]
if opr == '+':
engine_speak(int(voice_data.split()[0]) + int(voice_data.split()[2]))
elif opr == '-':
engine_speak(int(voice_data.split()[0]) - int(voice_data.split()[2]))
elif opr == 'multiply':
engine_speak(int(voice_data.split()[0]) * int(voice_data.split()[2]))
elif opr == 'divide':
engine_speak(int(voice_data.split()[0]) / int(voice_data.split()[2]))
elif opr == 'power':
engine_speak(int(voice_data.split()[0]) ** int(voice_data.split()[2]))
else:
engine_speak("Wrong Operator")
# 13 screenshot
if there_exists(["capture", "my screen", "screenshot"]):
myScreenshot = pyautogui.screenshot()
myScreenshot.save('D:/screenshot/screen.png')
# 14 to search wikipedia for definition
if there_exists(["definition of"]):
definition = record_audio("what do you need the definition of")
url = urllib.request.urlopen('https://en.wikipedia.org/wiki/' + definition)
soup = bs.BeautifulSoup(url, 'lxml')
definitions = []
for paragraph in soup.find_all('p'):
definitions.append(str(paragraph.text))
if definitions:
if definitions[0]:
engine_speak('im sorry i could not find that definition, please try a web search')
elif definitions[1]:
engine_speak('here is what i found ' + definitions[1])
else:
engine_speak('Here is what i found ' + definitions[2])
else:
engine_speak("im sorry i could not find the definition for " + definition)
if there_exists(["exit", "quit", "goodbye"]):
engine_speak("bye")
exit()

time.sleep(1)
person_obj = person()
asis_obj = asis()
asis_obj.name = 'kiki'
engine = pyttsx3.init()
while (1):
voice_data = record_audio("Recording")  # get the voice input
print("Done")
print("Q:", voice_data)
respond(voice_data)  # respond

kv.py(用于图形用户界面(:


from kivy import Config
Config.set('graphics', 'multisamples', '0')
Config.set('graphics', 'width', '360')
Config.set('graphics', 'height', '600')
import os
os.environ['KIVY_GL_BACKEND'] = 'angle_sdl2'
import kivy
kivy.require('1.9.0')
from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.gridlayout import GridLayout
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.uix.boxlayout import BoxLayout
from kivy.core.window import Window
import random
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.textinput import TextInput
# Window.clearcolor = (237, 235, 235, 235)
# create a background class which inherits the boxlayout class 
class Background(BoxLayout): 
def __init__(self, **kwargs): 
super().__init__(**kwargs) 
pass

# Create App class with name of your app 
class SampleApp(App): 

# return the Window having the background template. 
def build(self): 
return Background() 

# run app in the main function 
if __name__ == '__main__': 
SampleApp().run() 

和样本.kv 文件:

#:kivy 1.0
<Background>: 
id: main_win 
orientation: "vertical"
spacing: 10
space_x: self.size[0]/3

canvas.before: 
Color: 
rgba: (1, 1, 1, 1) 
Rectangle: 
source:'back1.jpg'
size: root.width, root.height 
pos: self.pos 

Button: 
text: " Start "
pos_hint :{'center_x':0.5, 'center_y':0} 
size_hint: .26,0
background_color:(1, 1, 1, 1)
on_press:
#


Button: 
text: " exit "
pos_hint :{'center_x':0.5, 'center_y':0} 
size_hint: .26,0
background_color:(1, 1, 1, 1)
on_press:
#

它不起作用,因为像time,os这样的库只为Windows编写。如果您尝试转换它,将崩溃。

相关内容

  • 没有找到相关文章

最新更新