import gradio as gr from gtts import gTTS import os import speech_recognition as sr # Initialize the recognizer recognizer = sr.Recognizer() # Menu items menu_items = { "biryani": ["Chicken Biryani", "Mutton Biryani", "Vegetable Biryani", "Egg Biryani"], "starters": ["Chicken Tikka", "Paneer Tikka", "Fish Fry", "Veg Manchurian"], "drinks": ["Coke", "Pepsi", "Lemonade", "Mango Juice", "Water"] } cart = [] # Text-to-Speech Function def text_to_speech(text): """Convert text to speech and save as response.mp3.""" tts = gTTS(text=text, lang='en') file_path = "response.mp3" tts.save(file_path) return file_path # Generate Menu Details def generate_menu_details(): """Generate the full menu details as text.""" menu_text = "Here is the menu. Starting with Biryani options: " for item in menu_items["biryani"]: menu_text += item + ". " menu_text += "Next, we have Starters: " for item in menu_items["starters"]: menu_text += item + ". " menu_text += "Finally, Drinks: " for item in menu_items["drinks"]: menu_text += item + ". " return menu_text # Process Voice Command def process_command(audio_path): """Process the user's voice command and return the audio response.""" try: print(f"Processing audio file: {audio_path}") with sr.AudioFile(audio_path) as source: audio_data = recognizer.record(source) command = recognizer.recognize_google(audio_data).lower() print(f"Recognized command: {command}") except Exception as e: print(f"Error during voice processing: {e}") error_text = "Sorry, I could not process the audio." return text_to_speech(error_text) if "menu" in command or "menu items" in command or "tell me menu details" in command: menu_text = generate_menu_details() return text_to_speech(menu_text) for category, items in menu_items.items(): for item in items: if item.lower() in command: cart.append(item) response_text = f"{item} has been added to your cart." return text_to_speech(response_text) error_text = "Sorry, I couldn't find that item on the menu." return text_to_speech(error_text) # Gradio App def app(): """Create the Gradio interface.""" with gr.Blocks() as demo: gr.Markdown("# Voice Assistant for Menu") gr.Markdown("Press the microphone to speak your command. The response will be provided as audio.") with gr.Row(): voice_input = gr.Audio(type="filepath", label="🎤 Speak Command") # Output for autoplay audio audio_output = gr.HTML() # Process and autoplay def process_and_autoplay(audio_path): audio_file = process_command(audio_path) # Generate autoplay HTML for the audio autoplay_html = f""" """ return autoplay_html voice_input.change(process_and_autoplay, inputs=voice_input, outputs=audio_output) return demo if __name__ == "__main__": app().launch()