示例#1
0
 def crop_once(anno, write_images):
     image_id = anno['image_id']
     if write_images:
         image = cv2.imread(
             os.path.join(settings.TEST_IMAGE_DIR, anno['file_name']))
         assert image.shape == imshape
     cropped_list = []
     for level_id, (cropratio,
                    cropoverlap) in enumerate(settings.TEST_CROP_LEVELS):
         cropshape = (int(round(settings.TEST_IMAGE_SIZE // cropratio)),
                      int(round(settings.TEST_IMAGE_SIZE // cropratio)))
         for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                                (cropoverlap, cropoverlap)):
             xlo = o['xlo']
             xhi = xlo + cropshape[1]
             ylo = o['ylo']
             yhi = ylo + cropshape[0]
             basename = '{}_{}_{}'.format(image_id, level_id, o['name'])
             cropped_file_name = os.path.join(settings.TEST_CROPPED_DIR,
                                              '{}.jpg'.format(basename))
             cropped_list.append(cropped_file_name)
             if write_images:
                 cropped = image[ylo:yhi, xlo:xhi]
                 cv2.imwrite(cropped_file_name, cropped)
     return cropped_list
示例#2
0
def read(file_paths):
    all = defaultdict(list)
    imshape = (2048, 2048, 3)
    removal = (0., 0., 0.)
    size_ranges = ((float('-inf'), float('inf')), (32., float('inf')),
                   (64., float('inf')))
    levelmap = dict()
    for level_id, (cropratio,
                   cropoverlap) in enumerate(settings.TEST_CROP_LEVELS):
        cropshape = (settings.TEST_IMAGE_SIZE // cropratio,
                     settings.TEST_IMAGE_SIZE // cropratio)
        for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                               (cropoverlap, cropoverlap)):
            levelmap[level_id, o['name']] = (o['xlo'], o['ylo'], cropshape[1],
                                             cropshape[0])

    def bounded_bbox(bbox):
        x, y, w, h = bbox
        x1, y1 = x + w, y + h
        x0, y0 = max(0, x), max(0, y)
        x1, y1 = min(imshape[1], x1), min(imshape[0], y1)
        return (x0, y0, x1 - x0, y1 - y0)

    def read_one(result_file_path):
        with open(result_file_path) as f:
            lines = f.read().splitlines()
        one = []
        for line in lines:
            file_path, cate_id, x, y, w, h, prob = line.split()
            image_id, level_id, crop_name = os.path.splitext(
                os.path.basename(file_path))[0].split('_', 2)
            level_id = int(level_id)
            cx, cy, cw, ch = levelmap[level_id, crop_name]
            cate_id = settings.NUM_CHAR_CATES if proposal_output else int(
                cate_id)
            x, y, w, h, prob = float(x), float(y), float(w), float(h), float(
                prob)
            longsize = max(w, h)
            size_range = size_ranges[level_id]
            if longsize < size_range[0] or size_range[1] <= longsize:
                continue
            rm = removal[level_id]
            if (cx != 0 and x < rm) or (cy != 0 and y < rm) or (
                    cx + cw != imshape[1]
                    and x + w + rm >= cw) or (cy + ch != imshape[0]
                                              and y + h + rm >= ch):
                continue
            real_bbox = bounded_bbox((x + cx, y + cy, w, h))
            if real_bbox[2] > 0 and real_bbox[3] > 0:
                all[image_id].append({
                    'image_id': image_id,
                    'cate_id': cate_id,
                    'prob': prob,
                    'bbox': real_bbox
                })

    for file_path in file_paths:
        read_one(file_path)
    return all
示例#3
0
 def construct_levelmap(imshape):
     levelmap = {}
     for level_id, (cropratio,
                    cropoverlap) in enumerate(settings.TEST_CROP_LEVELS):
         cropshape = (settings.TEST_IMAGE_SIZE // cropratio,
                      settings.TEST_IMAGE_SIZE // cropratio)
         for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                                (cropoverlap, cropoverlap)):
             levelmap[level_id, o['name']] = (o['xlo'], o['ylo'],
                                              cropshape[1], cropshape[0])
     return levelmap
示例#4
0
 def crop_once(line, write_images):
     anno = json.loads(line.strip())
     image_id = anno['image_id']
     all = []
     for char in anno_tools.each_char(anno):
         if not char['is_chinese']:
             continue
         cate_id = text2cate[char['text']]
         if cate_id >= settings.NUM_CHAR_CATES:
             cate_id = settings.NUM_CHAR_CATES
         all.append((char['adjusted_bbox'], cate_id))
     if write_images:
         image = cv2.imread(
             os.path.join(settings.TRAINVAL_IMAGE_DIR, anno['file_name']))
         assert image.shape == imshape
         for o in anno['ignore']:
             poly = (np.array(o['polygon'])).astype(np.int32)
             cv2.fillConvexPoly(image, poly, (128, 128, 128))
     cropped_list = list()
     for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                            cropoverlap):
         xlo = o['xlo']
         xhi = xlo + cropshape[1]
         ylo = o['ylo']
         yhi = ylo + cropshape[0]
         labels = []
         for bbox, cate_id in all:
             x, y, w, h = bbox
             if x > xhi or x + w < xlo or y > yhi or y + h < ylo:
                 continue
             bbox = ((x + w / 2 - xlo) / cropshape[1],
                     (y + h / 2 - ylo) / cropshape[0], w / cropshape[1],
                     h / cropshape[0])
             if 0.5 < in_image_ratio(bbox):
                 labels.append((bbox, cate_id))
         if 0 < len(labels):
             basename = '{}_{}'.format(image_id, o['name'])
             cropped_file_name = os.path.join(settings.TRAINVAL_CROPPED_DIR,
                                              '{}.jpg'.format(basename))
             cropped_xml_name = os.path.join(settings.TRAINVAL_CROPPED_DIR,
                                             '{}.xml'.format(basename))
             cropped_list.append('{} {}'.format(cropped_file_name,
                                                cropped_xml_name))
             if write_images:
                 cropped = image[ylo:yhi, xlo:xhi]
                 cv2.imwrite(cropped_file_name, cropped)
                 with open(
                         os.path.join(settings.TRAINVAL_CROPPED_DIR,
                                      '{}.xml'.format(basename)), 'w') as f:
                     write_xml(labels, cropshape, f)
     return cropped_list
 def crop_once(anno, write_images):
     image_id = anno['image_id']
     print(image_id)
     #if write_images:
     image = cv2.imread(
         os.path.join(settings.TEST_IMAGE_DIR, anno['file_name']))
     imshape = image.shape  # height,width,channel
     #            assert image.shape == imshape
     cropped_list = []
     #TEST_CROP_LEVELS=((1,32),(0.5,96),(.25,96)
     #TEST_IMAGE_SIZE=(128,128), so cropped image is 128*128 and 256*256 and 512*512,
     for level_id, (cropratio,
                    cropoverlap) in enumerate(settings.TEST_CROP_LEVELS):
         print(cropratio, cropoverlap)
         cropshape = (int(round(settings.TEST_IMAGE_SIZE // cropratio)),
                      int(round(settings.TEST_IMAGE_SIZE // cropratio)))
         for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                                (cropoverlap, cropoverlap)):
             xlo = o['xlo']
             xhi = xlo + cropshape[1]
             ylo = o['ylo']
             yhi = ylo + cropshape[0]
             basename = '{}_{}_{}'.format(image_id, level_id, o['name'])
             cropped_file_name = os.path.join(settings.TEST_CROPPED_DIR,
                                              '{}.jpg'.format(basename))
             cropped_list.append(cropped_file_name)
             if write_images:
                 if xhi > imshape[1]:
                     image = cv2.resize(image, (xhi, imshape[0]),
                                        cv2.INTER_CUBIC)
                     imshape = image.shape
                 if yhi > imshape[0]:
                     image = cv2.resize(image, (imshape[1], yhi),
                                        cv2.INTER_CUBIC)
                     imshape = image.shape
                 cropped = image[ylo:yhi, xlo:xhi]
                 cv2.imwrite(cropped_file_name, cropped)
     return cropped_list
示例#6
0
 def crop_once(imgPath, testName_list):
     image = cv2.imread(imgPath)
     imshape = image.shape
     fileName = os.path.basename(imgPath)
     image_id = os.path.splitext(fileName)[0]
     image_type = os.path.splitext(fileName)[1]
     cropped_list = []
     for level_id, (cropratio,
                    cropoverlap) in enumerate(settings.TEST_CROP_LEVELS):
         cropshape = (int(round(settings.TEST_IMAGE_SIZE // cropratio)),
                      int(round(settings.TEST_IMAGE_SIZE // cropratio)))
         for o in darknet_tools.get_crop_bboxes(imshape, cropshape,
                                                (cropoverlap, cropoverlap)):
             xlo = o['xlo']
             xhi = xlo + cropshape[1]
             ylo = o['ylo']
             yhi = ylo + cropshape[0]
             basename = '{}_{}_{}'.format(image_id, level_id, o['name'])
             cropped_file_name = os.path.join(settings.TEST_CROPPED_DIR,
                                              basename + image_type)
             cropped_list.append(cropped_file_name)
             cropped = image[ylo:yhi, xlo:xhi]
             cv2.imwrite(cropped_file_name, cropped)
     testName_list += cropped_list