Virtual Assistant is an awesome program that can help automate the work starting from playing a music for us, sending our emails, reading emails, speaking you a joke and anything that a normal person can do. It can be a good friend for you. We can ask our virtual assistant to do anything for us just by speaking to them.
To start with this project, we need to install some packages. If you want to install the packages in separate folder, create a virtual environment and install in it:
$ py -3 -m venv env $ .\env\Scripts\activate
1/ Install 'pyttsx3': It is a cross-platform python text to speech library which is platform independent. It allows offline text to speech conversion and is a good library that can be used for any applicaton for text to speech conversions.
$ pip install pyttsx3
2/ Install 'SpeeechRecognition': It allows us to convert audio to text.
$ pip install SpeeechRecognition
3/ Install 'Wikipedia': We will use wikipedia to fetch our information from web.
$ pip install wikipedia
4/ Install 'pywhatkit': PyWhatKit is a Simple and Powerful WhatsApp Automation Library with many useful Features. We will use this library to search and play a music from youtube.
$ pip install pywhatkit
5/ Install 'pyjokes': One line jokes for programmers (jokes as a service)
pip install pyjokes
6/ Now that we have installed the required packages, we need to import it to use in our program
import speech_recognition as sr # SpeechRecognition package to understand the speech import pyttsx3 # To speak the text import pywhatkit # pywhatkit allows us to do searching in youtube and other fun import datetime # To use date and time import wikipedia # To use for searching online import pyjokes # To use jokes by in the program
7/ Create an instance of SpeechRecognition and pyttsx3
listener = sr.Recognizer() # create a recognizer which will understand the voice engine = pyttsx3.init() # Python text to speech initialize voices = engine.getProperty('voices') # Get all the voices engine.setProperty('voice', voices.id) # set it to second voice
8/ Now we will create 'speak(text)' method that takes in the text and to make our machine talk.
def speak(text): engine.say(text) # ask it to say the command engine.runAndWait()
9/ Create 'get_command()' to take in the query from the user in the form of voice command and return their command in text form.
def get_command(): command = '' try: with sr.Microphone() as source: # Use microphone print('Listening...') voice = listener.listen(source) # lister to listen to the source and store as voice command = listener.recognize_google(voice) # Converting the voice to text using google api command = command.lower() # convert to lower case if 'alexa' in command: # check if name 'alexa' is in command command = command.replace('alexa', '') # Remove 'alexa' from command by replacing it with empty string print(command) except: pass return command # return command that we are saying
10/ Define the method 'run_alexa()' (decide on any name) to decide what to do my our virtual assistant using the command of user
def run_alexa(): # To start alexa command = get_command() # Get command # # if 'alexa' in command: # check if name 'alexa' is in command # command = command.replace('alexa', '') # Remove 'alexa' from command by replacing it with empty string # print(command) if 'play' in command: # To play music song = command.replace('play', '') # remove play from the command speak('playing' + song) pywhatkit.playonyt(song) # play it in youtube elif 'time' in command: # To get the time time = datetime.datetime.now().strftime( '%I:%M %p') # %H:%M for 24 hr format # Get the hours and mins from datetime and format it speak('Current time is ' + time) print(time) elif 'who is' in command: # To use word wikipedia in command person = command.replace('who the hell is', '') # replace who is with empty str in command try: info = wikipedia.summary(person, 1) # search person and mention how many lines we want speak(info) # speak the information print(info) except: speak('Couldn\'t find ' + person) elif 'drink' in command: speak('sorry, I have a headache ') elif 'joke' in command: joke = pyjokes.get_joke() speak(joke) print(joke) elif 'what is your name' in command: speak('My name is alexa')
11/ Now we will run the program from main method.
if __name__=='__main__': speak('Hello, How can I help you? ') while True: try: run_alexa() # Run it continuously except sr.UnknownValueError(): listener = sr.Recognizer() continue
Try to run it in the command line and ask it to tell a joke...
Code link is in Github.