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
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
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)
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)
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([
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'),
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') ], [
def update_figure_upload(string): if string is None: raise PreventUpdate return array_to_data_url(img)
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)