File size: 2,155 Bytes
09239d2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8055941
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
import gradio as gr
from transformers import DetrImageProcessor, DetrForObjectDetection
import torch
import cv2
import numpy as np
from PIL import Image

# Load Hugging Face object detection model
processor = DetrImageProcessor.from_pretrained("facebook/detr-resnet-50")
model = DetrForObjectDetection.from_pretrained("facebook/detr-resnet-50")

def detect_intrusion(video_path):
    cap = cv2.VideoCapture(video_path)
    alerts = []
    count = 0
    while cap.isOpened() and count < 20:
        ret, frame = cap.read()
        if not ret:
            break
        image = Image.fromarray(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
        inputs = processor(images=image, return_tensors="pt")
        outputs = model(**inputs)
        target_sizes = torch.tensor([image.size[::-1]])
        results = processor.post_process_object_detection(outputs, target_sizes=target_sizes, threshold=0.9)[0]
        for score, label, box in zip(results["scores"], results["labels"], results["boxes"]):
            label_name = model.config.id2label[label.item()]
            if label_name == "person":
                alerts.append(f"Frame {count}: πŸ”΄ Person Detected!")
                break
        count += 1
    cap.release()
    return "\n".join(alerts) if alerts else "βœ… No intrusion detected."

def detect_overheat(temp, humidity, solar_output):
    if temp > 75:
        return "πŸ”₯ Overheat Fault!"
    elif humidity < 20 and solar_output < 300:
        return "🌫️ Dust/Shade Fault!"
    else:
        return "βœ… All Good"

video_tab = gr.Interface(fn=detect_intrusion,
                         inputs=gr.Video(label="Upload Video"),
                         outputs=gr.Textbox(label="Intrusion Detection Alerts"))

sensor_tab = gr.Interface(fn=detect_overheat,
                          inputs=[gr.Number(label="Temperature (Β°C)"),
                                  gr.Number(label="Humidity (%)"),
                                  gr.Number(label="Solar Output (W)")],
                          outputs=gr.Textbox(label="Sensor Fault Detection"))

gr.TabbedInterface([video_tab, sensor_tab], ["Intrusion (Video)", "Sensor (Input)"]).launch()