AbdullahImran commited on
Commit
6128586
·
verified ·
1 Parent(s): fbcb7dd

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -17
app.py CHANGED
@@ -5,7 +5,6 @@ import numpy as np
5
  import pickle
6
  from google import genai
7
  import gradio as gr
8
- from google.colab import drive
9
  from datetime import datetime, timedelta
10
  from tensorflow.keras.models import load_model
11
  from tensorflow.keras.preprocessing import image as keras_image
@@ -35,28 +34,32 @@ flash = genai.GenerativeModel('gemini-1.5-flash')
35
 
36
  # --- LOAD MODELS ---
37
  def load_models():
38
- drive.mount('/content/drive', force_remount=False)
39
  vgg_model = load_model(
40
- '/content/drive/MyDrive/vgg16_focal_unfreeze_more.keras',
41
  custom_objects={'BinaryFocalCrossentropy': BinaryFocalCrossentropy}
42
  )
 
43
  def focal_loss_fixed(gamma=2., alpha=.25):
44
  import tensorflow.keras.backend as K
45
  def loss_fn(y_true, y_pred):
46
- eps = K.epsilon(); y_pred = K.clip(y_pred, eps, 1.-eps)
 
47
  ce = -y_true * K.log(y_pred)
48
- w = alpha * K.pow(1-y_pred, gamma)
49
- return K.mean(w * ce, axis=-1)
50
  return loss_fn
51
  xce_model = load_model(
52
- '/content/drive/My Drive/severity_post_tta.keras',
53
  custom_objects={'focal_loss_fixed': focal_loss_fixed()}
54
  )
55
- with open('/content/drive/My Drive/ensemble_rf_model.pkl', 'rb') as f:
 
56
  rf_model = pickle.load(f)
57
- with open('/content/drive/My Drive/ensemble_xgb_model.pkl', 'rb') as f:
58
  xgb_model = pickle.load(f)
59
- with open('/content/drive/MyDrive/wildfire_logistic_model_synthetic.joblib', 'rb') as f:
 
60
  lr_model = pickle.load(f)
61
  return vgg_model, xce_model, rf_model, xgb_model, lr_model
62
 
@@ -72,6 +75,7 @@ trend_rules = {
72
  }
73
 
74
  # --- PIPELINE FUNCTIONS ---
 
75
  def detect_fire(img):
76
  x = keras_image.img_to_array(img.resize((128,128)))[None]
77
  x = vgg_preprocess(x)
@@ -86,7 +90,7 @@ def classify_severity(img):
86
  rf_p = rf_model.predict(preds)[0]
87
  xgb_p = xgb_model.predict(preds)[0]
88
  ensemble = int(round((rf_p + xgb_p)/2))
89
- return target_map.get(ensemble,'moderate')
90
 
91
 
92
  def fetch_weather_trend(lat, lon):
@@ -99,15 +103,15 @@ def fetch_weather_trend(lat, lon):
99
  df = pd.DataFrame(data)
100
  for c in ['precipitation_sum','temperature_2m_max','temperature_2m_min',
101
  'relative_humidity_2m_max','relative_humidity_2m_min','windspeed_10m_max']:
102
- df[c] = pd.to_numeric(df.get(c,[]), errors='coerce')
103
  df['precipitation'] = df['precipitation_sum'].fillna(0)
104
- df['temperature'] = (df['temperature_2m_max']+df['temperature_2m_min'])/2
105
- df['humidity'] = (df['relative_humidity_2m_max']+df['relative_humidity_2m_min'])/2
106
  df['wind_speed'] = df['windspeed_10m_max']
107
  df['fire_risk_score'] = (
108
- 0.4*(df['temperature']/55)+
109
- 0.2*(1-df['humidity']/100)+
110
- 0.3*(df['wind_speed']/60)+
111
  0.1*(1-df['precipitation']/50)
112
  )
113
  feats = df[['temperature','humidity','wind_speed','precipitation','fire_risk_score']]
@@ -132,6 +136,7 @@ Provide:
132
  return flash.generate_content(prompt).text
133
 
134
  # --- GRADIO INTERFACE ---
 
135
  def pipeline(image):
136
  img = Image.fromarray(image).convert('RGB')
137
  fire, prob = detect_fire(img)
 
5
  import pickle
6
  from google import genai
7
  import gradio as gr
 
8
  from datetime import datetime, timedelta
9
  from tensorflow.keras.models import load_model
10
  from tensorflow.keras.preprocessing import image as keras_image
 
34
 
35
  # --- LOAD MODELS ---
36
  def load_models():
37
+ # Load VGG16 wildfire detector
38
  vgg_model = load_model(
39
+ 'vgg16_focal_unfreeze_more.keras',
40
  custom_objects={'BinaryFocalCrossentropy': BinaryFocalCrossentropy}
41
  )
42
+ # Load Xception severity classifier
43
  def focal_loss_fixed(gamma=2., alpha=.25):
44
  import tensorflow.keras.backend as K
45
  def loss_fn(y_true, y_pred):
46
+ eps = K.epsilon()
47
+ y_pred = K.clip(y_pred, eps, 1. - eps)
48
  ce = -y_true * K.log(y_pred)
49
+ weight = alpha * K.pow(1 - y_pred, gamma)
50
+ return K.mean(weight * ce, axis=-1)
51
  return loss_fn
52
  xce_model = load_model(
53
+ 'severity_post_tta.keras',
54
  custom_objects={'focal_loss_fixed': focal_loss_fixed()}
55
  )
56
+ # Load ensemble models
57
+ with open('ensemble_rf_model.pkl', 'rb') as f:
58
  rf_model = pickle.load(f)
59
+ with open('ensemble_xgb_model.pkl', 'rb') as f:
60
  xgb_model = pickle.load(f)
61
+ # Load weather trend model
62
+ with open('wildfire_logistic_model_synthetic.joblib', 'rb') as f:
63
  lr_model = pickle.load(f)
64
  return vgg_model, xce_model, rf_model, xgb_model, lr_model
65
 
 
75
  }
76
 
77
  # --- PIPELINE FUNCTIONS ---
78
+
79
  def detect_fire(img):
80
  x = keras_image.img_to_array(img.resize((128,128)))[None]
81
  x = vgg_preprocess(x)
 
90
  rf_p = rf_model.predict(preds)[0]
91
  xgb_p = xgb_model.predict(preds)[0]
92
  ensemble = int(round((rf_p + xgb_p)/2))
93
+ return target_map.get(ensemble, 'moderate')
94
 
95
 
96
  def fetch_weather_trend(lat, lon):
 
103
  df = pd.DataFrame(data)
104
  for c in ['precipitation_sum','temperature_2m_max','temperature_2m_min',
105
  'relative_humidity_2m_max','relative_humidity_2m_min','windspeed_10m_max']:
106
+ df[c] = pd.to_numeric(df.get(c, []), errors='coerce')
107
  df['precipitation'] = df['precipitation_sum'].fillna(0)
108
+ df['temperature'] = (df['temperature_2m_max'] + df['temperature_2m_min'])/2
109
+ df['humidity'] = (df['relative_humidity_2m_max'] + df['relative_humidity_2m_min'])/2
110
  df['wind_speed'] = df['windspeed_10m_max']
111
  df['fire_risk_score'] = (
112
+ 0.4*(df['temperature']/55) +
113
+ 0.2*(1-df['humidity']/100) +
114
+ 0.3*(df['wind_speed']/60) +
115
  0.1*(1-df['precipitation']/50)
116
  )
117
  feats = df[['temperature','humidity','wind_speed','precipitation','fire_risk_score']]
 
136
  return flash.generate_content(prompt).text
137
 
138
  # --- GRADIO INTERFACE ---
139
+
140
  def pipeline(image):
141
  img = Image.fromarray(image).convert('RGB')
142
  fire, prob = detect_fire(img)