code: def getAnnIds(self, imgIds=[], catIds=[], areaRng=[], iscrowd=None):
          
          imgIds = imgIds if _isArrayLike(imgIds) else [imgIds]
          catIds = catIds if _isArrayLike(catIds) else [catIds]
  
          if len(imgIds) == len(catIds) == len(areaRng) == 0:
              anns = self.dataset['annotations']
          else:
              if not len(imgIds) == 0:
                  lists = [self.imgToAnns[imgId] for imgId in imgIds if imgId in self.imgToAnns]
                  anns = list(itertools.chain.from_iterable(lists))
              else:
                  anns = self.dataset['annotations']
              anns = anns if len(catIds)  == 0 else [ann for ann in anns if ann['category_id'] in catIds]
              anns = anns if len(areaRng) == 0 else [ann for ann in anns if ann['area'] > areaRng[0] and ann['area'] < areaRng[1]]
          if not iscrowd == None:
              ids = [ann['id'] for ann in anns if ann['iscrowd'] == iscrowd]
          else:
              ids = [ann['id'] for ann in anns]
          return ids
docs: Get ann ids that satisfy given filter conditions. default skips that filter
          :param imgIds  (int array)     : get anns for given imgs
                 catIds  (int array)     : get anns for given cats
                 areaRng (float array)   : get anns for given area range (e.g. [0 inf])
                 iscrowd (boolean)       : get anns for given crowd label (False or True)
          :return: ids (int array)       : integer array of ann ids