Spaces:
Sleeping
Sleeping
File size: 3,423 Bytes
af704d1 63c3e87 af704d1 2b6046a c480fa5 cf344c7 af704d1 cf344c7 af704d1 cf344c7 af704d1 a941958 cf344c7 af704d1 cf344c7 2b6046a 3ac7c45 2b6046a af704d1 2b6046a c2f90f0 2b6046a c480fa5 2b6046a c480fa5 2b6046a a941958 2b6046a c480fa5 2b6046a 0b9fd9a 2b6046a 0b9fd9a 2b6046a a941958 2b6046a a941958 2b6046a |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 |
import gradio as gr
from gtts import gTTS
import tempfile
import os
import speech_recognition as sr
# Store cart in a temporary storage
cart = []
# Define the menu items dynamically
menu_items = {
"Pizza": 10.99,
"Burger": 8.49,
"Pasta": 12.99,
"Salad": 7.99,
"Soda": 2.49
}
def generate_voice_response(text):
tts = gTTS(text)
temp_file = tempfile.NamedTemporaryFile(delete=False, suffix=".mp3")
temp_file.close()
tts.save(temp_file.name)
return temp_file.name
def process_audio(audio_path):
global cart
recognizer = sr.Recognizer()
response = ""
try:
with sr.AudioFile(audio_path) as source:
audio = recognizer.record(source)
input_text = recognizer.recognize_google(audio)
print("User said:", input_text)
if "menu" in input_text.lower():
response = "Here is our menu:\n"
for item, price in menu_items.items():
response += f"{item}: ${price:.2f}\n"
response += "\nWhat would you like to add to your cart?"
elif any(item.lower() in input_text.lower() for item in menu_items):
for item in menu_items:
if item.lower() in input_text.lower():
cart.append(item)
total = sum(menu_items[cart_item] for cart_item in cart)
response = f"{item} has been added to your cart. Your current cart includes:\n"
for cart_item in cart:
response += f"- {cart_item}: ${menu_items[cart_item]:.2f}\n"
response += f"\nTotal: ${total:.2f}. Would you like to add anything else?"
break
elif "final order" in input_text.lower() or "submit order" in input_text.lower():
if cart:
total = sum(menu_items[cart_item] for cart_item in cart)
response = "Your final order includes:\n"
for item in cart:
response += f"- {item}: ${menu_items[item]:.2f}\n"
response += f"\nTotal: ${total:.2f}.\nThank you for ordering!"
cart = [] # Clear cart after finalizing order
else:
response = "Your cart is empty. Would you like to order something?"
else:
response = "I didn’t quite catch that. Please tell me what you’d like to order."
except sr.UnknownValueError:
response = "Sorry, I didn’t catch that. Could you please repeat?"
except Exception as e:
response = f"An error occurred: {str(e)}"
audio_response_path = generate_voice_response(response)
return response, audio_response_path
def run_assistant(audio):
transcription, audio_response_path = process_audio(audio)
return transcription, audio_response_path
# Gradio Interface
with gr.Blocks() as demo:
gr.Markdown("# Voice-Activated Restaurant Assistant")
with gr.Row():
audio_input = gr.Audio(source="microphone", type="filepath", label="Speak Now")
text_output = gr.Textbox(label="Transcription")
audio_output = gr.Audio(label="Assistant Response")
submit_button = gr.Button("Submit")
submit_button.click(run_assistant, inputs=[audio_input], outputs=[text_output, audio_output])
demo.launch()
|