Spaces:
Runtime error
Runtime error
add random crop
Browse files- app.py +43 -27
- requirements.txt +0 -1
app.py
CHANGED
@@ -1,12 +1,13 @@
|
|
1 |
from __future__ import annotations
|
2 |
-
|
|
|
|
|
3 |
import gradio as gr
|
4 |
import matplotlib
|
5 |
import matplotlib.pyplot as plt
|
6 |
import numpy as np
|
7 |
import torch
|
8 |
from CCAgT_utils.categories import CategoriesInfos
|
9 |
-
from CCAgT_utils.slice import __create_xy_slice
|
10 |
from CCAgT_utils.types.mask import Mask
|
11 |
from CCAgT_utils.visualization import plot
|
12 |
from PIL import Image
|
@@ -68,42 +69,56 @@ def colorize(
|
|
68 |
return mask.colorized(CategoriesInfos()) / 255
|
69 |
|
70 |
|
71 |
-
|
72 |
-
|
73 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
74 |
|
75 |
-
|
76 |
-
r = 1600.0 / image.shape[1]
|
77 |
-
dim = (1600, int(image.shape[0] * r))
|
78 |
-
return cv2.resize(image, dim, interpolation=cv2.INTER_AREA)
|
79 |
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
|
82 |
|
83 |
def process_big_images(
|
84 |
image: Image.Image,
|
85 |
) -> Mask:
|
86 |
'''Process and post-processing for images bigger than 400x300'''
|
87 |
-
img =
|
88 |
-
mask = np.zeros(shape=(img.shape[0], img.shape[1]), dtype=np.uint8)
|
89 |
|
90 |
-
|
91 |
-
|
92 |
-
img,
|
93 |
-
bbox.y_init,
|
94 |
-
bbox.y_end,
|
95 |
-
bbox.x_init,
|
96 |
-
bbox.x_end,
|
97 |
-
cv2.BORDER_REFLECT,
|
98 |
-
)
|
99 |
-
target_size = (part.shape[0], part.shape[1])
|
100 |
|
101 |
-
|
102 |
-
msk = post_processing(outputs, target_size)
|
103 |
|
104 |
-
|
|
|
105 |
|
106 |
-
return Mask(
|
107 |
|
108 |
|
109 |
def image_with_mask(
|
@@ -156,7 +171,8 @@ This is demo for the SegFormer fine-tuned on sub-dataset from
|
|
156 |
[CCAgT dataset](https://huggingface.co/datasets/lapix/CCAgT). This model
|
157 |
was trained to segment cervical cells silver-stained (AgNOR technique)
|
158 |
images with resolution of 400x300. The model was available at HF hub at
|
159 |
-
[{model_hub_name}](https://huggingface.co/{model_hub_name}).
|
|
|
160 |
"""
|
161 |
examples = [
|
162 |
[f'https://hf.co/{model_hub_name}/resolve/main/sampleA.png'],
|
|
|
1 |
from __future__ import annotations
|
2 |
+
|
3 |
+
import random
|
4 |
+
|
5 |
import gradio as gr
|
6 |
import matplotlib
|
7 |
import matplotlib.pyplot as plt
|
8 |
import numpy as np
|
9 |
import torch
|
10 |
from CCAgT_utils.categories import CategoriesInfos
|
|
|
11 |
from CCAgT_utils.types.mask import Mask
|
12 |
from CCAgT_utils.visualization import plot
|
13 |
from PIL import Image
|
|
|
69 |
return mask.colorized(CategoriesInfos()) / 255
|
70 |
|
71 |
|
72 |
+
# Copied from https://github.com/albumentations-team/albumentations/blob/b1af92ab8e57279f5acd5987770a86a8d6b6b0e5/albumentations/augmentations/crops/functional.py#L35
|
73 |
+
def get_random_crop_coords(
|
74 |
+
height: int,
|
75 |
+
width: int,
|
76 |
+
crop_height: int,
|
77 |
+
crop_width: int,
|
78 |
+
h_start: float,
|
79 |
+
w_start: float,
|
80 |
+
):
|
81 |
+
y1 = int((height - crop_height + 1) * h_start)
|
82 |
+
y2 = y1 + crop_height
|
83 |
+
x1 = int((width - crop_width + 1) * w_start)
|
84 |
+
x2 = x1 + crop_width
|
85 |
+
return x1, y1, x2, y2
|
86 |
+
|
87 |
|
88 |
+
# Copied from https://github.com/albumentations-team/albumentations/blob/b1af92ab8e57279f5acd5987770a86a8d6b6b0e5/albumentations/augmentations/crops/functional.py#L46
|
|
|
|
|
|
|
89 |
|
90 |
+
|
91 |
+
def random_crop(
|
92 |
+
img: np.ndarray,
|
93 |
+
crop_height: int,
|
94 |
+
crop_width: int,
|
95 |
+
h_start: float,
|
96 |
+
w_start: float,
|
97 |
+
) -> np.ndarray:
|
98 |
+
height, width = img.shape[:2]
|
99 |
+
|
100 |
+
x1, y1, x2, y2 = get_random_crop_coords(
|
101 |
+
height, width, crop_height, crop_width, h_start, w_start,
|
102 |
+
)
|
103 |
+
img = img[y1:y2, x1:x2]
|
104 |
+
return img
|
105 |
|
106 |
|
107 |
def process_big_images(
|
108 |
image: Image.Image,
|
109 |
) -> Mask:
|
110 |
'''Process and post-processing for images bigger than 400x300'''
|
111 |
+
img = np.asarray(image)
|
|
|
112 |
|
113 |
+
if img.shape[0] > 300 or img.shape[1] > 400:
|
114 |
+
img = random_crop(img, 300, 400, random.random(), random.random())
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
|
116 |
+
target_size = (img.shape[0], img.shape[1])
|
|
|
117 |
|
118 |
+
outputs = segment(Image.fromarray(img))
|
119 |
+
msk = post_processing(outputs, target_size)
|
120 |
|
121 |
+
return Mask(msk)
|
122 |
|
123 |
|
124 |
def image_with_mask(
|
|
|
171 |
[CCAgT dataset](https://huggingface.co/datasets/lapix/CCAgT). This model
|
172 |
was trained to segment cervical cells silver-stained (AgNOR technique)
|
173 |
images with resolution of 400x300. The model was available at HF hub at
|
174 |
+
[{model_hub_name}](https://huggingface.co/{model_hub_name}). If input
|
175 |
+
an image bigger than 400x300, the demo will random crop it.
|
176 |
"""
|
177 |
examples = [
|
178 |
[f'https://hf.co/{model_hub_name}/resolve/main/sampleA.png'],
|
requirements.txt
CHANGED
@@ -1,6 +1,5 @@
|
|
1 |
CCAgT-utils
|
2 |
matplotlib
|
3 |
numpy
|
4 |
-
opencv-python
|
5 |
torch
|
6 |
transformers
|
|
|
1 |
CCAgT-utils
|
2 |
matplotlib
|
3 |
numpy
|
|
|
4 |
torch
|
5 |
transformers
|