def show_chipmatch_graph(ibs, cm_list, qreq_, fnum=None, pnum=None, **kwargs): r""" CommandLine: python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:0 --show python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:1 --show python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:1 --show --zoom=.15 python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:1 --zoom=.25 --save foo.jpg --diskshow --figsize=12,6 --dpath=. --dpi=280 Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_graph import * # NOQA >>> from ibeis.algo.hots.chip_match import * # NOQA >>> ibs, qreq_, cm_list = plh.testdata_post_sver('PZ_MTEST', qaid_list=[1, 2, 3, 4, 5, 6, 7, 18]) >>> [cm.score_nsum(qreq_) for cm in cm_list] >>> ut.quit_if_noshow() >>> daid = cm.get_groundtruth_daids()[0] >>> zoom = ut.get_argval('--zoom', float, .4) >>> show_chipmatch_graph(ibs, cm_list, qreq_, zoom=zoom) >>> #cm.show_single_annotmatch(qreq_, daid) >>> ut.show_if_requested() Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_graph import * # NOQA >>> from ibeis.algo.hots.chip_match import * # NOQA >>> #ibs, qreq_, cm_list = plh.testdata_post_sver('PZ_MTEST', qaid_list='all') >>> ibs, qreq_, cm_list = plh.testdata_pre_sver('PZ_MTEST', qaid_list='all') >>> [cm.score_nsum(qreq_) for cm in cm_list] >>> ut.quit_if_noshow() >>> daid = cm.get_groundtruth_daids()[0] >>> zoom = ut.get_argval('--zoom', float, .4) >>> show_chipmatch_graph(ibs, cm_list, qreq_, zoom=zoom) >>> #cm.show_single_annotmatch(qreq_, daid) >>> ut.show_if_requested() """ pass # breaking num = 3 qaid_list = [cm.qaid for cm in cm_list] daids_list = [cm.get_top_aids(num).tolist() for cm in cm_list] scores_list = [cm.get_annot_scores(daids) for cm, daids in zip(cm_list, daids_list)] #graph = netx.Graph() #node = graph.add_node(img) # FDSFDS!!! netx_graph = make_ibeis_matching_graph(ibs, qaid_list, daids_list, scores_list) fnum = None zoom = kwargs.get('zoom', .4) viz_netx_chipgraph(ibs, netx_graph, fnum=fnum, with_images=True, zoom=zoom)
def plot(self, fnum, pnum): from ibeis.viz.viz_graph import viz_netx_chipgraph self.update_netx_graph() self.pos = viz_netx_chipgraph(self.ibs, self.netx_graph, fnum=self.fnum, with_images=self.with_images, zoom=zoom) self.ax = pt.gca() for aid in self.selected_aids: self.highlight_aid(aid) pass
def get_annotmatch_subgraph(ibs): r""" http://bokeh.pydata.org/en/latest/ https://github.com/jsexauer/networkx_viewer TODO: Need a special visualization In the web I need: * graph of annotations matches. * can move them around. * edit lines between them. * http://stackoverflow.com/questions/15373530/web-graph-visualization-tool This should share functionality with a name view. Args: ibs (IBEISController): ibeis controller object CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_subgraph --show # Networkx example python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:0 --show Ignore: from ibeis import viz Example: >>> # ENABLE_DOCTEST >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_MTEST') >>> result = get_annotmatch_subgraph(ibs) >>> ut.show_if_requested() """ #import ibeis #ibs = ibeis.opendb(db='PZ_MTEST') #rowids = ibs._get_all_annotmatch_rowids() #aids1 = ibs.get_annotmatch_aid1(rowids) #aids2 = ibs.get_annotmatch_aid2(rowids) # # nids = ibs.get_valid_nids() nids = nids[0:5] aids_list = ibs.get_name_aids(nids) import itertools unflat_edges = (list(itertools.product(aids, aids)) for aids in aids_list) aid_pairs = [tup for tup in ut.iflatten(unflat_edges) if tup[0] != tup[1]] aids1 = ut.get_list_column(aid_pairs, 0) aids2 = ut.get_list_column(aid_pairs, 1) # Enumerate annotmatch properties rng = np.random.RandomState(0) edge_props = { 'weight': rng.rand(len(aids1)), 'reviewer_confidence': rng.rand(len(aids1)), 'algo_confidence': rng.rand(len(aids1)), } # Remove data that does not need to be visualized # (dont show all the aids if you dont have to) thresh = .5 flags = edge_props['weight'] > thresh aids1_ = ut.compress(aids1, flags) aids2_ = ut.compress(aids2, flags) chosen_props = ut.dict_subset(edge_props, ['weight']) edge_props = ut.map_dict_vals(ut.partial(ut.compress, flag_list=flags), chosen_props) edge_keys = list(edge_props.keys()) edge_vals = ut.dict_take(edge_props, edge_keys) edge_attr_list = [dict(zip(edge_keys, vals_)) for vals_ in zip(*edge_vals)] unique_aids = list(set(aids1_ + aids2_)) # Make a graph between the chips nodes = unique_aids edges = list(zip(aids1_, aids2_, edge_attr_list)) import networkx as nx graph = nx.DiGraph() graph.add_nodes_from(nodes) graph.add_edges_from(edges) from ibeis.viz import viz_graph fnum = None #zoom = kwargs.get('zoom', .4) viz_graph.viz_netx_chipgraph(ibs, graph, fnum=fnum, with_images=True, augment_graph=False)
def get_annotmatch_subgraph(ibs): r""" http://bokeh.pydata.org/en/latest/ https://github.com/jsexauer/networkx_viewer TODO: Need a special visualization In the web I need: * graph of annotations matches. * can move them around. * edit lines between them. * http://stackoverflow.com/questions/15373530/web-graph-visualization-tool This should share functionality with a name view. Args: ibs (IBEISController): ibeis controller object CommandLine: python -m ibeis.annotmatch_funcs --exec-get_annotmatch_subgraph --show # Networkx example python -m ibeis.viz.viz_graph --test-show_chipmatch_graph:0 --show Ignore: from ibeis import viz Example: >>> # ENABLE_DOCTEST >>> from ibeis.annotmatch_funcs import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='PZ_MTEST') >>> result = get_annotmatch_subgraph(ibs) >>> ut.show_if_requested() """ #import ibeis #ibs = ibeis.opendb(db='PZ_MTEST') #rowids = ibs._get_all_annotmatch_rowids() #aids1 = ibs.get_annotmatch_aid1(rowids) #aids2 = ibs.get_annotmatch_aid2(rowids) # # nids = ibs.get_valid_nids() nids = nids[0:5] aids_list = ibs.get_name_aids(nids) import itertools unflat_edges = (list(itertools.product(aids, aids)) for aids in aids_list) aid_pairs = [tup for tup in ut.iflatten(unflat_edges) if tup[0] != tup[1]] aids1 = ut.get_list_column(aid_pairs, 0) aids2 = ut.get_list_column(aid_pairs, 1) # Enumerate annotmatch properties rng = np.random.RandomState(0) edge_props = { 'weight': rng.rand(len(aids1)), 'reviewer_confidence': rng.rand(len(aids1)), 'algo_confidence': rng.rand(len(aids1)), } # Remove data that does not need to be visualized # (dont show all the aids if you dont have to) thresh = .5 flags = edge_props['weight'] > thresh aids1 = ut.compress(aids1, flags) aids2 = ut.compress(aids2, flags) edge_props = {key: ut.compress(val, flags) for key, val in edge_props.items()} edge_keys = list(edge_props.keys()) edge_vals = ut.dict_take(edge_props, edge_keys) unique_aids = list(set(aids1 + aids2)) # Make a graph between the chips nodes = list(zip(unique_aids)) edges = list(zip(aids1, aids2, *edge_vals)) node_lbls = [('aid', 'int')] edge_lbls = [('weight', 'float')] from ibeis.viz import viz_graph netx_graph = viz_graph.make_netx_graph(nodes, edges, node_lbls, edge_lbls) fnum = None #zoom = kwargs.get('zoom', .4) zoom = .4 viz_graph.viz_netx_chipgraph(ibs, netx_graph, fnum=fnum, with_images=True, zoom=zoom)
def merge_viewpoint_graph(): r""" CommandLine: python -m ibeis.scripts.specialdraw merge_viewpoint_graph --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.scripts.specialdraw import * # NOQA >>> result = merge_viewpoint_graph() >>> print(result) >>> ut.quit_if_noshow() >>> import plottool as pt >>> ut.show_if_requested() """ import plottool as pt import ibeis import networkx as nx defaultdb = 'PZ_Master1' ibs = ibeis.opendb(defaultdb=defaultdb) #nids = None aids = ibs.get_name_aids(4875) ibs.print_annot_stats(aids) left_aids = ibs.filter_annots_general(aids, view='left')[0:3] right_aids = ibs.filter_annots_general(aids, view='right') right_aids = list(set(right_aids) - {14517})[0:3] back = ibs.filter_annots_general(aids, view='back')[0:4] backleft = ibs.filter_annots_general(aids, view='backleft')[0:4] backright = ibs.filter_annots_general(aids, view='backright')[0:4] right_graph = nx.DiGraph(ut.upper_diag_self_prodx(right_aids)) left_graph = nx.DiGraph(ut.upper_diag_self_prodx(left_aids)) back_edges = [ tuple([back[0], backright[0]][::1]), tuple([back[0], backleft[0]][::1]), ] back_graph = nx.DiGraph(back_edges) # Let the graph be a bit smaller right_graph.edge[right_aids[1]][ right_aids[2]]['constraint'] = ut.get_argflag('--constraint') left_graph.edge[left_aids[1]][left_aids[2]]['constraint'] = ut.get_argflag( '--constraint') #right_graph = right_graph.to_undirected().to_directed() #left_graph = left_graph.to_undirected().to_directed() nx.set_node_attributes(right_graph, 'groupid', 'right') nx.set_node_attributes(left_graph, 'groupid', 'left') #nx.set_node_attributes(right_graph, 'scale', .2) #nx.set_node_attributes(left_graph, 'scale', .2) #back_graph.node[back[0]]['scale'] = 2.3 nx.set_node_attributes(back_graph, 'groupid', 'back') view_graph = nx.compose_all([left_graph, back_graph, right_graph]) view_graph.add_edges_from([ [backright[0], right_aids[0]][::-1], [backleft[0], left_aids[0]][::-1], ]) pt.ensure_pylab_qt4() graph = graph = view_graph # NOQA #graph = graph.to_undirected() nx.set_edge_attributes(graph, 'color', pt.DARK_ORANGE[0:3]) #nx.set_edge_attributes(graph, 'color', pt.BLACK) nx.set_edge_attributes(graph, 'color', {edge: pt.LIGHT_BLUE[0:3] for edge in back_edges}) #pt.close_all_figures(); from ibeis.viz import viz_graph layoutkw = { 'nodesep': 1, } viz_graph.viz_netx_chipgraph(ibs, graph, with_images=1, prog='dot', augment_graph=False, layoutkw=layoutkw) if False: """ #view_graph = left_graph pt.close_all_figures(); viz_netx_chipgraph(ibs, view_graph, with_images=0, prog='neato') #viz_netx_chipgraph(ibs, view_graph, layout='pydot', with_images=False) #back_graph = make_name_graph_interaction(ibs, aids=back, with_all=False) aids = left_aids + back + backleft + backright + right_aids for aid, chip in zip(aids, ibs.get_annot_chips(aids)): fpath = ut.truepath('~/slides/merge/aid_%d.jpg' % (aid,)) vt.imwrite(fpath, vt.resize_to_maxdims(chip, (400, 400))) ut.copy_files_to(, ) aids = ibs.filterannots_by_tags(ibs.get_valid_aids(), dict(has_any_annotmatch='splitcase')) aid1 = ibs.group_annots_by_name_dict(aids)[252] aid2 = ibs.group_annots_by_name_dict(aids)[6791] aids1 = ibs.get_annot_groundtruth(aid1)[0][0:4] aids2 = ibs.get_annot_groundtruth(aid2)[0] make_name_graph_interaction(ibs, aids=aids1 + aids2, with_all=False) ut.ensuredir(ut.truthpath('~/slides/split/)) for aid, chip in zip(aids, ibs.get_annot_chips(aids)): fpath = ut.truepath('~/slides/merge/aidA_%d.jpg' % (aid,)) vt.imwrite(fpath, vt.resize_to_maxdims(chip, (400, 400))) """ pass
def merge_viewpoint_graph(): r""" CommandLine: python -m ibeis.scripts.specialdraw merge_viewpoint_graph --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.scripts.specialdraw import * # NOQA >>> result = merge_viewpoint_graph() >>> print(result) >>> ut.quit_if_noshow() >>> import plottool as pt >>> ut.show_if_requested() """ import plottool as pt import ibeis import networkx as nx defaultdb = 'PZ_Master1' ibs = ibeis.opendb(defaultdb=defaultdb) #nids = None aids = ibs.get_name_aids(4875) ibs.print_annot_stats(aids) left_aids = ibs.filter_annots_general(aids, view='left')[0:3] right_aids = ibs.filter_annots_general(aids, view='right') right_aids = list(set(right_aids) - {14517})[0:3] back = ibs.filter_annots_general(aids, view='back')[0:4] backleft = ibs.filter_annots_general(aids, view='backleft')[0:4] backright = ibs.filter_annots_general(aids, view='backright')[0:4] right_graph = nx.DiGraph(ut.upper_diag_self_prodx(right_aids)) left_graph = nx.DiGraph(ut.upper_diag_self_prodx(left_aids)) back_edges = [ tuple([back[0], backright[0]][::1]), tuple([back[0], backleft[0]][::1]), ] back_graph = nx.DiGraph(back_edges) # Let the graph be a bit smaller right_graph.edge[right_aids[1]][right_aids[2]]['constraint'] = ut.get_argflag('--constraint') left_graph.edge[left_aids[1]][left_aids[2]]['constraint'] = ut.get_argflag('--constraint') #right_graph = right_graph.to_undirected().to_directed() #left_graph = left_graph.to_undirected().to_directed() nx.set_node_attributes(right_graph, 'groupid', 'right') nx.set_node_attributes(left_graph, 'groupid', 'left') #nx.set_node_attributes(right_graph, 'scale', .2) #nx.set_node_attributes(left_graph, 'scale', .2) #back_graph.node[back[0]]['scale'] = 2.3 nx.set_node_attributes(back_graph, 'groupid', 'back') view_graph = nx.compose_all([left_graph, back_graph, right_graph]) view_graph.add_edges_from([ [backright[0], right_aids[0]][::-1], [backleft[0], left_aids[0]][::-1], ]) pt.ensure_pylab_qt4() graph = graph = view_graph # NOQA #graph = graph.to_undirected() nx.set_edge_attributes(graph, 'color', pt.DARK_ORANGE[0:3]) #nx.set_edge_attributes(graph, 'color', pt.BLACK) nx.set_edge_attributes(graph, 'color', {edge: pt.LIGHT_BLUE[0:3] for edge in back_edges}) #pt.close_all_figures(); from ibeis.viz import viz_graph layoutkw = { 'nodesep': 1, } viz_graph.viz_netx_chipgraph(ibs, graph, with_images=1, prog='dot', augment_graph=False, layoutkw=layoutkw) if False: """ #view_graph = left_graph pt.close_all_figures(); viz_netx_chipgraph(ibs, view_graph, with_images=0, prog='neato') #viz_netx_chipgraph(ibs, view_graph, layout='pydot', with_images=False) #back_graph = make_name_graph_interaction(ibs, aids=back, with_all=False) aids = left_aids + back + backleft + backright + right_aids for aid, chip in zip(aids, ibs.get_annot_chips(aids)): fpath = ut.truepath('~/slides/merge/aid_%d.jpg' % (aid,)) vt.imwrite(fpath, vt.resize_to_maxdims(chip, (400, 400))) ut.copy_files_to(, ) aids = ibs.filterannots_by_tags(ibs.get_valid_aids(), dict(has_any_annotmatch='splitcase')) aid1 = ibs.group_annots_by_name_dict(aids)[252] aid2 = ibs.group_annots_by_name_dict(aids)[6791] aids1 = ibs.get_annot_groundtruth(aid1)[0][0:4] aids2 = ibs.get_annot_groundtruth(aid2)[0] make_name_graph_interaction(ibs, aids=aids1 + aids2, with_all=False) ut.ensuredir(ut.truthpath('~/slides/split/)) for aid, chip in zip(aids, ibs.get_annot_chips(aids)): fpath = ut.truepath('~/slides/merge/aidA_%d.jpg' % (aid,)) vt.imwrite(fpath, vt.resize_to_maxdims(chip, (400, 400))) """ pass