Spaces:
Build error
Build error
Commit
·
90b19f5
1
Parent(s):
80e3f03
Update app.py
Browse files
app.py
CHANGED
|
@@ -6,6 +6,12 @@ from scipy import ndimage
|
|
| 6 |
from skimage import measure, color, io
|
| 7 |
from tensorflow.keras.preprocessing import image
|
| 8 |
from scipy import ndimage
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 9 |
|
| 10 |
#Function that predicts on only 1 sample
|
| 11 |
def predict_sample(image):
|
|
@@ -39,7 +45,7 @@ def create_input_image(data, visualize=False):
|
|
| 39 |
return input
|
| 40 |
|
| 41 |
|
| 42 |
-
|
| 43 |
|
| 44 |
def get_instances(prediction, data, max_filter_size=1):
|
| 45 |
#Adjust format (clusters to be 255 and rest is 0)
|
|
@@ -107,4 +113,89 @@ def get_instances(prediction, data, max_filter_size=1):
|
|
| 107 |
cluster_ids = cluster_ids.astype('int8')
|
| 108 |
cluster_ids[cluster_ids == -11] = 0
|
| 109 |
|
| 110 |
-
return cluster_ids
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
from skimage import measure, color, io
|
| 7 |
from tensorflow.keras.preprocessing import image
|
| 8 |
from scipy import ndimage
|
| 9 |
+
import skimage.io as io
|
| 10 |
+
import skimage.transform as trans
|
| 11 |
+
import numpy as np
|
| 12 |
+
import tensorflow as tf
|
| 13 |
+
from huggingface_hub.keras_mixin import from_pretrained_keras
|
| 14 |
+
|
| 15 |
|
| 16 |
#Function that predicts on only 1 sample
|
| 17 |
def predict_sample(image):
|
|
|
|
| 45 |
return input
|
| 46 |
|
| 47 |
|
| 48 |
+
model= from_pretrained_keras("tareknaous/unet-visual-clustering")
|
| 49 |
|
| 50 |
def get_instances(prediction, data, max_filter_size=1):
|
| 51 |
#Adjust format (clusters to be 255 and rest is 0)
|
|
|
|
| 113 |
cluster_ids = cluster_ids.astype('int8')
|
| 114 |
cluster_ids[cluster_ids == -11] = 0
|
| 115 |
|
| 116 |
+
return cluster_ids
|
| 117 |
+
|
| 118 |
+
|
| 119 |
+
import gradio as gr
|
| 120 |
+
from itertools import cycle, islice
|
| 121 |
+
|
| 122 |
+
|
| 123 |
+
def visual_clustering(cluster_type, num_clusters, num_samples, random_state, median_kernel_size, max_kernel_size):
|
| 124 |
+
|
| 125 |
+
NUM_CLUSTERS = num_clusters
|
| 126 |
+
CLUSTER_STD = 4 * np.ones(NUM_CLUSTERS)
|
| 127 |
+
|
| 128 |
+
if cluster_type == "blobs":
|
| 129 |
+
data = datasets.make_blobs(n_samples=num_samples, centers=NUM_CLUSTERS, random_state=random_state,center_box=(0, 256), cluster_std=CLUSTER_STD)
|
| 130 |
+
|
| 131 |
+
elif cluster_type == "varied blobs":
|
| 132 |
+
cluster_std = 1.5 * np.ones(NUM_CLUSTERS)
|
| 133 |
+
data = datasets.make_blobs(n_samples=num_samples, centers=NUM_CLUSTERS, cluster_std=cluster_std, random_state=random_state)
|
| 134 |
+
|
| 135 |
+
elif cluster_type == "aniso":
|
| 136 |
+
X, y = datasets.make_blobs(n_samples=num_samples, centers=NUM_CLUSTERS, random_state=random_state, center_box=(-30, 30))
|
| 137 |
+
transformation = [[0.8, -0.6], [-0.4, 0.8]]
|
| 138 |
+
X_aniso = np.dot(X, transformation)
|
| 139 |
+
data = (X_aniso, y)
|
| 140 |
+
|
| 141 |
+
elif cluster_type == "noisy moons":
|
| 142 |
+
data = datasets.make_moons(n_samples=num_samples, noise=.05)
|
| 143 |
+
|
| 144 |
+
elif cluster_type == "noisy circles":
|
| 145 |
+
data = datasets.make_circles(n_samples=num_samples, factor=.01, noise=.05)
|
| 146 |
+
|
| 147 |
+
max_x = max(data[0][:, 0])
|
| 148 |
+
min_x = min(data[0][:, 0])
|
| 149 |
+
new_max = 256
|
| 150 |
+
new_min = 0
|
| 151 |
+
|
| 152 |
+
data[0][:, 0] = (((data[0][:, 0] - min_x)*(new_max-new_min))/(max_x-min_x))+ new_min
|
| 153 |
+
|
| 154 |
+
max_y = max(data[0][:, 1])
|
| 155 |
+
min_y = min(data[0][:, 1])
|
| 156 |
+
new_max_y = 256
|
| 157 |
+
new_min_y = 0
|
| 158 |
+
|
| 159 |
+
data[0][:, 1] = (((data[0][:, 1] - min_y)*(new_max_y-new_min_y))/(max_y-min_y))+ new_min_y
|
| 160 |
+
|
| 161 |
+
fig1 = plt.figure()
|
| 162 |
+
plt.scatter(data[0][:, 0], data[0][:, 1], s=1, c='black')
|
| 163 |
+
plt.close()
|
| 164 |
+
|
| 165 |
+
input = create_input_image(data[0])
|
| 166 |
+
filtered = ndimage.median_filter(input, size=median_kernel_size)
|
| 167 |
+
result = predict_sample(filtered)
|
| 168 |
+
y_km = get_instances(result, data[0], max_filter_size=max_kernel_size)
|
| 169 |
+
|
| 170 |
+
colors = np.array(list(islice(cycle(["#000000", '#377eb8', '#ff7f00', '#4daf4a',
|
| 171 |
+
'#f781bf', '#a65628', '#984ea3',
|
| 172 |
+
'#999999', '#e41a1c', '#dede00' ,'#491010']),
|
| 173 |
+
int(max(y_km) + 1))))
|
| 174 |
+
#add black color for outliers (if any)
|
| 175 |
+
colors = np.append(colors, ["#000000"])
|
| 176 |
+
|
| 177 |
+
fig2 = plt.figure()
|
| 178 |
+
plt.scatter(data[0][:, 0], data[0][:, 1], s=10, color=colors[y_km.astype('int8')])
|
| 179 |
+
plt.close()
|
| 180 |
+
|
| 181 |
+
return fig1, fig2
|
| 182 |
+
|
| 183 |
+
iface = gr.Interface(
|
| 184 |
+
|
| 185 |
+
fn=visual_clustering,
|
| 186 |
+
|
| 187 |
+
inputs=[
|
| 188 |
+
gr.inputs.Dropdown(["blobs", "varied blobs", "aniso", "noisy moons", "noisy circles" ]),
|
| 189 |
+
gr.inputs.Slider(1, 10, step=1, label='Number of Clusters'),
|
| 190 |
+
gr.inputs.Slider(10000, 1000000, step=10000, label='Number of Samples'),
|
| 191 |
+
gr.inputs.Slider(1, 100, step=1, label='Random State'),
|
| 192 |
+
gr.inputs.Slider(1, 100, step=1, label='Denoising Filter Kernel Size'),
|
| 193 |
+
gr.inputs.Slider(1,100, step=1, label='Max Filter Kernel Size')
|
| 194 |
+
],
|
| 195 |
+
|
| 196 |
+
outputs=[
|
| 197 |
+
gr.outputs.Image(type='plot', label='Dataset'),
|
| 198 |
+
gr.outputs.Image(type='plot', label='Clustering Result')
|
| 199 |
+
]
|
| 200 |
+
)
|
| 201 |
+
iface.launch()
|