ai-queue-management / app_gradio.py
Agent
Initial commit: AI Queue Management System
ad1bda5
import gradio as gr
import cv2
import numpy as np
from queue_monitor import QueueMonitor
from llm_analyzer import LogAnalyzer
import json
# Initialize components
monitor = QueueMonitor()
# Define a default zone for demonstration
default_polygon = np.array([[100, 100], [1100, 100], [1100, 600], [100, 600]])
monitor.setup_zones([default_polygon])
# Lazy load LLM to save resources until needed
analyzer = None
def get_analyzer():
global analyzer
if analyzer is None:
analyzer = LogAnalyzer()
return analyzer
def process_video(video_path):
cap = cv2.VideoCapture(video_path)
frames = []
total_stats = []
# Process first 30 frames for demo purposes
for _ in range(30):
ret, frame = cap.read()
if not ret:
break
annotated, stats = monitor.process_frame(frame)
frames.append(cv2.cvtColor(annotated, cv2.COLOR_BGR2RGB))
total_stats.append(stats)
cap.release()
return frames[0] if frames else None, json.dumps(total_stats[0] if total_stats else {}, indent=2)
def analyze_logs(log_json):
try:
log_data = json.loads(log_json)
llm = get_analyzer()
analysis = llm.analyze_logs(log_data)
return analysis
except Exception as e:
return f"Error: {str(e)}"
with gr.Blocks(title="AI Queue Management for CCTV and YOLO") as demo:
gr.Markdown("# AI Queue Management for CCTV and YOLO")
with gr.Tab("Real-time Monitoring"):
with gr.Row():
video_input = gr.Video(label="Upload CCTV Footage")
image_output = gr.Image(label="Processed Frame")
with gr.Row():
stats_output = gr.Code(label="Zone Statistics (JSON)", language="json")
process_btn = gr.Button("Process Video")
process_btn.click(process_video, inputs=video_input, outputs=[image_output, stats_output])
with gr.Tab("AI Log Analysis"):
gr.Markdown("### Analyze Queue Logs with Qwen-2.5")
log_input = gr.Textbox(
label="Input Logs (JSON)",
value=json.dumps({
"date": "2026-01-24",
"branch": "SBI Jabalpur",
"avg_wait_time_sec": 420,
"max_wait_time_sec": 980,
"customers_served": 134,
"counter_1_avg_service": 180,
"counter_2_avg_service": 310,
"peak_hour": "12:00-13:00",
"queue_overflow_events": 5
}, indent=2),
lines=10
)
analyze_btn = gr.Button("Generate AI Insights")
analysis_output = gr.Markdown(label="AI Recommendations")
analyze_btn.click(analyze_logs, inputs=log_input, outputs=analysis_output)
with gr.Tab("Use Cases"):
gr.Markdown("""
## Expanded Use Cases
- **Retail Heatmap & Dwell Time**: Identify which product sections attract the most customers.
- **Bank Branch Efficiency**: Optimize staffing based on counter service times.
- **Airport Security**: Predict wait times and manage lane openings.
- **Hospital Triage**: Monitor ER waiting areas for timely care.
- **Smart Parking**: Manage vehicle turnover in specific zones.
- **Safety Monitoring**: Detect unauthorized presence in restricted zones.
""")
if __name__ == "__main__":
demo.launch(server_name="0.0.0.0", server_port=7860)