Spaces:
Sleeping
Sleeping
File size: 3,440 Bytes
af704d1 63c3e87 af704d1 2b6046a c480fa5 03cd391 cf344c7 af704d1 cf344c7 af704d1 cf344c7 af704d1 a941958 cf344c7 af704d1 cf344c7 2b6046a 3ac7c45 2b6046a af704d1 2b6046a c2f90f0 2b6046a c480fa5 2b6046a 03cd391 2b6046a c480fa5 03cd391 2b6046a a941958 2b6046a c480fa5 2b6046a 0b9fd9a 03cd391 2b6046a 03cd391 0b9fd9a 2b6046a 03cd391 a941958 03cd391 |
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 93 94 95 96 97 98 |
import gradio as gr
from gtts import gTTS
import tempfile
import os
import speech_recognition as sr
import threading
import time
# 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}.
Thank you for ordering!"
cart = [] # Clear cart after finalizing order
else:
response = "Your cart is empty. Would you like to order something?"
elif "stop" in input_text.lower():
response = "Stopping voice assistant."
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 background_listen():
while True:
print("Listening...")
time.sleep(2)
# Gradio Interface
def run_assistant(audio):
transcription, audio_response_path = process_audio(audio)
os.system(f"start {audio_response_path}") # Automatically play the response audio
return transcription
with gr.Blocks() as demo:
gr.Markdown("# Voice-Activated Restaurant Assistant")
audio_input = gr.Audio(type="filepath", label="Speak Now", source="microphone")
demo.launch()
|