Source code for ibeis.viz.viz_image

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function, unicode_literals
from six.moves import zip
import utool as ut
import plottool as pt
from plottool import plot_helpers as ph
from plottool import viz_image2
import numpy as np
from ibeis.viz import viz_helpers as vh
(print, rrr, profile) = ut.inject2(__name__, '[viz_img]')


[docs]def draw_image_overlay(ibs, ax, gid, sel_aids, draw_lbls=True, annote=True): try: raise NotImplementedError('use pt.viz_image2.draw_image_overlay') # draw chips in the image aid_list = ibs.get_image_aids(gid) bbox_list = ibs.get_annot_bboxes(aid_list) theta_list = ibs.get_annot_thetas(aid_list) text_list = vh.get_annot_text(ibs, aid_list, draw_lbls) annotation_centers = vh.get_bbox_centers(bbox_list) sel_list = [aid in sel_aids for aid in aid_list] viz_image2.draw_image_overlay(ax, bbox_list, theta_list, text_list, sel_list, draw_lbls, annote) # Draw all chip indexes in the image if annote: annotation_iter = zip(bbox_list, theta_list, text_list, sel_list) for bbox, theta, lbl, is_sel in annotation_iter: viz_image2.draw_chip_overlay(ax, bbox, theta, lbl, is_sel) # Put annotation centers in the axis ph.set_plotdat(ax, 'annotation_centers', np.array(annotation_centers)) ph.set_plotdat(ax, 'annotation_bbox_list', bbox_list) ph.set_plotdat(ax, 'aid_list', aid_list) except Exception as ex: ut.printex(ex, 'error drawing image overlay', key_list=['ibs', 'ax', 'gid', 'sel_aids']) raise
[docs]def get_annot_annotations(ibs, aid_list, sel_aids=[], draw_lbls=True): annotekw = { 'bbox_list' : ibs.get_annot_bboxes(aid_list), 'theta_list' : ibs.get_annot_thetas(aid_list), 'text_list' : vh.get_annot_text(ibs, aid_list, draw_lbls), 'sel_list' : [aid in sel_aids for aid in aid_list], } return annotekw
[docs]def drive_test_script(ibs): r""" Test script where we drive around and take pictures of animals both in a given database and not in a given databse to make sure the system works. CommandLine: python -m ibeis.viz.viz_image --test-drive_test_script python -m ibeis.viz.viz_image --test-drive_test_script --db PZ_MTEST --show python -m ibeis.viz.viz_image --test-drive_test_script --db GIR_Tanya --show python -m ibeis.viz.viz_image --test-drive_test_script --db GIR_Master0 --show python -m ibeis.viz.viz_image --test-drive_test_script --db PZ_Master0 --show python -m ibeis.viz.viz_image --test-drive_test_script --db PZ_FlankHack --show python -m ibeis.viz.viz_image --test-drive_test_script --db PZ_FlankHack --show python -m ibeis.viz.viz_image --test-drive_test_script --dbdir /raid/work2/Turk/GIR_Master --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_image import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb() >>> drive_test_script(ibs) """ import ibeis aid_list = ibeis.testdata_aids(a='default:pername=1') print('Running with (annot) aid_list = %r' % (aid_list)) gid_list = ibs.get_annot_gids(aid_list) print('Running with (image) gid_list = %r' % (gid_list)) avuuid_list = ibs.get_annot_visual_uuids(aid_list) guuid_list = ibs.get_image_uuids(gid_list) print('Running with annot_visual_uuid_list = %s' % (ut.list_str(zip(aid_list, avuuid_list)))) print('Running with image_uuid_list = %s' % (ut.list_str(zip(gid_list, guuid_list)))) for gid, aid in ut.ProgressIter(zip(gid_list, aid_list), lbl='progress '): print('\ngid, aid, nid = %r, %r, %r' % (gid, aid, ibs.get_annot_nids(aid),)) show_image(ibs, gid, annote=False, rich_title=True) pt.show_if_requested()
[docs]def show_multi_images(ibs, gid_list, fnum=None, **kwargs): r""" Args: ibs (IBEISController): ibeis controller object gid_list (list): fnum (int): figure number(default = None) CommandLine: python -m ibeis.viz.viz_image --test-show_multi_images --db NNP_Master3 --gids=7409,7448,4670,7497,7496,7464,7446,7442 --show python -m ibeis.viz.viz_image --test-show_multi_images --db NNP_Master3 --gids=1,2,3 --show Ignore: >>> # print to 8 gids sorted by num aids >>> import ibeis >>> ibs = ibeis.opendb('NNP_Master3') >>> gid_list = ibs.get_valid_gids() >>> aids_list = ibs.get_image_aids(gid_list) >>> index_list = ut.list_argsort(list(map(len, aids_list)))[::-1] >>> gid_list = ut.take(gid_list, index_list[0:8]) >>> print(','.join(map(str, gid_list))) Example: >>> # DISABLE_DOCTEST >>> from ibeis.viz.viz_image import * # NOQA >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='testdb1') >>> gid_list = ut.get_argval('--gids', list, default=[1, 2]) >>> fnum = None >>> result = show_multi_images(ibs, gid_list, fnum, draw_lbls=False, notitle=True, sel_aids='all') >>> print(result) >>> ut.show_if_requested() """ fnum = pt.ensure_fnum(fnum) nGids = len(gid_list) if nGids == 0: fig = pt.figure(fnum=fnum, pnum=(1, 1, 1), **kwargs) pt.imshow_null(fnum=fnum, **kwargs) return fig # Trigger computation of all chips in parallel #ibsfuncs.ensure_annotation_data(ibs, aid_list, chips=(not in_image or annote), feats=annote) rc = ut.get_argval('--rc', type_=list, default=None) if rc is None: nRows, nCols = ph.get_square_row_cols(nGids) else: nRows, nCols = rc #notitle = ut.get_argflag('--notitle') #draw_lbls = not ut.get_argflag('--no-draw_lbls') #show_chip_kw = dict(annote=annote, in_image=in_image, notitle=notitle, draw_lbls=draw_lbls) #print('[viz_name] * r=%r, c=%r' % (nRows, nCols)) #gs2 = gridspec.GridSpec(nRows, nCols) pnum_ = pt.get_pnum_func(nRows, nCols) fig = pt.figure(fnum=fnum, pnum=pnum_(0), **kwargs) fig.clf() for px, gid in enumerate(gid_list): print(pnum_(px)) _fig, _ax1 = show_image(ibs, gid, fnum=fnum, pnum=pnum_(px), **kwargs) #ax = pt.gca() #if aid in sel_aids: # pt.draw_border(ax, pt.GREEN, 4) #if ut.get_argflag('--numlbl') and not DOBOTH: # ax.set_xlabel('(' + str(px + 1) + ')') #plot_aid3(ibs, aid) pass #@ut.indent_func
[docs]def show_image(ibs, gid, sel_aids=[], fnum=None, annote=True, draw_lbls=True, notitle=False, rich_title=False, pnum=(1, 1, 1), **kwargs): """ Driver function to show images Args: ibs (IBEISController): ibeis controller object gid (int): image row id sel_aids (list): fnum (int): figure number annote (bool): draw_lbls (bool): Returns: tuple: (fig, ax) CommandLine: python -m ibeis.viz.viz_image --test-show_image --show python -m ibeis.viz.viz_image --test-show_image --show --db GZ_ALL python -m ibeis.viz.viz_image --test-show_image --show --db GZ_ALL --gid 100 python -m ibeis.viz.viz_image --test-show_image --show --db PZ_MTEST --aid 10 python -m ibeis.viz.viz_image --test-show_image --show --db PZ_MTEST --aid 91 --no-annot --rich-title python -m ibeis.viz.viz_image --test-show_image --show --db GIR_Tanya --aid 1 --no-annot --rich-title Example: >>> # SLOW_DOCTEST >>> # VIZ_TEST >>> from ibeis.viz.viz_image import * # NOQA >>> import ibeis >>> # build test data >>> ibs = ibeis.opendb(ut.get_argval('--db', str, 'testdb1')) >>> #gid = ibs.get_valid_gids()[0] >>> gid = ut.get_argval('--gid', int, 1) >>> aid = ut.get_argval('--aid', int, None) >>> if aid is not None: >>> gid = ibs.get_annot_gids(aid) >>> sel_aids = [] >>> fnum = None >>> annote = not ut.get_argflag('--no-annot') >>> rich_title = ut.get_argflag('--rich-title') >>> draw_lbls = True >>> # execute function >>> (fig, ax) = show_image(ibs, gid, sel_aids, fnum, annote, draw_lbls, rich_title) >>> pt.show_if_requested() """ if fnum is None: fnum = pt.next_fnum() # Read Image img = ibs.get_images(gid) aid_list = ibs.get_image_aids(gid) if sel_aids == 'all': sel_aids = aid_list annotekw = get_annot_annotations(ibs, aid_list, sel_aids, draw_lbls) annotation_centers = vh.get_bbox_centers(annotekw['bbox_list']) title = vh.get_image_titles(ibs, gid) if rich_title: title += ', aids=%r' % (aid_list) title += ', db=%r' % (ibs.get_dbname()) showkw = { 'title' : title, 'annote' : annote, 'fnum' : fnum, 'pnum' : pnum, } if notitle: del showkw['title'] showkw.update(annotekw) fig, ax = viz_image2.show_image(img, **showkw) # Label the axis with data ph.set_plotdat(ax, 'annotation_centers', annotation_centers) ph.set_plotdat(ax, 'aid_list', aid_list) ph.set_plotdat(ax, 'viztype', 'image') ph.set_plotdat(ax, 'gid', gid) return fig, ax
if __name__ == '__main__': """ CommandLine: python -m ibeis.viz.viz_image python -m ibeis.viz.viz_image --allexamples python -m ibeis.viz.viz_image --allexamples --noface --nosrc """ import multiprocessing multiprocessing.freeze_support() # for win32 import utool as ut # NOQA ut.doctest_funcs()