Exemplo n.º 1
0
def fill_tab(tab):
    if tab == 'canvas-tab':
        return [
            dash_canvas.DashCanvas(
                id='canvas-stitch',
                width=canvas_width,
                height=canvas_height,
                scale=scale,
                lineWidth=2,
                lineColor='red',
                tool="line",
                hide_buttons=['pencil'],
                image_content=array_to_data_url(
                    np.zeros((height, width), dtype=np.uint8)),
                goButtonTitle='Estimate translation',
            ),
            html.Button('Upload demo data', id='demo'),
            image_upload_zone('upload-stitch', multiple=True, width=45),
        ]
    elif tab == 'result-tab':
        return [
            html.Img(id='stitching-result',
                     src=array_to_data_url(
                         np.zeros((height, width), dtype=np.uint8)),
                     width=canvas_width)
        ]
    else:
        return [
            html.Img(id='bla', src='assets/stitching.gif', width=canvas_width),
        ]
 def save_segmentation(labs, save_mode):
     new_labels = np.array(labs)
     np.save('labels.npy', new_labels)
     if save_mode == 'png':
         color_labels = color.label2rgb(new_labels)
         uri = array_to_data_url(new_labels, dtype=np.uint8)
         return uri
Exemplo n.º 3
0
 def upload_content(list_image_string, list_filenames, click,
                    n_rows, n_cols):
     if list_image_string is not None:
         order = np.argsort(list_filenames)
         image_list = [np.asarray(image_string_to_PILImage(
                             list_image_string[i])) for i in order]
         res = tile_images(image_list, n_rows, n_cols)
         return array_to_data_url(res)
     elif click:
         import os
         filelist = glob('./assets/tile*.jpg')
         filelist.sort()
         image_list = [io.imread(filename) for filename in filelist[:4]]
         res = tile_images(image_list, n_rows, n_cols)
         return array_to_data_url(res)
     else:
         raise PreventUpdate
 def update_figure(labs):
     if labs:
         new_labels = np.array(labs)
         overlay = segmentation.mark_boundaries(img, new_labels)
         overlay = img_as_ubyte(overlay)
         return array_to_data_url(overlay)
     else:
         raise PreventUpdate
Exemplo n.º 5
0
 def modify_content(n_cl, n_rows, n_cols, overlap, estimate, image_string):
     tiles = untile_images(image_string, n_rows, n_cols)
     if estimate is not None and len(estimate) > 0:
         overlap = []
         for line in estimate:
             overlap.append(1.1 * line['length'] / tiles.shape[3])
     canvas = register_tiles(tiles,
                             n_rows,
                             n_cols,
                             overlaps=overlap,
                             pad=100)
     return array_to_data_url(canvas)
Exemplo n.º 6
0
 def modify_content(n_cl, n_rows, n_cols, overlap, estimate, image_string):
     if image_string is None:
         raise PreventUpdate
     tiles = untile_images(image_string, n_rows, n_cols)
     if estimate is not None and len(estimate) > 0:
         overlap_dict = _sort_props_lines(estimate, tiles.shape[2],
                                          tiles.shape[3], n_cols)
     else:
         overlap_dict = None
     canvas = register_tiles(tiles, n_rows, n_cols,
                             overlap_global=overlap,
                             overlap_local=overlap_dict,
                             pad=np.max(tiles.shape[2:])//2,
                             blending=True)
     return array_to_data_url(canvas)
 def update_figure_upload(image, string, h, s, w):
     mask = parse_jsonstring(string, shape=(round(h / s), round(w / s)))
     if mask.sum() > 0:
         if image is None:
             im = img
             image = img
         else:
             im = image_string_to_PILImage(image)
             im = np.asarray(im)
         seg = superpixel_color_segmentation(im, mask)
     else:
         if image is None:
             image = img
         seg = np.ones((h, w))
     fill_value = 255 * np.ones(3, dtype=np.uint8)
     dat = np.copy(im)
     dat[np.logical_not(seg)] = fill_value
     return array_to_data_url(dat)
Exemplo n.º 8
0
def description():
    return "Remove background of image to extract objects of interest."


layout = html.Div([
    html.Div([
        html.Div([
            html.H2(children='Remove image background'),
            dcc.Markdown('''
             Draw on the object of interest, and press remove background.'''),
            dash_canvas.DashCanvas(
                id='canvas-bg',
                width=canvas_width,
                height=canvas_height,
                scale=scale,
                image_content=array_to_data_url(img_app3),
                lineWidth=4,
                goButtonTitle='Remove background',
                hide_buttons=['line', 'zoom', 'pan'],
            ),
            html.H6(children=['Brush width']),
            dcc.Slider(
                id='bg-width-slider',
                min=2,
                max=40,
                step=1,
                value=[5]
            ),
            image_upload_zone('upload-image-bg'),
        ], className="seven columns"),
        html.Div([
Exemplo n.º 9
0
list_columns = ['length', 'width', 'height']
columns = [{"name": i, "id": i} for i in list_columns]

layout = html.Div([
    html.Div([
        dash_canvas.DashCanvas(
            id='canvas-line',
            width=canvas_width,
            height=canvas_height,
            scale=scale,
            lineWidth=2,
            lineColor='red',
            tool="line",
            hide_buttons=['pencil'],
            image_content=array_to_data_url(img),
            goButtonTitle='Measure',
        ),
    ],
             className="seven columns"),
    html.Div([
        html.H3('Draw lines and measure lengths'),
        html.H3(children='How to use this app', id='measure-subtitle'),
        html.Img(id='measure-help', src='assets/measure.gif', width='100%'),
        html.H4(children="Objects properties"),
        dash_table.DataTable(
            id='table-line',
            columns=columns,
            editable=True,
        ),
    ],
                   id='download-link',
                   download="correct_segmentation.png",
                   href="",
                   target="_blank"),
            dcc.Store(id='cache', data=''),
        ],
        className="four columns"),
    html.Div([
        dash_canvas.DashCanvas(
            id='canvas_',
            width=canvas_width,
            height=canvas_height,
            scale=scale,
            lineWidth=2,
            lineColor='red',
            image_content=array_to_data_url(overlay),
            goButtonTitle='Update segmentation',
        ),
    ],
             className="six columns"),
])

# ----------------------- Callbacks -----------------------------


def callbacks(app):
    @app.callback(Output('cache', 'data'), [
        Input('canvas_', 'trigger'),
    ], [
        State('canvas_', 'json_data'),
        State('canvas_', 'scale'),
Exemplo n.º 11
0
 dcc.Tabs(id='stitching-tabs',
          value='canvas-tab',
          children=[
              dcc.Tab(label='Image tiles',
                      value='canvas-tab',
                      children=[
                          dash_canvas.DashCanvas(
                              id='canvas-stitch',
                              width=canvas_width,
                              height=canvas_height,
                              scale=scale,
                              lineWidth=2,
                              lineColor='red',
                              tool="line",
                              image_content=array_to_data_url(
                                  np.zeros(
                                      (width, width), dtype=np.uint8)),
                              goButtonTitle='Estimate translation',
                          ),
                          html.Button('Upload demo data', id='demo'),
                          image_upload_zone(
                              'upload-stitch', multiple=True, width=45),
                          html.Div(id='sh_x', hidden=True),
                      ]),
              dcc.Tab(label='Stitched Image',
                      value='result-tab',
                      children=[
                          html.Img(id='stitching-result',
                                   src=array_to_data_url(
                                       np.zeros((height, width),
                                                dtype=np.uint8)),
                height=canvas_height,
                scale=scale,
                filename=filename,
                lineWidth=4,
                goButtonTitle='Remove background',
                hide_buttons=['line', 'zoom', 'pan'],
            ),
            html.H6(children=['Brush width']),
            dcc.Slider(id='bg-width-slider', min=2, max=40, step=1, value=[5]),
            image_upload_zone('upload-image-bg'),
        ],
                 className="six columns"),
        html.Div([
            html.H3(children='Image without background'),
            html.Img(id='segmentation-bg',
                     src=array_to_data_url(np.zeros_like(img)),
                     width=canvas_width)
        ],
                 className="six columns")
    ],
             className="row")
])


# ----------------------- Callbacks -----------------------------
def callbacks(app):
    @app.callback(Output('segmentation-bg', 'src'), [
        Input('canvas-bg', 'image_content'),
        Input('canvas-bg', 'json_data'),
        Input('canvas-bg', 'height')
    ], [
Exemplo n.º 13
0
def update_figure_upload(string):
    if string is None:
        raise PreventUpdate
    return array_to_data_url(img)
Exemplo n.º 14
0
def modify_result(contrast, brightness, image_string):
    print('in modify result')
    img = np.asarray(image_string_to_PILImage(image_string))
    img = contrast_adjust(img, contrast)
    img = brightness_adjust(img, brightness)
    return array_to_data_url(img)