Python Virtual Assistant: Learn How to Create One from Scratch

Creating a virtual desktop assistant is an exciting project. Imagine your computer responding to your commands, much like Jarvis did for Tony Stark. Yes, it’s possible, and you can achieve it using Python. Python provides a robust set of libraries that make building a virtual assistant feasible.

For instance, Windows uses Sapi5, while Linux utilizes Espeak to generate voice responses from your machine. Though it’s a basic form of artificial intelligence, it’s a great start toward automating your tasks.

Modules Required

pyttsx3: pyttsx is a cross-platform text to speech library which is platform independent. The major advantage of using this library for text-to-speech conversion is that it works offline. To install this module type the below command in the terminal.

pip install pyttsx3

SpeechRecognition: It allow us to convert audio into text for further processing. To install this module type the below command in the terminal.

pip install SpeechRecognition

webbrowser: It provides a high-level interface which allows displaying Web-based documents to users. To install this module type the below command in the terminal.

pip install webbrowser

Wikipedia: It is used to fetch a variety of information from the Wikipedia website. To install this module type the below command in the terminal.

pip install wikipedia

Methods Used for Building a Virtual Assistant

  1. Speak Method:
    The Speak Method is crucial for enabling the machine to generate voice output. Below is an explanation of how the Speak Method works in the code.
def speak(audio):
	
	engine = pyttsx3.init()
	# getter method(gets the current value
	# of engine property)
	voices = engine.getProperty('voices')
	
	# setter method .[0]=male voice and 
	# [1]=female voice in set Property.
	engine.setProperty('voice', voices[0].id)
	
	# Method for the speaking of the assistant
	engine.say(audio) 
	
	# Blocks while processing all the currently
	# queued commands
	engine.runAndWait()

Take Query Method
This method evaluates specific conditions. If a condition is met, it returns the corresponding output. You can incorporate multiple conditions, and when any of them are satisfied, the method will produce the desired result.

# this method is for taking the commands
# and recognizing the command from the
# speech_Recognition module we will use
# the recongizer method for recognizing
def takeCommand():

	r = sr.Recognizer()

	# from the speech_Recognition module 
	# we will use the Microphone module
	# for listening the command
	with sr.Microphone() as source:
		print('Listening')
		
		# seconds of non-speaking audio before 
		# a phrase is considered complete
		r.pause_threshold = 0.7
		audio = r.listen(source)
		
		# Now we will be using the try and catch
		# method so that if sound is recognized 
		# it is good else we will have exception 
		# handling
		try:
			print("Recognizing")
			
			# for Listening the command in indian
			# english we can also use 'hi-In' 
			# for hindi recognizing
			Query = r.recognize_google(audio, language='en-in')
			print("the command is printed=", Query)
			
		except Exception as e:
			print(e)
			print("Say that again sir")
			return "None"
		
		return Query

Take Command Method

# this method is for taking the commands
# and recognizing the command from the
# speech_Recognition module we will use
# the recongizer method for recognizing
def takeCommand():

	r = sr.Recognizer()

	# from the speech_Recognition module 
	# we will use the Microphone module
	# for listening the command
	with sr.Microphone() as source:
		print('Listening')
		
		# seconds of non-speaking audio before 
		# a phrase is considered complete
		r.pause_threshold = 0.7
		audio = r.listen(source)
		
		# Now we will be using the try and catch
		# method so that if sound is recognized 
		# it is good else we will have exception 
		# handling
		try:
			print("Recognizing")
			
			# for Listening the command in indian
			# english we can also use 'hi-In' 
			# for hindi recognizing
			Query = r.recognize_google(audio, language='en-in')
			print("the command is printed=", Query)
			
		except Exception as e:
			print(e)
			print("Say that again sir")
			return "None"
		
		return Query

Tell Time

# code
def tellTime(self):
# This method will give the time
	time = str(datetime.datetime.now())
	# the time will be displayed like this "2020-06-05 17:50:14.582630"
	# nd then after slicing we can get time
	print(time)
	hour = time[11:13]
	min = time[14:16]
	self.Speak(self, "The time is sir" + hour + "Hours and" + min + "Minutes")	 
"""
This method will take time and slice it "2020-06-05 17:50:14.582630" from 11 to 12 for hour
and 14-15 for min and then speak function will be called and then it will speak the current 
time
"""

Hello method

This is just used to greet the user with a hello message.

def Hello():
	# This function is for when the assistant 
	# is called it will say hello and then 
	# take query
	speak("hello sir I am your desktop assistant. /
		Tell me how may I help you")

Full Code:

import pyttsx3
import speech_recognition as sr
import webbrowser 
import datetime 
import wikipedia 


# this method is for taking the commands
# and recognizing the command from the
# speech_Recognition module we will use
# the recongizer method for recognizing
def takeCommand():

    r = sr.Recognizer()

    # from the speech_Recognition module 
    # we will use the Microphone module
    # for listening the command
    with sr.Microphone() as source:
        print('Listening')
        
        # seconds of non-speaking audio before 
        # a phrase is considered complete
        r.pause_threshold = 0.7
        audio = r.listen(source)
        
        # Now we will be using the try and catch
        # method so that if sound is recognized 
        # it is good else we will have exception 
        # handling
        try:
            print("Recognizing")
            
            # for Listening the command in indian
            # english we can also use 'hi-In' 
            # for hindi recognizing
            Query = r.recognize_google(audio, language='en-in')
            print("the command is printed=", Query)
            
        except Exception as e:
            print(e)
            print("Say that again sir")
            return "None"
        
        return Query

def speak(audio):
    
    engine = pyttsx3.init()
    # getter method(gets the current value
    # of engine property)
    voices = engine.getProperty('voices')
    
    # setter method .[0]=male voice and 
    # [1]=female voice in set Property.
    engine.setProperty('voice', voices[0].id)
    
    # Method for the speaking of the assistant
    engine.say(audio) 
    
    # Blocks while processing all the currently
    # queued commands
    engine.runAndWait()

def tellDay():
    
    # This function is for telling the
    # day of the week
    day = datetime.datetime.today().weekday() + 1
    
    #this line tells us about the number 
    # that will help us in telling the day
    Day_dict = {1: 'Monday', 2: 'Tuesday', 
                3: 'Wednesday', 4: 'Thursday', 
                5: 'Friday', 6: 'Saturday',
                7: 'Sunday'}
    
    if day in Day_dict.keys():
        day_of_the_week = Day_dict[day]
        print(day_of_the_week)
        speak("The day is " + day_of_the_week)


def tellTime():
    
    # This method will give the time
    time = str(datetime.datetime.now())
    
    # the time will be displayed like 
    # this "2020-06-05 17:50:14.582630"
    #nd then after slicing we can get time
    print(time)
    hour = time[11:13]
    min = time[14:16]
    speak(self, "The time is sir" + hour + "Hours and" + min + "Minutes") 

def Hello():
    
    # This function is for when the assistant 
    # is called it will say hello and then 
    # take query
    speak("hello sir I am your desktop assistant.Tell me how may I help you")


def Take_query():

    # calling the Hello function for 
    # making it more interactive
    Hello()
    
    # This loop is infinite as it will take
    # our queries continuously until and unless
    # we do not say bye to exit or terminate 
    # the program
    while(True):
        
        # taking the query and making it into
        # lower case so that most of the times 
        # query matches and we get the perfect 
        # output
        query = takeCommand().lower()
        if "open geeksforgeeks" in query:
            speak("Opening Codemagnet ")
            
            # in the open method we just to give the link
            # of the website and it automatically open 
            # it in your default browser
            webbrowser.open("www.codemagnet.in")
            continue
        
        elif "open google" in query:
            speak("Opening Google ")
            webbrowser.open("www.google.com")
            continue
            
        elif "which day it is" in query:
            tellDay()
            continue
        
        elif "tell me the time" in query:
            tellTime()
            continue
        
        # this will exit and terminate the program
        elif "bye" in query:
            speak("Bye. Check Out GFG for more exciting things")
            exit()
        
        elif "from wikipedia" in query:
            
            # if any one wants to have a information
            # from wikipedia
            speak("Checking the wikipedia ")
            query = query.replace("wikipedia", "")
            
            # it will give the summary of 4 lines from 
            # wikipedia we can increase and decrease 
            # it also.
            result = wikipedia.summary(query, sentences=4)
            speak("According to wikipedia")
            speak(result)
        
        elif "tell me your name" in query:
            speak("I am Jarvis. Your desktop Assistant")

if __name__ == '__main__':
    
    # main method for executing
    # the functions
    Take_query()

Creating a virtual assistant from scratch using Python is an exciting journey that combines several core concepts of programming, such as speech recognition, text-to-speech conversion, and natural language processing. Throughout this process, you not only gain hands-on experience with Python libraries like speech_recognition, pyttsx3, and wikipedia, but you also develop a deeper understanding of how AI and machine learning models can be applied in real-world scenarios.

A Python-based virtual assistant, while relatively simple compared to commercial-grade systems like Siri or Alexa, offers a solid foundation for understanding the mechanics of voice-activated tools. It demonstrates how Python’s versatility and extensive library support can be leveraged to build practical applications. By working through the steps of capturing voice input, processing the information, and responding with appropriate actions or information, you gain insights into both the challenges and the potential of AI-driven interfaces.

Moreover, this project underscores the importance of continuous learning and iteration. As technology advances, so too will the tools and techniques available for creating more sophisticated virtual assistants. Whether you are a beginner looking to build your first project or an experienced developer exploring AI, creating a virtual assistant in Python is a valuable and rewarding endeavor. It not only enhances your technical skills but also opens up possibilities for more advanced projects in the future.

In conclusion, a Python virtual assistant is a great way to explore the intersection of AI and software development. By mastering the basics and understanding the underlying principles, you can continue to innovate and push the boundaries of what’s possible with AI-powered applications.

Author

Sona Avatar

Written by

Leave a Reply

Trending

CodeMagnet

Your Magnetic Resource, For Coding Brilliance

Programming Languages

Web Development

Data Science and Visualization

Career Section

<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4205364944170772"
     crossorigin="anonymous"></script>