Spaces:
Sleeping
Sleeping
import gradio as gr | |
from gtts import gTTS | |
import os | |
import speech_recognition as sr | |
# Initialize 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 provide audio file.""" | |
tts = gTTS(text=text, lang='en') | |
file_path = "response.mp3" | |
tts.save(file_path) | |
return file_path | |
# Read Menu Function | |
def read_menu(): | |
"""Generate the menu text and read it aloud.""" | |
menu_text = "Here is the menu. Starting with Biryani options: " | |
for item in menu_items["biryani"]: | |
menu_text += item + ". " | |
menu_text += "Now the 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, text_to_speech(menu_text) | |
# Process Voice Command | |
def process_command(audio_path): | |
"""Process the user's voice command.""" | |
try: | |
with sr.AudioFile(audio_path) as source: | |
audio_data = recognizer.record(source) | |
command = recognizer.recognize_google(audio_data).lower() | |
except Exception as e: | |
error_text = "Sorry, I could not process the audio." | |
return "Error", text_to_speech(error_text) | |
if "menu" in command: | |
menu_text, menu_audio = read_menu() | |
return menu_text, menu_audio | |
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 response_text, text_to_speech(response_text) | |
if "cart" in command: | |
if not cart: | |
response_text = "Your cart is empty." | |
else: | |
response_text = "Your cart contains: " + ", ".join(cart) | |
return response_text, text_to_speech(response_text) | |
if "submit" in command or "done" in command: | |
if not cart: | |
response_text = "Your cart is empty. Add some items before submitting." | |
else: | |
response_text = "Your final order is: " + ", ".join(cart) + ". Thank you for your order!" | |
cart.clear() | |
return response_text, text_to_speech(response_text) | |
error_text = "Sorry, I couldn't understand your request." | |
return error_text, text_to_speech(error_text) | |
# Gradio App | |
def app(): | |
"""Create the Gradio interface.""" | |
with gr.Blocks() as demo: | |
gr.Markdown("# Voice-Activated Restaurant Menu System") | |
gr.Markdown("Speak your command to interact with the menu system dynamically.") | |
with gr.Row(): | |
voice_input = gr.Audio(type="filepath", label="Speak Your Command") | |
transcribed_text = gr.Textbox(label="Transcribed Command") | |
response_text = gr.Textbox(label="Response Text") | |
audio_output = gr.Audio(label="Audio Response") | |
voice_input.change(fn=process_command, inputs=voice_input, outputs=[response_text, audio_output]) | |
return demo | |
if __name__ == "__main__": | |
app().launch() | |