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()