Raaniel commited on
Commit
802b273
·
verified ·
1 Parent(s): 671208e

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +113 -0
app.py ADDED
@@ -0,0 +1,113 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import torch
2
+ import numpy as np
3
+ from torch.utils.data import Dataset, DataLoader
4
+ import torchvision
5
+ from PIL import Image
6
+ import gradio as gr
7
+
8
+ # Configure device
9
+ device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')
10
+
11
+ transform = torchvision.transforms.Compose([
12
+ torchvision.transforms.Resize((224, 224)),
13
+ torchvision.transforms.ToTensor(),
14
+ torchvision.transforms.Normalize(mean=[0.5, 0.5, 0.5], std=[0.225, 0.225, 0.225])
15
+ ])
16
+
17
+ model = torch.jit.load('model_smoke.pt')
18
+ model = model.to(device)
19
+
20
+ classes = ["chmury", 'inne', "dym"]
21
+
22
+ def predict(image, model=model, classes=classes, device=device, transform=transform):
23
+ model.eval()
24
+
25
+ print(type(image))
26
+ # Check if the image is a PyTorch Tensor, if so, use it directly
27
+ if isinstance(image, torch.Tensor):
28
+ img_batch = image.unsqueeze(0).to(device)
29
+ elif isinstance(image, np.ndarray): # Check if the image is a numpy ndarray
30
+ # Convert numpy ndarray to PIL Image
31
+ img = Image.fromarray(image)
32
+ # Transform the image
33
+ img_transformed = transform(img)
34
+ # Convert to a batch of 1 and send to device
35
+ img_batch = img_transformed.unsqueeze(0).to(device)
36
+ else:
37
+ # Load the image and apply transformations
38
+ img = Image.open(image)
39
+ img_transformed = transform(img)
40
+ img_batch = img_transformed.unsqueeze(0).to(device)
41
+
42
+ # Make predictions
43
+ with torch.no_grad():
44
+ _, predicted_idx = model(img_batch).max(1)
45
+
46
+ # Map the index to the class name
47
+ predicted_class = classes[predicted_idx.item()]
48
+
49
+ return predicted_class
50
+
51
+ examples = ["https://img.freepik.com/free-photo/fantasy-style-clouds_23-2151057636.jpg?size=338&ext=jpg&ga=GA1.1.87170709.1707609600&semt=sph",
52
+ "https://energyeducation.ca/wiki/images/5/51/Smoke_column_-_High_Park_Wildfire_%281%29.jpg",
53
+ "https://img-aws.ehowcdn.com/360x267p/s3-us-west-1.amazonaws.com/contentlab.studiod/getty/31a4debc7443411195df509e38a5f9a3.jpg",
54
+ "https://thumb.bibliocad.com/images/content/00000000/9000/9813.jpg",
55
+ "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcRC7j2LoW8D13BOgbT_9J2SI_krX0sadT4oaSuyFjNb3jElJdU-J7DpPgCYvEfFzqoD6c0&usqp=CAU"]
56
+
57
+
58
+ css = """
59
+ h1 {
60
+ text-align: center;
61
+ display:block;
62
+ }
63
+ """
64
+
65
+ with gr.Blocks(theme=gr.themes.Base(primary_hue="zinc",
66
+ secondary_hue="neutral",
67
+ neutral_hue="slate",
68
+ font = gr.themes.GoogleFont("Montserrat")),
69
+ css = css,
70
+ title="Smoke Detection") as demo:
71
+
72
+ demo.load(None, None, js="""
73
+ () => {
74
+ const params = new URLSearchParams(window.location.search);
75
+ if (!params.has('__theme')) {
76
+ params.set('__theme', 'light');
77
+ window.location.search = params.toString();
78
+ }
79
+ }""",
80
+ )
81
+
82
+ markdown_content = """
83
+ <img src='file/dd_logo.png' width='200'>
84
+ """
85
+ gr.Markdown(markdown_content)
86
+ gr.Markdown("# 🔥 Wczesne rozpoznawanie pożarów 🔥")
87
+
88
+ gr.Markdown(""" ## Zauważ Ogień, Ocal Naturę! W mgnieniu oka rozróżnij dym od chmur dzięki naszemu inteligentnemu narzędziu do wykrywania pożarów.
89
+ ### Napędzane przez obszerną bazę ponad 14 000 obrazów i zaawansowane modele uczenia maszynowego, nasze narzędzie umożliwia wczesne rozpoznawanie ognia. Szybko, sprytnie i czujnie – chronimy nasze środowisko przed pierwszymi oznakami zagrożenia.""")
90
+
91
+ with gr.Accordion("Więcej informacji", open = False):
92
+ gr.Markdown("""Nasilenie się pożarów, potęgowane przez zmiany klimatyczne, stanowi poważne wyzwanie w szybkiej detekcji i reagowaniu.
93
+ Tradycyjne metody wykrywania pożarów, takie jak obserwacja ludzka i raporty, często okazują się zbyt wolne, zwłaszcza na obszarach oddalonych.
94
+ Automatyczne systemy wykrywania dymu oferują rozwiązanie, wykorzystując głębokie uczenie do szybkiego i dokładnego identyfikowania dymu na obrazach.
95
+ Umiejętność odróżnienia dymu od zjawisk o podobnym wyglądzie, jak chmury, jest kluczowa. Ta różnica pozwala na szybsze lokalizowanie ognisk pożarów,
96
+ co umożliwia szybsze czas reakcji i potencjalnie ratuje ogromne obszary regionów naturalnych i mieszkalnych przed zniszczeniem.
97
+ Poprzez poprawę szybkości i dokładności wykrywania pożarów, możemy znacząco złagodzić ich wpływ na społeczności, gospodarki i ekosystemy.""")
98
+
99
+ with gr.Column():
100
+ image = gr.Image(label = "Obraz")
101
+
102
+ gallery = gr.Gallery(value = examples, label="Przykładowe zdjęcia",columns=[4], rows=[1], height=200, object_fit = "scale-down")
103
+
104
+ def get_select_index(evt: gr.SelectData):
105
+ return examples[evt.index]
106
+
107
+ gallery.select(get_select_index, None, image)
108
+ action = gr.Button("Rozpoznaj")
109
+ prediction = gr.Textbox(label = "Predykcja")
110
+
111
+ action.click(fn=predict, inputs=image, outputs=prediction)
112
+
113
+ demo.launch(width = "75%", debug = True, allowed_paths=["/"])