Source code for wbia.control.manual_chip_funcs

# -*- coding: utf-8 -*-
import logging
import utool as ut
from os.path import join
from wbia import constants as const
from wbia.control import accessor_decors, controller_inject
from wbia.control.controller_inject import make_ibs_register_decorator

print, rrr, profile = ut.inject2(__name__)
logger = logging.getLogger('wbia')


CLASS_INJECT_KEY, register_ibs_method = make_ibs_register_decorator(__name__)


register_api = controller_inject.get_wbia_flask_api(__name__)


ANNOT_ROWID = 'annot_rowid'
CHIP_ROWID = 'chip_rowid'
FEAT_VECS = 'feature_vecs'
FEAT_KPTS = 'feature_keypoints'
FEAT_NUM_FEAT = 'feature_num_feats'
CONFIG_ROWID = 'config_rowid'

# ---------------------
# ROOT LEAF FUNCTIONS
# ---------------------

NEW_DEPC = True


[docs]@register_ibs_method @accessor_decors.getter_1to1 # register_api('/api/chip/fpath/', methods=['GET']) def get_annot_chip_fpath( ibs, aid_list, ensure=True, config2_=None, check_external_storage=False, num_retries=1, ): r""" Returns the cached chip uri based off of the current configuration. Returns: chip_fpath_list (list): cfpaths defined by ANNOTATIONs RESTful: Method: GET URL: /api/chip/fpath/ """ return ibs.depc_annot.get( 'chips', aid_list, 'img', config=config2_, ensure=ensure, read_extern=False )
[docs]@register_ibs_method @accessor_decors.getter_1to1 # @register_api('/api/chip/', methods=['GET']) def get_annot_chips(ibs, aid_list, config2_=None, ensure=True, verbose=False, eager=True): r""" Args: ibs (IBEISController): wbia controller object aid_list (int): list of annotation ids ensure (bool): eager evaluation if True config2_ (QueryRequest): query request object with hyper-parameters Returns: list: chip_list CommandLine: python -m wbia.control.manual_chip_funcs get_annot_chips RESTful: Method: GET URL: /api/chip/ Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids()[0:5] >>> config2_ = {'dim_size': 450, 'resize_dim': 'area'} >>> chip_list = get_annot_chips(ibs, aid_list, config2_) >>> chip_sum_list = [chip.sum() for chip in chip_list] >>> target = [96053684, 65140000, 67223205, 109367378, 73995663] >>> ut.assert_almost_eq(chip_sum_list, target, 15000) >>> print(chip_sum_list) """ return ibs.depc_annot.get('chips', aid_list, 'img', config=config2_, ensure=ensure)
[docs]@register_ibs_method @accessor_decors.getter_1to1 # @cache_getter(const.ANNOTATION_TABLE, 'chipsizes') # @register_api('/api/chip/sizes/', methods=['GET']) def get_annot_chip_sizes(ibs, aid_list, ensure=True, config2_=None): r""" Args: ibs (IBEISController): wbia controller object aid_list (int): list of annotation ids ensure (bool): eager evaluation if True Returns: list: chipsz_list - the (width, height) of computed annotation chips. CommandLine: python -m wbia.control.manual_chip_funcs get_annot_chip_sizes Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> # build test data >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids()[0:3] >>> ensure = True >>> config2_ = {'dim_size': 450, 'resize_dim': 'area'} >>> # execute function >>> chipsz_list = get_annot_chip_sizes(ibs, aid_list, ensure, config2_=config2_) >>> # verify results >>> result = str(chipsz_list) >>> print(result) [(545, 372), (603, 336), (520, 390)] """ return ibs.depc_annot.get( 'chips', aid_list, ('width', 'height'), config=config2_, ensure=ensure )
[docs]@register_ibs_method def get_annot_chip_dlensqrd(ibs, aid_list, config2_=None): r""" Args: ibs (IBEISController): wbia controller object aid_list (list): Returns: list: topx2_dlen_sqrd CommandLine: python -m wbia.control.manual_chip_funcs get_annot_chip_dlensqrd RESTful: Method: GET URL: /api/chip/dlensqrd/ Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids() >>> config2_ = {'dim_size': 450, 'resize_dim': 'area'} >>> topx2_dlen_sqrd = ibs.get_annot_chip_dlensqrd(aid_list, config2_=config2_) >>> result = str(topx2_dlen_sqrd) >>> print(result) [435409, 476505, 422500, 422500, 422500, 437924, 405000, 405000, 447805, 420953, 405008, 406265, 512674] """ topx2_dlen_sqrd = [ ((w ** 2) + (h ** 2)) for (w, h) in ibs.get_annot_chip_sizes(aid_list, config2_=config2_) ] return topx2_dlen_sqrd
[docs]@register_ibs_method @accessor_decors.getter_1to1 # @register_api('/api/chip/thumbpath/', methods=['GET']) def get_annot_chip_thumbpath(ibs, aid_list, thumbsize=None, config2_=None): r""" just constructs the path. does not compute it. that is done by api_thumb_delegate RESTful: Method: GET URL: /api/chip/thumbpath/ """ if thumbsize is None: thumbsize = ibs.cfg.other_cfg.thumb_size thumb_dpath = ibs.thumb_dpath thumb_suffix = '_' + str(thumbsize) + const.CHIP_THUMB_SUFFIX annot_uuid_list = ibs.get_annot_visual_uuids(aid_list) thumbpath_list = [ join(thumb_dpath, str(uuid) + thumb_suffix) for uuid in annot_uuid_list ] return thumbpath_list
[docs]@register_ibs_method @accessor_decors.getter_1to1 # @register_api('/api/chip/thumbtup/', methods=['GET']) def get_annot_chip_thumbtup(ibs, aid_list, thumbsize=None, config2_=None): r""" get chip thumb info The return type of this is interpreted and computed in ~/code/guitool/guitool/api_thumb_delegate.py Args: aid_list (list): thumbsize (int): Returns: list: thumbtup_list - [(thumb_path, img_path, imgsize, bboxes, thetas)] CommandLine: python -m wbia.control.manual_chip_funcs --test-get_annot_chip_thumbtup RESTful: Method: GET URL: /api/chip/thumbtup/ Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids()[1:2] >>> thumbsize = 128 >>> result = get_annot_chip_thumbtup(ibs, aid_list, thumbsize) >>> print(result) """ # isiterable = isinstance(aid_list, (list, tuple, np.ndarray)) # if not isiterable: # aid_list = [aid_list] # HACK TO MAKE CHIPS COMPUTE # cid_list = ibs.get _annot_chip_rowids(aid_list, ensure=True) # NOQA # thumbsize = 256 if thumbsize is None: thumbsize = ibs.cfg.other_cfg.thumb_size thumb_gpaths = ibs.get_annot_chip_thumbpath( aid_list, thumbsize=thumbsize, config2_=config2_ ) # logger.info(thumb_gpaths) chip_paths = ibs.get_annot_chip_fpath(aid_list, ensure=True, config2_=config2_) chipsize_list = ibs.get_annot_chip_sizes(aid_list, ensure=False, config2_=config2_) thumbtup_list = [ (thumb_path, chip_path, chipsize, [], [], []) for (thumb_path, chip_path, chipsize) in zip( thumb_gpaths, chip_paths, chipsize_list ) ] # if not isiterable: # return thumbtup_list[0] return thumbtup_list
[docs]@register_ibs_method @accessor_decors.getter_1to1 def get_annot_chip_thumb_path2(ibs, aid_list, thumbsize=None, config=None): r""" get chip thumb info The return type of this is interpreted and computed in ~/code/guitool/guitool/api_thumb_delegate.py Args: aid_list (list): thumbsize (int): Returns: list: thumbtup_list - [(thumb_path, img_path, imgsize, bboxes, thetas)] CommandLine: python -m wbia.control.manual_chip_funcs --test-get_annot_chip_thumbtup RESTful: Method: GET URL: /api/chip/thumbtup/ Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids()[1:2] >>> thumbsize = 128 >>> result = get_annot_chip_thumbtup(ibs, aid_list, thumbsize) >>> print(result) """ if thumbsize is not None: config = {} if config is None else config.copy() config['thumbsize'] = thumbsize imgpath_list = ibs.depc_annot.get( 'chipthumb', aid_list, 'img', config=config, read_extern=False ) return imgpath_list
[docs]@register_ibs_method @accessor_decors.deleter # @register_api('/api/chip/', methods=['DELETE']) def delete_annot_chips(ibs, aid_list, config2_=None, fallback=True): r""" Clears annotation data (does not remove the annotation) RESTful: Method: DELETE URL: /api/chip/ """ # FIXME: Should config2_ be passed down? # Not sure why it isn't currently thumbpath_list = ibs.get_annot_chip_thumbpath(aid_list) # logger.info(thumbpath_list) # ut.remove_fpaths(thumbpath_list, quiet=quiet, lbl='chip_thumbs') ut.remove_existing_fpaths(thumbpath_list, quiet=False, lbl='chip_thumbs') ibs.depc_annot.delete_property('chips', aid_list, config=config2_) # Fallback if fallback: ibs.depc_annot.delete_property_all('chips', aid_list) return
[docs]@register_ibs_method @accessor_decors.getter_1to1 # @register_api('/api/pchip/', methods=['GET']) def get_part_chips( ibs, part_rowid_list, config2_=None, ensure=True, verbose=False, eager=True ): r""" Args: ibs (IBEISController): wbia controller object part_rowid_list (int): list of part ids ensure (bool): eager evaluation if True config2_ (QueryRequest): query request object with hyper-parameters Returns: list: chip_list CommandLine: python -m wbia.control.manual_chip_funcs get_part_chips RESTful: Method: GET URL: /api/pchip/ Example: >>> # ENABLE_DOCTEST >>> from wbia.control.manual_chip_funcs import * # NOQA >>> import wbia >>> ibs = wbia.opendb('testdb1') >>> aid_list = ibs.get_valid_aids() >>> aid_list = aid_list[:10] >>> bbox_list = ibs.get_annot_bboxes(aid_list) >>> bbox_list = [ >>> (xtl + 100, ytl + 100, w - 100, h - 100) >>> for xtl, ytl, w, h in bbox_list >>> ] >>> part_rowid_list = ibs.add_parts(aid_list, bbox_list=bbox_list) >>> config2_ = {'dim_size': 450, 'resize_dim': 'area'} >>> chip_list = get_part_chips(ibs, part_rowid_list, config2_) >>> chip_sum_list = [chip.sum() for chip in chip_list] >>> target = [86765003, 62005000, 61333186, 111424764, 63590900, 51397198, 139395045, 84100000, 41254190, 89657450] >>> ut.assert_almost_eq(chip_sum_list, target, 50000) >>> print(chip_sum_list) """ return ibs.depc_part.get( 'pchips', part_rowid_list, 'img', config=config2_, ensure=ensure )
[docs]@register_ibs_method @accessor_decors.deleter # @register_api('/api/chip/', methods=['DELETE']) def delete_part_chips(ibs, part_rowid_list, config2_=None): r""" Clears part data RESTful: Method: DELETE URL: /api/pchip/ """ ibs.depc_part.delete_property('pchips', part_rowid_list, config=config2_) return
[docs]def testdata_ibs(): r"""""" import wbia ibs = wbia.opendb('testdb1') config2_ = None return ibs, config2_