def check_image_sizes(data_uri_order, all_kpts, offset_list): """ Check if any keypoints go out of bounds wrt their associated images """ import vtool_ibeis as vt from os.path import join imgdir = ut.truepath('/raid/work/Oxford/oxbuild_images') gpath_list = [join(imgdir, imgid + '.jpg') for imgid in data_uri_order] imgsize_list = [vt.open_image_size(gpath) for gpath in gpath_list] kpts_list = [all_kpts[l:r] for l, r in ut.itertwo(offset_list)] kpts_extent = [ vt.get_kpts_image_extent(kpts, outer=False, only_xy=False) for kpts in ut.ProgIter(kpts_list, 'kpts extent') ] for i, (size, extent) in enumerate(zip(imgsize_list, kpts_extent)): w, h = size _, maxx, _, maxy = extent assert np.isnan(maxx) or maxx < w assert np.isnan(maxy) or maxy < h
def detect_gid_list(ibs, gid_list, tree_path_list, downsample=True, **kwargs): """ Args: gid_list (list of int): the list of IBEIS image_rowids that need detection tree_path_list (list of str): the list of trees to load for detection downsample (bool, optional): a flag to indicate if the original image sizes should be used; defaults to True True: ibs.get_image_detectpaths() is used False: ibs.get_image_paths() is used Kwargs (optional): refer to the PyRF documentation for configuration settings Yields: results (list of dict) """ # Get new gpaths if downsampling if downsample: gpath_list = ibs.get_image_detectpaths(gid_list) neww_list = [vt.open_image_size(gpath)[0] for gpath in gpath_list] oldw_list = [oldw for (oldw, oldh) in ibs.get_image_sizes(gid_list)] downsample_list = [ oldw / neww for oldw, neww in zip(oldw_list, neww_list) ] else: gpath_list = ibs.get_image_paths(gid_list) downsample_list = [None] * len(gpath_list) # Run detection results_iter = detect(ibs, gpath_list, tree_path_list, **kwargs) # Upscale the results for gid, downsample, (gpath, result_list) in zip(gid_list, downsample_list, results_iter): # Upscale the results back up to the original image size if downsample is not None and downsample != 1.0: for result in result_list: for key in [ 'centerx', 'centery', 'xtl', 'ytl', 'width', 'height' ]: result[key] = int(result[key] * downsample) yield gid, gpath, result_list
def detect_gid_list(ibs, gid_list, downsample=True, verbose=VERBOSE_SS, **kwargs): """ Args: gid_list (list of int): the list of IBEIS image_rowids that need detection downsample (bool, optional): a flag to indicate if the original image sizes should be used; defaults to True True: ibs.get_image_detectpaths() is used False: ibs.get_image_paths() is used Kwargs (optional): refer to the Selective Search documentation for configuration settings Args: ibs (ibeis.IBEISController): image analysis api gid_list (list of int): the list of IBEIS image_rowids that need detection downsample (bool, optional): a flag to indicate if the original image sizes should be used; defaults to True Kwargs: detector, config_filepath, weights_filepath, verbose Yields: tuple: (gid, gpath, result_list) CommandLine: python -m ibeis.algo.detect.selectivesearch detect_gid_list --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.algo.detect.selectivesearch import * # NOQA >>> from ibeis.core_images import LocalizerConfig >>> import ibeis >>> ibs = ibeis.opendb('testdb1') >>> gid_list = ibs.get_valid_gids() >>> config = {'matlab_command': 'selective_search', 'verbose': True} >>> downsample = False >>> results_list = detect_gid_list(ibs, gid_list, downsample, **config) >>> results_list = list(results_list) >>> print('result lens = %r' % (map(len, list(results_list)))) >>> print('result[0] = %r' % (len(list(results_list[0][2])))) >>> config = {'matlab_command': 'selective_search_rcnn', 'verbose': True} >>> downsample = False >>> results_list = detect_gid_list(ibs, gid_list, downsample, **config) >>> results_list = list(results_list) >>> print('result lens = %r' % (map(len, list(results_list)))) >>> print('result[0] = %r' % (len(list(results_list[0][2])))) >>> ut.quit_if_noshow() >>> import plottool_ibeis as pt >>> ut.show_if_requested() Yields: results (list of dict) """ # Get new gpaths if downsampling if downsample: gpath_list = ibs.get_image_detectpaths(gid_list) neww_list = [vt.open_image_size(gpath)[0] for gpath in gpath_list] oldw_list = [oldw for (oldw, oldh) in ibs.get_image_sizes(gid_list)] downsample_list = [ oldw / neww for oldw, neww in zip(oldw_list, neww_list) ] orient_list = [1] * len(gid_list) else: gpath_list = ibs.get_image_paths(gid_list) downsample_list = [None] * len(gpath_list) orient_list = ibs.get_image_orientation(gid_list) # Run detection results_iter = detect(gpath_list, verbose=verbose, **kwargs) # Upscale the results _iter = zip(downsample_list, gid_list, orient_list, results_iter) for downsample, gid, orient, (gpath, result_list) in _iter: # Upscale the results back up to the original image size for result in result_list: if downsample is not None and downsample != 1.0: for key in ['xtl', 'ytl', 'width', 'height']: result[key] = int(result[key] * downsample) bbox = ( result['xtl'], result['ytl'], result['width'], result['height'], ) bbox_list = [bbox] bbox = bbox_list[0] result['xtl'], result['ytl'], result['width'], result[ 'height'] = bbox yield (gid, gpath, result_list)
def detect_gid_list(ibs, gid_list, downsample=False, **kwargs): """ Args: gid_list (list of int): the list of IBEIS image_rowids that need detection downsample (bool, optional): a flag to indicate if the original image sizes should be used; defaults to True True: ibs.get_image_detectpaths() is used False: ibs.get_image_paths() is used Kwargs (optional): refer to the PyDarknet documentation for configuration settings Args: ibs (ibeis.IBEISController): image analysis api gid_list (list of int): the list of IBEIS image_rowids that need detection downsample (bool, optional): a flag to indicate if the original image sizes should be used; defaults to True Kwargs: detector, config_filepath, weights_filepath, verbose Yields: tuple: (gid, gpath, result_list) CommandLine: python -m ibeis.algo.detect.yolo detect_gid_list --show Example: >>> # DISABLE_DOCTEST >>> from ibeis.algo.detect.yolo import * # NOQA >>> from ibeis.core_images import LocalizerConfig >>> import ibeis >>> ibs = ibeis.opendb(defaultdb='WS_ALL') >>> gid_list = ibs.images()._rowids[0:1] >>> kwargs = config = LocalizerConfig(**{ >>> 'weights_filepath': '/media/raid/work/WS_ALL/localizer_backup/detect.yolo.2.39000.weights', >>> 'config_filepath': '/media/raid/work/WS_ALL/localizer_backup/detect.yolo.2.cfg', >>> }) >>> exec(ut.execstr_dict(config), globals()) >>> #classes_fpath = '/media/raid/work/WS_ALL/localizer_backup/detect.yolo.2.cfg.classes' >>> downsample = False >>> (gid, gpath, result_list) = detect_gid_list(ibs, gid_list, downsample, **config) >>> result = ('(gid, gpath, result_list) = %s' % (ut.repr2((gid, gpath, result_list)),)) >>> print(result) >>> ut.quit_if_noshow() >>> import plottool_ibeis as pt >>> ut.show_if_requested() Yields: results (list of dict) """ # Get new gpaths if downsampling if downsample: gpath_list = ibs.get_image_detectpaths(gid_list) neww_list = [vt.open_image_size(gpath)[0] for gpath in gpath_list] oldw_list = [oldw for (oldw, oldh) in ibs.get_image_sizes(gid_list)] downsample_list = [ oldw / neww for oldw, neww in zip(oldw_list, neww_list) ] orient_list = [1] * len(gid_list) else: gpath_list = ibs.get_image_paths(gid_list) downsample_list = [None] * len(gpath_list) orient_list = ibs.get_image_orientation(gid_list) # Run detection results_iter = detect(gpath_list, **kwargs) # Upscale the results _iter = zip(downsample_list, gid_list, orient_list, results_iter) for downsample, gid, orient, (gpath, result_list) in _iter: # Upscale the results back up to the original image size for result in result_list: if downsample is not None and downsample != 1.0: for key in ['xtl', 'ytl', 'width', 'height']: result[key] = int(result[key] * downsample) bbox = ( result['xtl'], result['ytl'], result['width'], result['height'], ) bbox_list = [bbox] bbox = bbox_list[0] result['xtl'], result['ytl'], result['width'], result[ 'height'] = bbox yield (gid, gpath, result_list)