Spaces:
Sleeping
Sleeping
File size: 3,410 Bytes
ad1bda5 |
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 |
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)
|