Spaces:
Sleeping
Sleeping
| 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""" | |
| <audio autoplay> | |
| <source src="{audio_file}" type="audio/mpeg"> | |
| Your browser does not support the audio element. Please download the file: | |
| <a href="{audio_file}" download>Download Audio</a> | |
| </audio> | |
| """ | |
| return autoplay_html | |
| voice_input.change(process_and_autoplay, inputs=voice_input, outputs=audio_output) | |
| return demo | |
| if __name__ == "__main__": | |
| app().launch() | |