Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| from detect_people import detect_people_from_image | |
| from table_occupancy import is_table_occupied | |
| from face_utils import recognize_face | |
| from db import get_table_status, log_customer_visit, get_alerts | |
| # Gradio interface function to analyze uploaded image | |
| def analyze_image(image): | |
| try: | |
| # Ensure image is in correct format (NumPy array, BGR for OpenCV) | |
| if not isinstance(image, np.ndarray): | |
| image = np.array(image) | |
| if image.shape[-1] == 4: # Convert RGBA to BGR if needed | |
| image = cv2.cvtColor(image, cv2.COLOR_RGBA2BGR) | |
| elif image.shape[-1] == 3: # Ensure RGB is converted to BGR | |
| image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) | |
| # Run analysis functions | |
| people = detect_people_from_image(image) | |
| seated = is_table_occupied(image) | |
| role = recognize_face(image) | |
| # Log a visit to the database (adjust timestamp as needed) | |
| import datetime | |
| log_customer_visit(role, datetime.datetime.now(), table_id=1) | |
| # Get table status and alerts | |
| table_status = get_table_status() | |
| alerts = get_alerts() | |
| # Format output | |
| output = ( | |
| f"People detected: {people}\n" | |
| f"Table occupied: {seated}\n" | |
| f"Face match: {role}\n" | |
| f"Table status: {table_status}\n" | |
| f"Active alerts: {alerts}" | |
| ) | |
| return output | |
| except Exception as e: | |
| return f"Error processing image: {e}" | |
| # Define Gradio interface | |
| demo = gr.Interface( | |
| fn=analyze_image, | |
| inputs=gr.Image(type="numpy"), # Expect NumPy array input | |
| outputs="text", | |
| title="Table Occupancy and Face Detection", | |
| description="Upload an image to detect people, table occupancy, and recognize faces." | |
| ) | |
| # Start the Gradio app | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", server_port=7860, share=False) |