示例#1
0
def get_query_annot_pair_info(ibs, qaid, qreq_, draw_fmatches, kpts1=None):
    #print('!!! qqreq_ = %r' % (qreq_,))
    query_config2_ = (None
                      if qreq_ is None else qreq_.get_external_query_config2())
    tblhack = getattr(qreq_, 'tablename', None)
    #print('!!! query_config2_ = %r' % (query_config2_,))
    if (not tblhack or tblhack == 'BC_DTW') and getattr(
            qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip'
                   ) and draw_fmatches and draw_fmatches != 'hackoff':
            rchip1 = qreq_.get_fmatch_overlayed_chip(qaid,
                                                     config=query_config2_)
            draw_fmatches = False
        else:
            rchip1 = ibs.depc_annot.get_property('chips',
                                                 qaid,
                                                 'img',
                                                 config=query_config2_)
            draw_fmatches = False
    else:
        rchip1 = vh.get_chips(ibs, [qaid], config2_=query_config2_)[0]
    if draw_fmatches:
        if kpts1 is None:
            kpts1 = vh.get_kpts(ibs, [qaid], config2_=query_config2_)[0]
    else:
        kpts1 = None
    return rchip1, kpts1
示例#2
0
def show_many_chips(ibs,
                    aid_list,
                    config2_=None,
                    fnum=None,
                    pnum=None,
                    vert=True):
    r"""
    CommandLine:
        python -m ibeis.viz.viz_chip --test-show_many_chips
        python -m ibeis.viz.viz_chip --test-show_many_chips --show
        python -m ibeis.viz.viz_chip --test-show_many_chips --show --db NNP_Master3 --aids=13276,14047,14489,14906,10194,10201,12656,10150,11002,15315,7191,13127,15591,12838,13970,14123,14167 --no-annote --dpath figures --save ~/latex/crall-candidacy-2015/figures/challengechips.jpg '--caption=challenging images'

    Example:
        >>> # ENABLE_DOCTEST
        >>> from ibeis.viz.viz_chip import *  # NOQA
        >>> import numpy as np
        >>> in_image = False
        >>> ibs, aid_list, kwargs, config2_ = testdata_showchip()
        >>> # execute function
        >>> show_many_chips(ibs, aid_list, config2_)
        >>> ut.show_if_requested()
    """
    if ut.VERBOSE:
        print('[viz] show_many_chips')
    in_image = False
    chip_list = vh.get_chips(ibs,
                             aid_list,
                             in_image=in_image,
                             config2_=config2_)
    import vtool_ibeis as vt
    stacked_chips = vt.stack_image_recurse(chip_list,
                                           modifysize=True,
                                           vert=vert)
    pt.imshow(stacked_chips, fnum=None, pnum=None)
示例#3
0
def get_query_annot_pair_info(ibs,
                              qaid,
                              qreq_,
                              draw_fmatches,
                              kpts1=None,
                              as_fpath=False):
    #print('!!! qqreq_ = %r' % (qreq_,))
    query_config2_ = (None if qreq_ is None else qreq_.extern_query_config2)
    tblhack = getattr(qreq_, 'tablename', None)
    #print('!!! query_config2_ = %r' % (query_config2_,))
    if (not tblhack or tblhack.lower() in [
            'bc_dtw', 'oc_wdtw', 'curvrankdorsal', 'curvrankfluke'
    ]) and getattr(qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip'
                   ) and draw_fmatches and draw_fmatches != 'hackoff':
            rchip1 = qreq_.get_fmatch_overlayed_chip(qaid,
                                                     config=query_config2_)
            draw_fmatches = False
        else:
            rchip1 = ibs.depc_annot.get_property('chips',
                                                 qaid,
                                                 'img',
                                                 config=query_config2_)
            draw_fmatches = False
    else:
        rchip1 = vh.get_chips(ibs, [qaid],
                              config2_=query_config2_,
                              as_fpath=as_fpath)[0]
    if draw_fmatches:
        if kpts1 is None:
            kpts1 = vh.get_kpts(ibs, [qaid], config2_=query_config2_)[0]
    else:
        kpts1 = None
    return rchip1, kpts1
示例#4
0
def get_data_annot_pair_info(ibs, aid_list, qreq_, draw_fmatches,
                             scale_down=False, kpts2_list=None):
    data_config2_ = (None if qreq_ is None else
                     qreq_.get_external_data_config2())
    #print('!!! data_config2_ = %r' % (data_config2_,))
    #print('!!! dqreq_ = %r' % (qreq_,))
    tblhack = getattr(qreq_, 'tablename', None)
    if (not tblhack or tblhack == 'BC_DTW') and getattr(qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip') and draw_fmatches and draw_fmatches != 'hackoff':
            rchip2_list = qreq_.get_fmatch_overlayed_chip(aid_list, config=data_config2_)
            #rchip2_list = ibs.depc_annot.get_property('chips', aid_list, 'img', config=data_config2_)
            draw_fmatches = False
        else:
            rchip2_list = ibs.depc_annot.get_property('chips', aid_list, 'img', config=data_config2_)
            draw_fmatches = False
        #vh.get_chips(ibs, aid_list, config2_=data_config2_)
    else:
        rchip2_list = vh.get_chips(ibs, aid_list, config2_=data_config2_)
    if draw_fmatches:
        if kpts2_list is None:
            kpts2_list = vh.get_kpts(ibs, aid_list, config2_=data_config2_)
    else:
        kpts2_list = [None] * len(aid_list)
    if scale_down:
        pass
    return rchip2_list, kpts2_list
示例#5
0
def get_query_annot_pair_info(ibs, qaid, qreq_, draw_fmatches, kpts1=None):
    #print('!!! qqreq_ = %r' % (qreq_,))
    query_config2_ = (None if qreq_ is None
                      else qreq_.get_external_query_config2())
    tblhack = getattr(qreq_, 'tablename', None)
    #print('!!! query_config2_ = %r' % (query_config2_,))
    if (not tblhack or tblhack == 'BC_DTW') and getattr(qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip')  and draw_fmatches and draw_fmatches != 'hackoff':
            rchip1 = qreq_.get_fmatch_overlayed_chip(qaid, config=query_config2_)
            draw_fmatches = False
        else:
            rchip1 = ibs.depc_annot.get_property('chips', qaid, 'img', config=query_config2_)
            draw_fmatches = False
    else:
        rchip1 = vh.get_chips(ibs, [qaid], config2_=query_config2_)[0]
    if draw_fmatches:
        if kpts1 is None:
            kpts1 = vh.get_kpts(ibs, [qaid], config2_=query_config2_)[0]
    else:
        kpts1 = None
    return rchip1, kpts1
示例#6
0
def get_data_annot_pair_info(ibs,
                             aid_list,
                             qreq_,
                             draw_fmatches,
                             scale_down=False,
                             kpts2_list=None,
                             as_fpath=False):
    data_config2_ = (None if qreq_ is None else qreq_.extern_data_config2)
    #print('!!! data_config2_ = %r' % (data_config2_,))
    #print('!!! dqreq_ = %r' % (qreq_,))
    tblhack = getattr(qreq_, 'tablename', None)
    if (not tblhack or tblhack.lower() in [
            'bc_dtw', 'oc_wdtw', 'curvrankdorsal', 'curvrankfluke'
    ]) and getattr(qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip'
                   ) and draw_fmatches and draw_fmatches != 'hackoff':
            rchip2_list = qreq_.get_fmatch_overlayed_chip(aid_list,
                                                          config=data_config2_)
            #rchip2_list = ibs.depc_annot.get_property('chips', aid_list, 'img', config=data_config2_)
            draw_fmatches = False
        else:
            rchip2_list = ibs.depc_annot.get_property('chips',
                                                      aid_list,
                                                      'img',
                                                      config=data_config2_)
            draw_fmatches = False
        #vh.get_chips(ibs, aid_list, config2_=data_config2_)
    else:
        rchip2_list = vh.get_chips(ibs,
                                   aid_list,
                                   config2_=data_config2_,
                                   as_fpath=as_fpath)
    if draw_fmatches:
        if kpts2_list is None:
            kpts2_list = vh.get_kpts(ibs, aid_list, config2_=data_config2_)
    else:
        kpts2_list = [None] * len(aid_list)
    if scale_down:
        pass
    return rchip2_list, kpts2_list
示例#7
0
def show_many_chips(ibs, aid_list, config2_=None):
    r"""
    CommandLine:
        python -m ibeis.viz.viz_chip --test-show_many_chips
        python -m ibeis.viz.viz_chip --test-show_many_chips --show --db NNP_Master3 --aids=13276,14047,14489,14906,10194,10201,12656,10150,11002,15315,7191,13127,15591,12838,13970,14123,14167 --no-annote --dpath figures --save ~/latex/crall-candidacy-2015/figures/challengechips.jpg '--caption=challenging images'

    Example:
        >>> # ENABLE_DOCTEST
        >>> from ibeis.viz.viz_chip import *  # NOQA
        >>> import numpy as np
        >>> in_image = False
        >>> ibs, aid_list, kwargs, config2_ = testdata_showchip()
        >>> # execute function
        >>> show_many_chips(ibs, aid_list, config2_)
        >>> ut.show_if_requested()
    """
    if ut.VERBOSE:
        print('[viz] show_many_chips')
    in_image = False
    chip_list = vh.get_chips(ibs, aid_list, in_image=in_image, config2_=config2_)
    import vtool as vt
    stacked_chips = vt.stack_image_recurse(chip_list, modifysize=True)
    pt.imshow(stacked_chips)
示例#8
0
def get_data_annot_pair_info(ibs,
                             aid_list,
                             qreq_,
                             draw_fmatches,
                             scale_down=False,
                             kpts2_list=None):
    data_config2_ = (None
                     if qreq_ is None else qreq_.get_external_data_config2())
    #print('!!! data_config2_ = %r' % (data_config2_,))
    #print('!!! dqreq_ = %r' % (qreq_,))
    tblhack = getattr(qreq_, 'tablename', None)
    if (not tblhack or tblhack == 'BC_DTW') and getattr(
            qreq_, '_isnewreq', None):
        if hasattr(qreq_, 'get_fmatch_overlayed_chip'
                   ) and draw_fmatches and draw_fmatches != 'hackoff':
            rchip2_list = qreq_.get_fmatch_overlayed_chip(aid_list,
                                                          config=data_config2_)
            #rchip2_list = ibs.depc_annot.get_property('chips', aid_list, 'img', config=data_config2_)
            draw_fmatches = False
        else:
            rchip2_list = ibs.depc_annot.get_property('chips',
                                                      aid_list,
                                                      'img',
                                                      config=data_config2_)
            draw_fmatches = False
        #vh.get_chips(ibs, aid_list, config2_=data_config2_)
    else:
        rchip2_list = vh.get_chips(ibs, aid_list, config2_=data_config2_)
    if draw_fmatches:
        if kpts2_list is None:
            kpts2_list = vh.get_kpts(ibs, aid_list, config2_=data_config2_)
    else:
        kpts2_list = [None] * len(aid_list)
    if scale_down:
        pass
    return rchip2_list, kpts2_list
示例#9
0
    def __init__(self,
                 ibs,
                 cm,
                 aid2=None,
                 fnum=None,
                 figtitle='Match Interaction',
                 same_fig=True,
                 qreq_=None,
                 **kwargs):
        self.qres = cm

        self.ibs = ibs
        self.cm = cm
        self.qreq_ = qreq_
        self.fnum = pt.ensure_fnum(fnum)
        # Unpack Args
        if aid2 is None:
            index = 0
            # FIXME: no sortself
            cm.sortself()
            self.rank = index
        else:
            index = cm.daid2_idx.get(aid2, None)
            # TODO: rank?
            self.rank = None
        if index is not None:
            self.qaid = self.cm.qaid
            self.daid = self.cm.daid_list[index]
            self.fm = self.cm.fm_list[index]
            self.fk = self.cm.fk_list[index]
            self.fsv = self.cm.fsv_list[index]
            if self.cm.fs_list is None:
                fs_list = self.cm.get_fsv_prod_list()
            else:
                fs_list = self.cm.fs_list
            self.fs = None if fs_list is None else fs_list[index]
            self.score = None if self.cm.score_list is None else self.cm.score_list[
                index]
            self.H1 = None if self.cm.H_list is None else cm.H_list[index]
        else:
            self.qaid = self.cm.qaid
            self.daid = aid2
            self.fm = np.empty((0, 2), dtype=hstypes.FM_DTYPE)
            self.fk = np.empty(0, dtype=hstypes.FK_DTYPE)
            self.fsv = np.empty((0, 2), dtype=hstypes.FS_DTYPE)
            self.fs = np.empty(0, dtype=hstypes.FS_DTYPE)
            self.score = None
            self.H1 = None

        # Read properties
        self.query_config2_ = (None if self.qreq_ is None else
                               self.qreq_.get_external_query_config2())
        self.data_config2_ = (None if self.qreq_ is None else
                              self.qreq_.get_external_data_config2())
        self.rchip1 = vh.get_chips(ibs, [self.qaid],
                                   config2_=self.query_config2_)[0]
        self.rchip2 = vh.get_chips(ibs, [self.daid],
                                   config2_=self.data_config2_)[0]
        # Begin Interaction
        # call doclf docla and make figure
        self.fig = ih.begin_interaction('matches', self.fnum)
        self.xywh2_ptr = [None]
        self.mode = kwargs.pop('mode', 0)
        # New state vars
        self.same_fig = same_fig
        self.use_homog = False
        self.vert = kwargs.pop('vert', None)
        self.mx = kwargs.pop('mx', None)
        self.last_fx = 0
        self.fnum2 = pt.next_fnum()
        self.figtitle = figtitle
        self.kwargs = kwargs

        abstract_interaction.register_interaction(self)
        ut.inject_func_as_method(self,
                                 AbstractInteraction.append_button.im_func)
        ut.inject_func_as_method(self,
                                 AbstractInteraction.show_popup_menu.im_func)
        self.scope = []

        if not kwargs.get('nobegin', False):
            dodraw = kwargs.get('dodraw', True)
            self.begin(dodraw=dodraw)
示例#10
0
def show_chip(ibs,
              aid,
              in_image=False,
              annote=True,
              title_suffix='',
              weight_label=None,
              weights=None,
              config2_=None,
              **kwargs):
    r""" Driver function to show chips

    Args:
        ibs (ibeis.IBEISController):
        aid (int): annotation rowid
        in_image (bool): displays annotation with the context of its source image
        annote (bool): enables overlay annoations
        title_suffix (str):
        weight_label (None): (default = None)
        weights (None): (default = None)
        config2_ (dict): (default = None)

    Kwargs:
        enable_chip_title_prefix, nokpts, kpts_subset, kpts, text_color,
        notitle, draw_lbls, show_aidstr, show_gname, show_name, show_nid,
        show_exemplar, show_num_gt, show_quality_text, show_viewcode, fnum,
        title, figtitle, pnum, interpolation, cmap, heatmap, data_colorbar,
        darken, update, xlabel, redraw_image, ax, alpha, docla, doclf,
        projection, pts, ell
        color (3/4-tuple, ndarray, or str): colors for keypoints

    CommandLine:
        python -m ibeis.viz.viz_chip show_chip --show --ecc
        python -c "import utool as ut; ut.print_auto_docstr('ibeis.viz.viz_chip', 'show_chip')"
        python -m ibeis.viz.viz_chip show_chip --show --db NNP_Master3 --aids 14047 --no-annote
        python -m ibeis.viz.viz_chip show_chip --show --db NNP_Master3 --aids 14047 --no-annote

        python -m ibeis.viz.viz_chip show_chip --show --db PZ_MTEST --aid 1 --bgmethod=cnn
        python -m ibeis.viz.viz_chip show_chip --show --db PZ_MTEST --aid 1 --bgmethod=cnn --scale_max=30

        python -m ibeis.viz.viz_chip show_chip --show --db PZ_MTEST --aid 1 --ecc --draw_lbls=False --notitle --save=~/slides/lnbnn_query.jpg --dpi=300

    Example:
        >>> # VIZ_TEST
        >>> from ibeis.viz.viz_chip import *  # NOQA
        >>> import numpy as np
        >>> import vtool_ibeis as vt
        >>> in_image = False
        >>> ibs, aid_list, kwargs, config2_ = testdata_showchip()
        >>> aid = aid_list[0]
        >>> if True:
        >>>     import matplotlib as mpl
        >>>     from ibeis.scripts.thesis import TMP_RC
        >>>     mpl.rcParams.update(TMP_RC)
        >>> if ut.get_argflag('--ecc'):
        >>>     kpts = ibs.get_annot_kpts(aid, config2_=config2_)
        >>>     weights = ibs.get_annot_fgweights([aid], ensure=True, config2_=config2_)[0]
        >>>     kpts = ut.random_sample(kpts[weights > .9], 200, seed=0)
        >>>     ecc = vt.get_kpts_eccentricity(kpts)
        >>>     scale = 1 / vt.get_scales(kpts)
        >>>     #s = ecc if config2_.affine_invariance else scale
        >>>     s = scale
        >>>     colors = pt.scores_to_color(s, cmap_='jet')
        >>>     kwargs['color'] = colors
        >>>     kwargs['kpts'] = kpts
        >>>     kwargs['ell_linewidth'] = 3
        >>>     kwargs['ell_alpha'] = .7
        >>> show_chip(ibs, aid, in_image=in_image, config2_=config2_, **kwargs)
        >>> pt.show_if_requested()
    """
    if ut.VERBOSE:
        print('[viz] show_chip(aid=%r)' % (aid, ))
    #ibs.assert_valid_aids((aid,))
    # Get chip
    #print('in_image = %r' % (in_image,))
    chip = vh.get_chips(ibs, aid, in_image=in_image, config2_=config2_)
    # Create chip title
    chip_text = vh.get_annot_texts(ibs, [aid], **kwargs)[0]
    if kwargs.get('enable_chip_title_prefix', True):
        chip_title_text = chip_text + title_suffix
    else:
        chip_title_text = title_suffix
    chip_title_text = chip_title_text.strip('\n')
    # Draw chip
    fig, ax = pt.imshow(chip, **kwargs)
    # Populate axis user data
    vh.set_ibsdat(ax, 'viztype', 'chip')
    vh.set_ibsdat(ax, 'aid', aid)
    if annote and not kwargs.get('nokpts', False):
        # Get and draw keypoints
        if 'color' not in kwargs:
            if weight_label == 'fg_weights':
                if weights is None and ibs.has_species_detector(
                        ibs.get_annot_species_texts(aid)):
                    weight_label = 'fg_weights'
                    weights = ibs.get_annot_fgweights([aid],
                                                      ensure=True,
                                                      config2_=config2_)[0]
            if weights is not None:
                cmap_ = 'hot'
                #if weight_label == 'dstncvs':
                #    cmap_ = 'rainbow'
                color = pt.scores_to_color(weights,
                                           cmap_=cmap_,
                                           reverse_cmap=False)
                kwargs['color'] = color
                kwargs['ell_color'] = color
                kwargs['pts_color'] = color

        kpts_ = vh.get_kpts(ibs,
                            aid,
                            in_image,
                            config2_=config2_,
                            kpts_subset=kwargs.get('kpts_subset', None),
                            kpts=kwargs.pop('kpts', None))
        pt.viz_keypoints._annotate_kpts(kpts_, **kwargs)
        if kwargs.get('draw_lbls', True):
            pt.upperleft_text(chip_text, color=kwargs.get('text_color', None))
    use_title = not kwargs.get('notitle', False)
    if use_title:
        pt.set_title(chip_title_text)
    if in_image:
        gid = ibs.get_annot_gids(aid)
        aid_list = ibs.get_image_aids(gid)
        annotekw = viz_image.get_annot_annotations(ibs,
                                                   aid_list,
                                                   sel_aids=[aid],
                                                   draw_lbls=kwargs.get(
                                                       'draw_lbls', True))
        # Put annotation centers in the axis
        ph.set_plotdat(ax, 'annotation_bbox_list', annotekw['bbox_list'])
        ph.set_plotdat(ax, 'aid_list', aid_list)
        pt.viz_image2.draw_image_overlay(ax, **annotekw)

        zoom_ = ut.get_argval('--zoom', type_=float, default=None)
        if zoom_ is not None:
            import vtool_ibeis as vt
            # Zoom into the chip for some image context
            rotated_verts = ibs.get_annot_rotated_verts(aid)
            bbox = ibs.get_annot_bboxes(aid)
            #print(bbox)
            #print(rotated_verts)
            rotated_bbox = vt.bbox_from_verts(rotated_verts)
            imgw, imgh = ibs.get_image_sizes(gid)

            pad_factor = zoom_
            pad_length = min(bbox[2], bbox[3]) * pad_factor
            minx = max(rotated_bbox[0] - pad_length, 0)
            miny = max(rotated_bbox[1] - pad_length, 0)
            maxx = min((rotated_bbox[0] + rotated_bbox[2]) + pad_length, imgw)
            maxy = min((rotated_bbox[1] + rotated_bbox[3]) + pad_length, imgh)

            #maxy = imgh - maxy
            #miny = imgh - miny

            ax = pt.gca()
            ax.set_xlim(minx, maxx)
            ax.set_ylim(miny, maxy)
            ax.invert_yaxis()
    else:
        ph.set_plotdat(ax, 'chipshape', chip.shape)

    #if 'featweights' in vars() and 'color' in kwargs:
    if weights is not None and weight_label is not None:
        ## HACK HACK HACK
        if len(weights) > 0:
            cb = pt.colorbar(weights, kwargs['color'])
            cb.set_label(weight_label)
    return fig, ax
示例#11
0
    def __init__(self, ibs, cm, aid2=None, fnum=None,
                 figtitle='Match Interaction', same_fig=True,
                 qreq_=None, **kwargs):
        self.qres = cm

        self.ibs = ibs
        self.cm = cm
        self.qreq_ = qreq_
        self.fnum = pt.ensure_fnum(fnum)
        # Unpack Args
        if aid2 is None:
            index = 0
            # FIXME: no sortself
            cm.sortself()
            self.rank = index
        else:
            index = cm.daid2_idx.get(aid2, None)
            # TODO: rank?
            self.rank = None
        if index is not None:
            self.qaid  = self.cm.qaid
            self.daid  = self.cm.daid_list[index]
            self.fm    = self.cm.fm_list[index]
            self.fk    = self.cm.fk_list[index]
            self.fsv   = self.cm.fsv_list[index]
            if self.cm.fs_list is None:
                fs_list = self.cm.get_fsv_prod_list()
            else:
                fs_list = self.cm.fs_list
            self.fs    = None if fs_list is None else fs_list[index]
            self.score = None if self.cm.score_list is None else self.cm.score_list[index]
            self.H1    = None if self.cm.H_list is None else cm.H_list[index]
        else:
            self.qaid  = self.cm.qaid
            self.daid  = aid2
            self.fm    = np.empty((0, 2), dtype=hstypes.FM_DTYPE)
            self.fk    = np.empty(0, dtype=hstypes.FK_DTYPE)
            self.fsv   = np.empty((0, 2), dtype=hstypes.FS_DTYPE)
            self.fs    = np.empty(0, dtype=hstypes.FS_DTYPE)
            self.score = None
            self.H1    = None

        # Read properties
        self.query_config2_ = (None if self.qreq_ is None else
                               self.qreq_.get_external_query_config2())
        self.data_config2_ = (None if self.qreq_ is None else
                              self.qreq_.get_external_data_config2())
        self.rchip1 = vh.get_chips(ibs, [self.qaid], config2_=self.query_config2_)[0]
        self.rchip2 = vh.get_chips(ibs, [self.daid], config2_=self.data_config2_)[0]
        # Begin Interaction
        # call doclf docla and make figure
        self.fig = ih.begin_interaction('matches', self.fnum)
        self.xywh2_ptr  = [None]
        self.mode = kwargs.pop('mode', 0)
        # New state vars
        self.same_fig = same_fig
        self.use_homog = False
        self.vert = kwargs.pop('vert', None)
        self.mx   = kwargs.pop('mx', None)
        self.last_fx = 0
        self.fnum2 = pt.next_fnum()
        self.figtitle = figtitle
        self.kwargs = kwargs

        abstract_interaction.register_interaction(self)
        ut.inject_func_as_method(self, AbstractInteraction.append_button.im_func)
        ut.inject_func_as_method(self, AbstractInteraction.show_popup_menu.im_func)
        self.scope = []

        if not kwargs.get('nobegin', False):
            dodraw = kwargs.get('dodraw', True)
            self.begin(dodraw=dodraw)
示例#12
0
    def __init__(self, ibs, cm, aid2=None, fnum=None,
                 qreq_=None, figtitle='Match Interaction',
                 **kwargs):
        #print('[ibs] MatchInteraction.__init__')
        self.ibs = ibs
        self.cm = cm
        self.qreq_ = qreq_
        # Unpack Args
        if aid2 is None:
            index = 0
            # FIXME: no sortself
            cm.sortself()
            self.rank = index
        else:
            index = cm.daid2_idx.get(aid2, None)
            # TODO: rank?
            self.rank = None
        if index is not None:
            self.qaid  = self.cm.qaid
            self.daid  = self.cm.daid_list[index]
            fm    = self.cm.fm_list[index]
            fk    = self.cm.fk_list[index]
            fsv   = self.cm.fsv_list[index]
            if self.cm.fs_list is None:
                fs_list = self.cm.get_fsv_prod_list()
            else:
                fs_list = self.cm.fs_list
            fs    = None if fs_list is None else fs_list[index]
            H1    = None if self.cm.H_list is None else cm.H_list[index]
            self.score = None if self.cm.score_list is None else self.cm.score_list[index]
        else:
            self.qaid  = self.cm.qaid
            self.daid  = aid2
            fm    = np.empty((0, 2), dtype=hstypes.FM_DTYPE)
            fk    = np.empty(0, dtype=hstypes.FK_DTYPE)
            fsv   = np.empty((0, 2), dtype=hstypes.FS_DTYPE)
            fs    = np.empty(0, dtype=hstypes.FS_DTYPE)
            H1    = None
            self.score = None

        # Read properties
        self.query_config2_ = (None if self.qreq_ is None else
                               self.qreq_.extern_query_config2)
        self.data_config2_ = (None if self.qreq_ is None else
                              self.qreq_.extern_data_config2)

        rchip1 = vh.get_chips(ibs, [self.qaid], config2_=self.query_config2_)[0]
        rchip2 = vh.get_chips(ibs, [self.daid], config2_=self.data_config2_)[0]

        kpts1 = ibs.get_annot_kpts([self.qaid], config2_=self.query_config2_)[0]
        kpts2 = ibs.get_annot_kpts([self.daid], config2_=self.data_config2_)[0]

        vecs1 = ibs.get_annot_vecs([self.qaid], config2_=self.query_config2_)[0]
        vecs2 = ibs.get_annot_vecs([self.daid], config2_=self.data_config2_)[0]

        self.figtitle = figtitle
        self.kwargs = kwargs
        self.fnum2 = pt.next_fnum()

        super(MatchInteraction, self).__init__(rchip1, rchip2, kpts1, kpts2,
                                               fm, fs, fsv, vecs1, vecs2, H1,
                                               H2=None, fk=fk, fnum=fnum,
                                               **kwargs)
示例#13
0
def show_chip(ibs, aid, in_image=False, annote=True, title_suffix='',
                weight_label=None, weights=None, config2_=None, **kwargs):
    r""" Driver function to show chips

    Args:
        ibs (ibeis.IBEISController):
        aid (int): annotation rowid
        in_image (bool): displays annotation with the context of its source image
        annote (bool): enables overlay annoations
        title_suffix (str):
        weight_label (None): (default = None)
        weights (None): (default = None)
        config2_ (dict): (default = None)

    Kwargs:
        enable_chip_title_prefix, nokpts, kpts_subset, kpts, text_color,
        notitle, draw_lbls, show_aidstr, show_gname, show_name, show_nid,
        show_exemplar, show_num_gt, show_quality_text, show_yawtext, fnum,
        title, figtitle, pnum, interpolation, cmap, heatmap, data_colorbar,
        darken, update, xlabel, redraw_image, ax, alpha, docla, doclf,
        projection, use_gridspec, pts, ell
        color (3/4-tuple, ndarray, or str): colors for keypoints

    CommandLine:
        python -m ibeis.viz.viz_chip --test-show_chip --show --ecc
        python -c "import utool as ut; ut.print_auto_docstr('ibeis.viz.viz_chip', 'show_chip')"
        python -m ibeis.viz.viz_chip --test-show_chip --show --db NNP_Master3 --aids 14047 --no-annote
        python -m ibeis.viz.viz_chip --test-show_chip --show --db NNP_Master3 --aids 14047 --no-annote

        python -m ibeis.viz.viz_chip --test-show_chip --show --db PZ_MTEST --aid 1 --bgmethod=cnn
        python -m ibeis.viz.viz_chip --test-show_chip --show --db PZ_MTEST --aid 1 --bgmethod=cnn --scale_max=30

    Example:
        >>> # VIZ_TEST
        >>> from ibeis.viz.viz_chip import *  # NOQA
        >>> import numpy as np
        >>> import vtool as vt
        >>> in_image = False
        >>> ibs, aid_list, kwargs, config2_ = testdata_showchip()
        >>> aid = aid_list[0]
        >>> if ut.get_argflag('--ecc'):
        >>>     kpts = ibs.get_annot_kpts(aid, config2_=config2_)
        >>>     weights = ibs.get_annot_fgweights([aid], ensure=True, config2_=config2_)[0]
        >>>     kpts = ut.random_sample(kpts[weights > .9], 200, seed=0)
        >>>     ecc = vt.get_kpts_eccentricity(kpts)
        >>>     scale = 1 / vt.get_scales(kpts)
        >>>     s = ecc if config2_.affine_invariance else scale
        >>>     colors = pt.scores_to_color(s, cmap_='jet')
        >>>     kwargs['color'] = colors
        >>>     kwargs['kpts'] = kpts
        >>> show_chip(ibs, aid, in_image=in_image, config2_=config2_, **kwargs)
        >>> pt.show_if_requested()
    """
    if ut.VERBOSE:
        print('[viz] show_chip(aid=%r)' % (aid,))
    #ibs.assert_valid_aids((aid,))
    # Get chip
    #print('in_image = %r' % (in_image,))
    chip = vh.get_chips(ibs, aid, in_image=in_image, config2_=config2_)
    # Create chip title
    chip_text = vh.get_annot_texts(ibs, [aid], **kwargs)[0]
    if kwargs.get('enable_chip_title_prefix', True):
        chip_title_text = chip_text + title_suffix
    else:
        chip_title_text = title_suffix
    chip_title_text = chip_title_text.strip('\n')
    # Draw chip
    fig, ax = pt.imshow(chip, **kwargs)
    # Populate axis user data
    vh.set_ibsdat(ax, 'viztype', 'chip')
    vh.set_ibsdat(ax, 'aid', aid)
    if annote and not kwargs.get('nokpts', False):
        # Get and draw keypoints
        if 'color' not in kwargs:
            if weight_label == 'fg_weights':
                if weights is None and ibs.has_species_detector(ibs.get_annot_species_texts(aid)):
                    weight_label = 'fg_weights'
                    weights = ibs.get_annot_fgweights([aid], ensure=True, config2_=config2_)[0]
            if weights is not None:
                cmap_ = 'hot'
                #if weight_label == 'dstncvs':
                #    cmap_ = 'rainbow'
                color = pt.scores_to_color(weights, cmap_=cmap_, reverse_cmap=False)
                kwargs['color'] = color
                kwargs['ell_color'] = color
                kwargs['pts_color'] = color

        kpts_ = vh.get_kpts(ibs, aid, in_image, config2_=config2_,
                            kpts_subset=kwargs.get('kpts_subset', None),
                            kpts=kwargs.get('kpts', None))
        try:
            del kwargs['kpts']
        except KeyError:
            pass
        pt.viz_keypoints._annotate_kpts(kpts_, **kwargs)
        if not ut.get_argflag('--noaidlabel'):
            pt.upperleft_text(chip_text, color=kwargs.get('text_color', None))
    use_title = not kwargs.get('notitle', False)
    if use_title:
        pt.set_title(chip_title_text)
    if in_image:
        gid = ibs.get_annot_gids(aid)
        aid_list = ibs.get_image_aids(gid)
        annotekw = viz_image.get_annot_annotations(
            ibs, aid_list, sel_aids=[aid], draw_lbls=kwargs.get('draw_lbls', True))
        # Put annotation centers in the axis
        ph.set_plotdat(ax, 'annotation_bbox_list', annotekw['bbox_list'])
        ph.set_plotdat(ax, 'aid_list', aid_list)
        pt.viz_image2.draw_image_overlay(ax, **annotekw)

        zoom_ = ut.get_argval('--zoom', type_=float, default=None)
        if zoom_ is not None:
            import vtool as vt
            # Zoom into the chip for some image context
            rotated_verts = ibs.get_annot_rotated_verts(aid)
            bbox = ibs.get_annot_bboxes(aid)
            #print(bbox)
            #print(rotated_verts)
            rotated_bbox = vt.bbox_from_verts(rotated_verts)
            imgw, imgh = ibs.get_image_sizes(gid)

            pad_factor = zoom_
            pad_length = min(bbox[2], bbox[3]) * pad_factor
            minx = max(rotated_bbox[0] - pad_length, 0)
            miny = max(rotated_bbox[1] - pad_length, 0)
            maxx = min((rotated_bbox[0] + rotated_bbox[2]) + pad_length, imgw)
            maxy = min((rotated_bbox[1] + rotated_bbox[3]) + pad_length, imgh)

            #maxy = imgh - maxy
            #miny = imgh - miny

            ax = pt.gca()
            ax.set_xlim(minx, maxx)
            ax.set_ylim(miny, maxy)
            ax.invert_yaxis()
    else:
        ph.set_plotdat(ax, 'chipshape', chip.shape)

    #if 'featweights' in vars() and 'color' in kwargs:
    if weights is not None and weight_label is not None:
        ## HACK HACK HACK
        if len(weights) > 0:
            cb = pt.colorbar(weights, kwargs['color'])
            cb.set_label(weight_label)
    return fig, ax