Anshu13's picture
Update app.py
7eb6ef1 verified
import torch
import torchvision
from torchvision import transforms
import gradio as gr
import os
import cv2
from PIL import Image
from model import create_model
model,transform=create_model(num_of_classes=3)
model.load_state_dict(torch.load("fire_smoke_weights.pth", map_location=torch.device("cpu")))
model.eval()
def classify_video(video):
cap = cv2.VideoCapture(video)
predictions = []
Fire=[]
Smoke=[]
Default=[]
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
img = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img_pil = Image.fromarray(img)
img_tensor = transform(img_pil).unsqueeze(0)
with torch.no_grad():
output = model(img_tensor)
pred = output.argmax().item()
predictions.append(pred)
cap.release()
class_names=['DEFAULT', 'FIRE Spotted', 'SMOKE Spotted']
for i in predictions:
if i == 1:
Fire.append(i)
elif i == 2:
Smoke.append(i)
else:
Default.append(i)
if len(Fire)>5 and len(Smoke)>5:
return f"Fire and Smoke Spotted"
else:
return class_names[max(predictions)]
Description="An MobileNET model trained to classify Fire and Smoke through Videos"
Article="Created at jupyter NoteBook with GPU NVIDIA_GeForce_MX350"
gr.Interface(
fn=classify_video,
inputs=gr.Video(streaming=True),
outputs="text",
title="Fire and Smoke Classifier",
description=Description,
article=Article,
live="True"
).launch()