Spaces:
Sleeping
Sleeping
File size: 4,785 Bytes
af704d1 63c3e87 af704d1 c480fa5 3ac7c45 c480fa5 c2f90f0 cf344c7 af704d1 cf344c7 af704d1 cf344c7 af704d1 a941958 cf344c7 3ac7c45 af704d1 cf344c7 c480fa5 3ac7c45 c2f90f0 3ac7c45 af704d1 c2f90f0 c480fa5 3ac7c45 a941958 3ac7c45 c480fa5 3ac7c45 0b9fd9a 3ac7c45 0b9fd9a 3ac7c45 c480fa5 a941958 c480fa5 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 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 |
import gradio as gr
from gtts import gTTS
import os
import tempfile
import json
import sounddevice as sd
import queue
import threading
from scipy.io.wavfile import write
import speech_recognition as sr
import subprocess
# 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 play_audio(audio_path):
try:
subprocess.run(["ffplay", "-nodisp", "-autoexit", audio_path], check=True)
except Exception as e:
print("Error playing audio:", e)
def calculate_total(cart):
return sum(menu_items[item] for item in cart)
# Audio recording setup
q = queue.Queue()
def audio_callback(indata, frames, time, status):
if status:
print(status)
q.put(indata.copy())
def record_audio():
fs = 16000 # Sample rate
seconds = 5 # Duration
print("Recording...")
audio_data = []
with sd.InputStream(callback=audio_callback, samplerate=fs, channels=1):
for _ in range(int(fs * seconds / 1024)):
audio_data.append(q.get())
print("Recording finished.")
return b"".join(audio_data)
def restaurant_voice_assistant():
global cart
recognizer = sr.Recognizer()
# Continuously listen for user commands
while True:
try:
audio_data = record_audio()
with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as temp_audio:
temp_audio.write(audio_data)
temp_audio_path = temp_audio.name
with sr.AudioFile(temp_audio_path) as source:
audio = recognizer.record(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)
play_audio(audio_path)
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()
|