Spaces:
Runtime error
Runtime error
| import os | |
| import subprocess | |
| from gtts import gTTS | |
| import datetime | |
| import speech_recognition as sr | |
| from fuzzywuzzy import fuzz | |
| # Install mpg123 for playing audio | |
| subprocess.run(["apt-get", "update"]) | |
| subprocess.run(["apt-get", "install", "-y", "mpg123"]) | |
| # Menu with Indian dishes and prices | |
| menu = { | |
| "Starters": { | |
| "Paneer Tikka": 150.0, | |
| "Samosa": 20.0, | |
| "Pakora": 50.0 | |
| }, | |
| "Main Course": { | |
| "Butter Chicken": 350.0, | |
| "Paneer Butter Masala": 300.0, | |
| "Dal Makhani": 200.0, | |
| "Veg Biryani": 180.0, | |
| "Chicken Biryani": 220.0 | |
| }, | |
| "Breads": { | |
| "Tandoori Roti": 20.0, | |
| "Butter Naan": 30.0, | |
| "Stuffed Paratha": 50.0 | |
| }, | |
| "Desserts": { | |
| "Gulab Jamun": 40.0, | |
| "Rasgulla": 35.0, | |
| "Kheer": 60.0 | |
| }, | |
| "Drinks": { | |
| "Masala Chai": 15.0, | |
| "Lassi": 50.0, | |
| "Buttermilk": 20.0 | |
| } | |
| } | |
| recognizer = sr.Recognizer() | |
| # Function to play text as speech | |
| def speak(text): | |
| tts = gTTS(text=text, lang='en') | |
| tts.save("output.mp3") | |
| os.system("mpg123 output.mp3") | |
| # Function to wish the user | |
| def wishMe(): | |
| hour = int(datetime.datetime.now().hour) | |
| if hour >= 0 and hour < 12: | |
| speak("Good Morning! How can I help you today?") | |
| elif hour >= 12 and hour < 18: | |
| speak("Good Afternoon! What would you like to order?") | |
| else: | |
| speak("Good Evening! Hope you're doing well!") | |
| # Function to listen to user input | |
| def listen(): | |
| with sr.Microphone() as source: | |
| print("Listening for your command...") | |
| recognizer.adjust_for_ambient_noise(source, duration=1) | |
| try: | |
| audio = recognizer.listen(source, timeout=5) | |
| command = recognizer.recognize_google(audio, language="en-IN") | |
| print(f"You said: {command}") | |
| return command.lower() | |
| except sr.UnknownValueError: | |
| print("Sorry, I couldn't understand that. Could you please repeat?") | |
| return None | |
| except sr.RequestError: | |
| print("Sorry, there was an issue with the speech recognition service.") | |
| return None | |
| except sr.WaitTimeoutError: | |
| print("Sorry, I couldn't hear anything.") | |
| return None | |
| # Function to recognize commands | |
| def recognize_command(command): | |
| if not command: | |
| speak("Sorry, I couldn't process your request. Please try again.") | |
| return False | |
| for category, items in menu.items(): | |
| for item in items: | |
| if isinstance(item, str) and fuzz.partial_ratio(command, item.lower()) > 80: | |
| speak(f"Got it! {item} has been added to your order.") | |
| return True | |
| if "menu" in command: | |
| speak("Here is the menu for the restaurant. Take your time to decide!") | |
| for category, items in menu.items(): | |
| speak(f"{category}:") | |
| for item in items: | |
| speak(f" - {item}") | |
| return True | |
| if "price" in command: | |
| speak("Which item would you like to know the price for?") | |
| item = listen() | |
| if item: | |
| provide_price(item) | |
| return True | |
| if "exit" in command or "bye" in command: | |
| speak("Thank you for visiting! Have a great day!") | |
| return False | |
| speak("Sorry, I didn't understand that. Could you please repeat?") | |
| return True | |
| # Function to provide the price of an item | |
| def provide_price(item): | |
| for category, items in menu.items(): | |
| if item in items: | |
| price = items[item] | |
| speak(f"The price for {item} is ₹{price}.") | |
| return | |
| speak(f"Sorry, {item} is not available in the menu.") | |
| # Main function | |
| def run_voice_assistant(): | |
| wishMe() | |
| speak("Welcome to the restaurant! How can I assist you today?") | |
| while True: | |
| command = listen() | |
| if command: | |
| print(f"Recognized Command: {command}") | |
| continue_listening = recognize_command(command) | |
| if not continue_listening: | |
| break | |
| if __name__ == "__main__": | |
| run_voice_assistant() | |