File size: 7,388 Bytes
525f3dd
e3cece8
40fa99d
a75241a
cffbee3
 
e3cece8
a75241a
 
5b0a672
525f3dd
c513c64
ed88d55
097c58a
 
 
 
 
97d54df
 
9a3ade1
97d54df
 
097c58a
97d54df
 
097c58a
 
 
97d54df
097c58a
 
 
 
 
 
97d54df
 
097c58a
 
 
 
 
 
97d54df
097c58a
 
 
 
 
97d54df
097c58a
 
 
 
 
 
 
 
 
 
97d54df
 
be6e884
5d59f41
be6e884
1e70ba8
097c58a
97d54df
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
 
1e70ba8
 
 
97d54df
097c58a
1e70ba8
 
 
97d54df
097c58a
 
 
 
 
 
 
 
a75241a
7854bc4
ed88d55
525f3dd
67022df
 
0f3e703
ed88d55
 
097c58a
afe71f2
 
3720a03
ed88d55
097c58a
525f3dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
import gradio as gr
import tensorflow as tf
import numpy as np
import cv2
from huggingface_hub import from_pretrained_keras


def resize_image(img_in,input_height,input_width):
    return cv2.resize( img_in, ( input_width,input_height) ,interpolation=cv2.INTER_NEAREST)


def do_prediction(img):
    model = from_pretrained_keras("vahidrezanezhad/sbb_binarization")

    img_height_model=model.layers[len(model.layers)-1].output_shape[1]
    img_width_model=model.layers[len(model.layers)-1].output_shape[2]
    n_classes=model.layers[len(model.layers)-1].output_shape[3]

    if img.shape[0] < img_height_model:
        img = resize_image(img, img_height_model, img.shape[1])

    if img.shape[1] < img_width_model:
        img = resize_image(img, img.shape[0], img_width_model)

    marginal_of_patch_percent = 0.1
    margin = int(marginal_of_patch_percent * img_height_model)
    width_mid = img_width_model - 2 * margin
    height_mid = img_height_model - 2 * margin
    img = img / float(255.0)
    img = img.astype(np.float16)
    img_h = img.shape[0]
    img_w = img.shape[1]
    prediction_true = np.zeros((img_h, img_w, 3))
    mask_true = np.zeros((img_h, img_w))
    nxf = img_w / float(width_mid)
    nyf = img_h / float(height_mid)
    nxf = int(nxf) + 1 if nxf > int(nxf) else int(nxf)
    nyf = int(nyf) + 1 if nyf > int(nyf) else int(nyf)

    for i in range(nxf):
        for j in range(nyf):
            if i == 0:
                index_x_d = i * width_mid
                index_x_u = index_x_d + img_width_model
            else:
                index_x_d = i * width_mid
                index_x_u = index_x_d + img_width_model
            if j == 0:
                index_y_d = j * height_mid
                index_y_u = index_y_d + img_height_model
            else:
                index_y_d = j * height_mid
                index_y_u = index_y_d + img_height_model
            if index_x_u > img_w:
                index_x_u = img_w
                index_x_d = img_w - img_width_model
            if index_y_u > img_h:
                index_y_u = img_h
                index_y_d = img_h - img_height_model

            img_patch = img[index_y_d:index_y_u, index_x_d:index_x_u, :]
            label_p_pred = model.predict(img_patch.reshape(1, img_patch.shape[0], img_patch.shape[1], img_patch.shape[2]),
                                         verbose=0)

            seg = np.argmax(label_p_pred, axis=3)[0]

            seg_color = np.repeat(seg[:, :, np.newaxis], 3, axis=2)

            if i == 0 and j == 0:
                seg_color = seg_color[0 : seg_color.shape[0] - margin, 0 : seg_color.shape[1] - margin, :]
                #seg = seg[0 : seg.shape[0] - margin, 0 : seg.shape[1] - margin]
                #mask_true[index_y_d + 0 : index_y_u - margin, index_x_d + 0 : index_x_u - margin] = seg
                prediction_true[index_y_d + 0 : index_y_u - margin, index_x_d + 0 : index_x_u - margin, :] = seg_color
            elif i == nxf - 1 and j == nyf - 1:
                seg_color = seg_color[margin : seg_color.shape[0] - 0, margin : seg_color.shape[1] - 0, :]
                #seg = seg[margin : seg.shape[0] - 0, margin : seg.shape[1] - 0]
                #mask_true[index_y_d + margin : index_y_u - 0, index_x_d + margin : index_x_u - 0] = seg
                prediction_true[index_y_d + margin : index_y_u - 0, index_x_d + margin : index_x_u - 0, :] = seg_color
            elif i == 0 and j == nyf - 1:
                seg_color = seg_color[margin : seg_color.shape[0] - 0, 0 : seg_color.shape[1] - margin, :]
                #seg = seg[margin : seg.shape[0] - 0, 0 : seg.shape[1] - margin]
                #mask_true[index_y_d + margin : index_y_u - 0, index_x_d + 0 : index_x_u - margin] = seg
                prediction_true[index_y_d + margin : index_y_u - 0, index_x_d + 0 : index_x_u - margin, :] = seg_color
            elif i == nxf - 1 and j == 0:
                seg_color = seg_color[0 : seg_color.shape[0] - margin, margin : seg_color.shape[1] - 0, :]
                #seg = seg[0 : seg.shape[0] - margin, margin : seg.shape[1] - 0]
                #mask_true[index_y_d + 0 : index_y_u - margin, index_x_d + margin : index_x_u - 0] = seg
                prediction_true[index_y_d + 0 : index_y_u - margin, index_x_d + margin : index_x_u - 0, :] = seg_color
            elif i == 0 and j != 0 and j != nyf - 1:
                seg_color = seg_color[margin : seg_color.shape[0] - margin, 0 : seg_color.shape[1] - margin, :]
                #seg = seg[margin : seg.shape[0] - margin, 0 : seg.shape[1] - margin]
                #mask_true[index_y_d + margin : index_y_u - margin, index_x_d + 0 : index_x_u - margin] = seg
                prediction_true[index_y_d + margin : index_y_u - margin, index_x_d + 0 : index_x_u - margin, :] = seg_color
            elif i == nxf - 1 and j != 0 and j != nyf - 1:
                seg_color = seg_color[margin : seg_color.shape[0] - margin, margin : seg_color.shape[1] - 0, :]
                #seg = seg[margin : seg.shape[0] - margin, margin : seg.shape[1] - 0]
                #mask_true[index_y_d + margin : index_y_u - margin, index_x_d + margin : index_x_u - 0] = seg
                prediction_true[index_y_d + margin : index_y_u - margin, index_x_d + margin : index_x_u - 0, :] = seg_color
            elif i != 0 and i != nxf - 1 and j == 0:
                seg_color = seg_color[0 : seg_color.shape[0] - margin, margin : seg_color.shape[1] - margin, :]
                #seg = seg[0 : seg.shape[0] - margin, margin : seg.shape[1] - margin]
                #mask_true[index_y_d + 0 : index_y_u - margin, index_x_d + margin : index_x_u - margin] = seg
                prediction_true[index_y_d + 0 : index_y_u - margin, index_x_d + margin : index_x_u - margin, :] = seg_color
            elif i != 0 and i != nxf - 1 and j == nyf - 1:
                seg_color = seg_color[margin : seg_color.shape[0] - 0, margin : seg_color.shape[1] - margin, :]
                #seg = seg[margin : seg.shape[0] - 0, margin : seg.shape[1] - margin]
                #mask_true[index_y_d + margin : index_y_u - 0, index_x_d + margin : index_x_u - margin] = seg
                prediction_true[index_y_d + margin : index_y_u - 0, index_x_d + margin : index_x_u - margin, :] = seg_color
            else:
                seg_color = seg_color[margin : seg_color.shape[0] - margin, margin : seg_color.shape[1] - margin, :]
                #seg = seg[margin : seg.shape[0] - margin, margin : seg.shape[1] - margin]
                #mask_true[index_y_d + margin : index_y_u - margin, index_x_d + margin : index_x_u - margin] = seg
                prediction_true[index_y_d + margin : index_y_u - margin, index_x_d + margin : index_x_u - margin, :] = seg_color

    prediction_true = prediction_true.astype(np.uint8)

                


    '''
    img = img / float(255.0)
    image = resize_image(image, 224,448)
    prediction = model.predict(image.reshape(1,224,448,image.shape[2]))
    prediction = tf.squeeze(tf.round(prediction))

    prediction = np.argmax(prediction,axis=2)

    prediction = np.repeat(prediction[:, :, np.newaxis]*255, 3, axis=2)
    print(prediction.shape)
    
    '''
    prediction_true = prediction_true * -1
    prediction_true = prediction_true + 1
    return prediction_true * 255

iface = gr.Interface(fn=do_prediction, inputs=gr.Image(), outputs=gr.Image())
iface.launch()