Spaces:
Sleeping
Sleeping
import gradio as gr | |
import pyttsx3 | |
import speech_recognition as sr | |
from utils.state_management import state | |
from utils.excel_operations import read_excel | |
def voice_assistant(): | |
recognizer = sr.Recognizer() | |
engine = pyttsx3.init() | |
def speak_response(text): | |
engine.say(text) | |
engine.runAndWait() | |
def process_voice_command(audio): | |
try: | |
# Recognize speech | |
command = recognizer.recognize_google(audio) | |
if "menu" in command.lower(): | |
return fetch_menu() | |
elif "cart" in command.lower(): | |
return view_cart() | |
elif "place order" in command.lower(): | |
return place_order() | |
else: | |
return "Sorry, I didn't understand that command." | |
except Exception as e: | |
return f"Error processing voice command: {str(e)}" | |
def fetch_menu(): | |
if not state.get("user"): | |
return "Please log in first to view the menu." | |
menu = read_excel("data/menu.xlsx") | |
menu_list = "\n".join([f"{item['Name']} - {item['Price']} ₹" for item in menu]) | |
speak_response(menu_list) | |
return menu_list | |
def view_cart(): | |
cart = state.get("cart", []) | |
if not cart: | |
return "Your cart is empty." | |
cart_details = "\n".join([f"{item['Item']} - {item['Spice Level']}" for item in cart]) | |
speak_response(cart_details) | |
return cart_details | |
def place_order(): | |
if not state.get("cart"): | |
return "Your cart is empty." | |
speak_response("Your order has been placed successfully!") | |
state["cart"] = [] | |
return "Order placed successfully!" | |
def record_and_process_voice(): | |
with sr.Microphone() as source: | |
speak_response("Listening for your command...") | |
audio = recognizer.listen(source) | |
return process_voice_command(audio) | |
with gr.Group(): | |
gr.Markdown("### Voice Assistant") | |
gr.Button("Start Listening").click(record_and_process_voice, outputs="Response") | |