Spaces:
Sleeping
Sleeping
File size: 4,316 Bytes
af704d1 63c3e87 af704d1 06188c6 3ac7c45 cf344c7 af704d1 cf344c7 af704d1 cf344c7 af704d1 a941958 cf344c7 3ac7c45 af704d1 cf344c7 4c9e0d1 3ac7c45 a8fce64 3ac7c45 af704d1 3ac7c45 a941958 3ac7c45 0b9fd9a 3ac7c45 0b9fd9a 3ac7c45 a941958 3ac7c45 a941958 3ac7c45 |
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 99 100 101 102 103 104 105 106 107 108 109 110 111 |
import gradio as gr
from gtts import gTTS
import os
import tempfile
import json
import speech_recognition as sr
import threading
import time
from playsound import playsound
# 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
}
# To manage playback control
playback_control = {"stop": False, "pause": False}
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 calculate_total(cart):
return sum(menu_items[item] for item in cart)
def play_audio_with_control(audio_path):
global playback_control
playback_control["stop"] = False
playback_control["pause"] = False
try:
for _ in range(3): # Retry loop in case of interruptions
if playback_control["stop"]:
break
playsound(audio_path)
break
except Exception as e:
print("Error playing audio:", e)
def restaurant_voice_assistant():
global cart
recognizer = sr.Recognizer()
# Continuously listen for user commands
while True:
with sr.Microphone() as source:
print("Listening for input...")
try:
audio = recognizer.listen(source)
input_text = recognizer.recognize_google(audio)
print("You said:", input_text)
# Process 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 = calculate_total(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 = calculate_total(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?"
elif "stop" in input_text.lower():
playback_control["stop"] = True
response = "Audio playback stopped."
elif "pause" in input_text.lower():
playback_control["pause"] = True
response = "Audio playback paused."
elif "resume" in input_text.lower():
playback_control["pause"] = False
response = "Resuming audio playback."
else:
response = "I didn’t quite catch that. Please tell me what you’d like to order."
# Generate and play audio response
audio_path = generate_voice_response(response)
threading.Thread(target=play_audio_with_control, args=(audio_path,)).start()
except sr.UnknownValueError:
print("Sorry, I didn’t catch that. Could you please repeat?")
except Exception as e:
print("Error occurred:", e)
# Run the assistant
threading.Thread(target=restaurant_voice_assistant).start()
|