Commit
·
a49489d
1
Parent(s):
9bf8244
final
Browse files- .gitignore +3 -0
- app.py +89 -0
- final.h5 +3 -0
- images/test_10158.jpg +0 -0
- images/train_10004.jpg +0 -0
- requirements.txt +3 -0
.gitignore
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
venv
|
2 |
+
.env
|
3 |
+
.venv
|
app.py
ADDED
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import gradio as gr
|
2 |
+
import tensorflow as tf
|
3 |
+
import numpy as np
|
4 |
+
from tensorflow.keras import backend as K
|
5 |
+
|
6 |
+
|
7 |
+
def fbeta(y_true, y_pred, threshold_shift=0):
|
8 |
+
beta = 2
|
9 |
+
y_pred = K.clip(y_pred, 0, 1)
|
10 |
+
y_pred_bin = K.round(y_pred + threshold_shift)
|
11 |
+
tp = K.sum(K.round(y_true * y_pred_bin)) + K.epsilon()
|
12 |
+
fp = K.sum(K.round(K.clip(y_pred_bin - y_true, 0, 1)))
|
13 |
+
fn = K.sum(K.round(K.clip(y_true - y_pred, 0, 1)))
|
14 |
+
precision = tp / (tp + fp)
|
15 |
+
recall = tp / (tp + fn)
|
16 |
+
beta_squared = beta**2
|
17 |
+
return (
|
18 |
+
(beta_squared + 1)
|
19 |
+
* (precision * recall)
|
20 |
+
/ (beta_squared * precision + recall + K.epsilon())
|
21 |
+
)
|
22 |
+
|
23 |
+
|
24 |
+
def accuracy_score(y_true, y_pred, epsilon=1e-4):
|
25 |
+
y_true = tf.cast(y_true, tf.float32)
|
26 |
+
y_pred = tf.cast(
|
27 |
+
tf.greater(tf.cast(y_pred, tf.float32), tf.constant(0.5)), tf.float32
|
28 |
+
)
|
29 |
+
tp = tf.reduce_sum(y_true * y_pred, axis=1)
|
30 |
+
fp = tf.reduce_sum(y_pred, axis=1) - tp
|
31 |
+
fn = tf.reduce_sum(y_true, axis=1) - tp
|
32 |
+
y_true = tf.cast(y_true, tf.bool)
|
33 |
+
y_pred = tf.cast(y_pred, tf.bool)
|
34 |
+
tn = tf.reduce_sum(
|
35 |
+
tf.cast(tf.logical_not(y_true), tf.float32)
|
36 |
+
* tf.cast(tf.logical_not(y_pred), tf.float32),
|
37 |
+
axis=1,
|
38 |
+
)
|
39 |
+
return (tp + tn) / (tp + tn + fp + fn + epsilon)
|
40 |
+
|
41 |
+
|
42 |
+
model = tf.keras.models.load_model(
|
43 |
+
"final.h5", custom_objects={"fbeta": fbeta, "accuracy_score": accuracy_score}
|
44 |
+
)
|
45 |
+
|
46 |
+
class_names = [
|
47 |
+
"clear",
|
48 |
+
"agriculture",
|
49 |
+
"selective_logging",
|
50 |
+
"haze",
|
51 |
+
"bare_ground",
|
52 |
+
"blooming",
|
53 |
+
"habitation",
|
54 |
+
"artisinal_mine",
|
55 |
+
"blow_down",
|
56 |
+
"road",
|
57 |
+
"slash_burn",
|
58 |
+
"primary",
|
59 |
+
"cultivation",
|
60 |
+
"water",
|
61 |
+
"conventional_mine",
|
62 |
+
"cloudy",
|
63 |
+
"partly_cloudy",
|
64 |
+
]
|
65 |
+
|
66 |
+
|
67 |
+
def predict(image):
|
68 |
+
image = tf.image.resize(image, [64, 64])
|
69 |
+
image = image / 255.0
|
70 |
+
image = np.expand_dims(image, axis=0)
|
71 |
+
predictions = model.predict(image)[0]
|
72 |
+
print(predictions)
|
73 |
+
results = {class_names[i]: float(predictions[i]) for i in range(len(class_names))}
|
74 |
+
return results
|
75 |
+
|
76 |
+
|
77 |
+
test_examples = [
|
78 |
+
"./images/test_10158.jpg", # Path to Test Image 1
|
79 |
+
"./images/train_10004.jpg", # Path to Test Image 2
|
80 |
+
]
|
81 |
+
|
82 |
+
iface = gr.Interface(
|
83 |
+
fn=predict,
|
84 |
+
inputs=gr.Image(type="numpy"),
|
85 |
+
outputs=gr.Label(num_top_classes=17),
|
86 |
+
examples=test_examples,
|
87 |
+
)
|
88 |
+
|
89 |
+
iface.launch()
|
final.h5
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:199df7c1cae0f24c23a58d21b17e286cb99ab577963013065d7866ff3c92d624
|
3 |
+
size 78038628
|
images/test_10158.jpg
ADDED
![]() |
images/train_10004.jpg
ADDED
![]() |
requirements.txt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
tensorflow==2.9.0
|
2 |
+
gradio
|
3 |
+
numpy==1.22
|