Source code for wbia.detecttools.wbiadata.wbia_object

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import math
from . import common as com
from .wbia_part import IBEIS_Part


BINS = [
    'left',
    'front_left',
    'front',
    'front_right',
    'right',
    'back_right',
    'back',
    'back_left',
]


[docs]class IBEIS_Object(object): # NOQA def __init__(ibso, _xml, width, height, name=None, **kwargs): if name is None: ibso.name = com.get(_xml, 'name') ibso.pose = com.get(_xml, 'pose') ibso.truncated = com.get(_xml, 'truncated') == '1' ibso.difficult = com.get(_xml, 'difficult') == '1' bndbox = com.get(_xml, 'bndbox', text=False) ibso.xmax = min(width, int(float(com.get(bndbox, 'xmax')))) ibso.xmin = max(0, int(float(com.get(bndbox, 'xmin')))) ibso.ymax = min(height, int(float(com.get(bndbox, 'ymax')))) ibso.ymin = max(0, int(float(com.get(bndbox, 'ymin')))) ibso.parts = [ IBEIS_Part(part) for part in com.get(_xml, 'part', text=False, singularize=False) ] else: ibso.name = name ibso.pose = -1 ibso.truncated = False ibso.difficult = False ibso.xmax = min(width, int(_xml['xmax'])) ibso.xmin = max(0, int(_xml['xmin'])) ibso.ymax = min(height, int(_xml['ymax'])) ibso.ymin = max(0, int(_xml['ymin'])) ibso.parts = [] # Pose if isinstance(ibso.pose, str): ibso.pose_str = ibso.pose elif ibso.pose < 0 or ibso.pose == []: ibso.pose_str = 'Unspecified' else: bin_size = 2.0 * math.pi / len(BINS) temp = float(ibso.pose) + 0.5 * bin_size temp %= 2.0 * math.pi ibso.pose_str = BINS[int(temp / bin_size)] ibso.width = ibso.xmax - ibso.xmin ibso.height = ibso.ymax - ibso.ymin ibso.xcenter = int(ibso.xmin + (ibso.width / 2)) ibso.ycenter = int(ibso.ymin + (ibso.height / 2)) ibso.area = ibso.width * ibso.height def __len__(ibso): return len(ibso.parts)
[docs] def bounding_box(ibso, parts=False): _parts = [part.bounding_box() for part in ibso.parts] return [ibso.name, ibso.xmax, ibso.xmin, ibso.ymax, ibso.ymin, _parts]