def create_emnist_lines_support_files() -> None: """Create EMNIST Lines test images.""" shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() # TODO: maybe have to add args to dataset. dataset = EmnistLinesDataset( init_token="<sos>", pad_token="_", eos_token="<eos>", transform=[{"type": "ToTensor", "args": {}}], target_transform=[ { "type": "AddTokens", "args": {"init_token": "<sos>", "pad_token": "_", "eos_token": "<eos>"}, } ], ) # nosec: S106 dataset.load_or_generate_data() for index in [5, 7, 9]: image, target = dataset[index] if len(image.shape) == 3: image = image.squeeze(0) print(image.sum(), image.dtype) label = "".join(dataset.mapper(label) for label in target[1:]).strip( dataset.mapper.pad_token ) print(label) image = image.numpy() util.write_image(image, str(SUPPORT_DIRNAME / f"{label}.png"))
def create_emnist_support_files(): shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() dataset = EmnistDataset() dataset.load_or_generate_data() for ind in [5, 7, 9]: image = dataset.x_test[ind] label = dataset.mapping[np.argmax(dataset.y_test[ind])] print(ind, label) util.write_image(image, str(SUPPORT_DIRNAME / f'{label}.png'))
def create_iam_lines_support_files(): shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() dataset = IamLinesDataset() dataset.load_or_generate_data() for ind in [0, 1, 3]: image = dataset.x_test[ind] label = ''.join(dataset.mapping[label] for label in np.argmax(dataset.y_test[ind], axis=-1).flatten()).strip(' _') print(label) util.write_image(image, str(SUPPORT_DIRNAME / f'{label}.png'))
def create_emnist_lines_support_files(): shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() dataset = EmnistLinesDataset() dataset.load_or_generate_data() for ind in [0, 1, 3]: image = dataset.x_test[ind] print(image.sum(), image.dtype) label = "".join(dataset.mapping[label] for label in np.argmax( dataset.y_test[ind], axis=-1).flatten()).strip(" _") print(label) util.write_image(image, str(SUPPORT_DIRNAME / f"{label}.png"))
def create_emnist_support_files() -> None: """Create support images for test of CharacterPredictor class.""" shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() dataset = EmnistDataset(train=False) dataset.load_or_generate_data() for index in [5, 7, 9]: image, label = dataset[index] if len(image.shape) == 3: image = image.squeeze(0) image = image.numpy() label = dataset.mapper(int(label)) print(index, label) write_image(image, str(SUPPORT_DIRNAME / f"{label}.png"))
def create_emnist_lines_support_files(): shutil.rmtree(SUPPORT_DIRNAME, ignore_errors=True) SUPPORT_DIRNAME.mkdir() dataset = EmnistLinesDataset() dataset.load_or_generate_data() for ind in [0, 1, 3]: image = dataset.x_test[ind] print(image.sum(), image.dtype) label = ''.join(dataset.mapping[label] for label in np.argmax( dataset.y_test[ind], axis=-1).flatten()).strip(' _') print(label) util.write_image(image, str(SUPPORT_DIRNAME / f'{label}.png')) # Hide lines below until Lab 8 # Inverted version image = -(image - 255) util.write_image(image, str(SUPPORT_DIRNAME / f'{label}_i.png'))
def _crop_paragraph_image(filename: str, line_regions: Dict, crop_dims: Tuple[int, int], final_dims: Tuple) -> None: image = util.read_image(filename, grayscale=True) min_y1 = min(region["y1"] for region in line_regions) - PARAGRAPH_BUFFER max_y2 = max(region["y2"] for region in line_regions) + PARAGRAPH_BUFFER height = max_y2 - min_y1 crop_height = crop_dims[0] buffer = (crop_height - height) // 2 # Generate image crop. image_crop = 255 * np.ones(crop_dims, dtype=np.uint8) try: image_crop[buffer:buffer + height] = image[min_y1:max_y2] except Exception as e: # pylint: disable=broad-except logger.error(f"Rescued {filename}: {e}") return # Generate ground truth. gt_image = np.zeros_like(image_crop, dtype=np.uint8) for index, region in enumerate(line_regions): gt_image[(region["y1"] - min_y1 + buffer):(region["y2"] - min_y1 + buffer), region["x1"]:region["x2"], ] = (index % 2 + 1) # Generate image for debugging. import matplotlib.pyplot as plt cmap = plt.get_cmap("Set1") image_crop_for_debug = np.dstack([image_crop, image_crop, image_crop]) for index, region in enumerate(line_regions): color = [255 * _ for _ in cmap(index)[:-1]] cv2.rectangle( image_crop_for_debug, (region["x1"], region["y1"] - min_y1 + buffer), (region["x2"], region["y2"] - min_y1 + buffer), color, 3, ) image_crop_for_debug = cv2.resize(image_crop_for_debug, final_dims, interpolation=cv2.INTER_AREA) util.write_image(image_crop_for_debug, DEBUG_CROPS_DIRNAME / f"{filename.stem}.jpg") image_crop = cv2.resize(image_crop, final_dims, interpolation=cv2.INTER_AREA) util.write_image(image_crop, CROPS_DIRNAME / f"{filename.stem}.jpg") gt_image = cv2.resize(gt_image, final_dims, interpolation=cv2.INTER_NEAREST) util.write_image(gt_image, GT_DIRNAME / f"{filename.stem}.png")
def _crop_paragraph_image(filename, line_regions, crop_dims, final_dims): # pylint: disable=too-many-locals image = util.read_image(filename, grayscale=True) min_y1 = min(r["y1"] for r in line_regions) - PARAGRAPH_BUFFER max_y2 = max(r["y2"] for r in line_regions) + PARAGRAPH_BUFFER height = max_y2 - min_y1 crop_height = crop_dims[0] buffer = (crop_height - height) // 2 # Generate image crop image_crop = 255 * np.ones(crop_dims, dtype=np.uint8) try: image_crop[buffer:buffer + height] = image[min_y1:max_y2] except Exception as e: # pylint: disable=broad-except print(f"Rescued {filename}: {e}") return # Generate ground truth gt_image = np.zeros_like(image_crop, dtype=np.uint8) for ind, region in enumerate(line_regions): gt_image[(region["y1"] - min_y1 + buffer):(region["y2"] - min_y1 + buffer), region["x1"]:region["x2"]] = (ind % 2 + 1) # Generate image for debugging import matplotlib.pyplot as plt # pylint: disable=import-outside-toplevel cmap = plt.get_cmap("Set1") image_crop_for_debug = np.dstack([image_crop, image_crop, image_crop]) for ind, region in enumerate(line_regions): color = [255 * _ for _ in cmap(ind)[:-1]] cv2.rectangle( image_crop_for_debug, (region["x1"], region["y1"] - min_y1 + buffer), (region["x2"], region["y2"] - min_y1 + buffer), color, 3, ) image_crop_for_debug = cv2.resize(image_crop_for_debug, final_dims, interpolation=cv2.INTER_AREA) util.write_image(image_crop_for_debug, DEBUG_CROPS_DIRNAME / f"{filename.stem}.jpg") image_crop = cv2.resize( image_crop, final_dims, interpolation=cv2.INTER_AREA) # Quality interpolation for input util.write_image(image_crop, CROPS_DIRNAME / f"{filename.stem}.jpg") gt_image = cv2.resize( gt_image, final_dims, interpolation=cv2.INTER_NEAREST) # No interpolation for labels util.write_image(gt_image, GT_DIRNAME / f"{filename.stem}.png")
def _crop_paragraph_image(filename, line_regions, crop_dims, final_dims): image = util.read_image(filename, grayscale=True) min_y1 = min(r['y1'] for r in line_regions) - PARAGRAPH_BUFFER max_y2 = max(r['y2'] for r in line_regions) + PARAGRAPH_BUFFER height = max_y2 - min_y1 crop_height = crop_dims[0] buffer = (crop_height - height) // 2 # Generate image crop image_crop = 255 * np.ones(crop_dims, dtype=np.uint8) try: image_crop[buffer:buffer + height] = image[min_y1:max_y2] except Exception as e: print(f'Rescued {filename}: {e}') return # Generate ground truth gt_image = np.zeros_like(image_crop, dtype=np.uint8) for ind, region in enumerate(line_regions): gt_image[ (region['y1'] - min_y1 + buffer):(region['y2'] - min_y1 + buffer), region['x1']:region['x2'] ] = ind % 2 + 1 # Generate image for debugging import matplotlib.pyplot as plt cmap = plt.get_cmap('Set1') image_crop_for_debug = np.dstack([image_crop, image_crop, image_crop]) for ind, region in enumerate(line_regions): color = [255 * _ for _ in cmap(ind)[:-1]] cv2.rectangle( image_crop_for_debug, (region['x1'], region['y1'] - min_y1 + buffer), (region['x2'], region['y2'] - min_y1 + buffer), color, 3 ) image_crop_for_debug = cv2.resize(image_crop_for_debug, final_dims, interpolation=cv2.INTER_AREA) util.write_image(image_crop_for_debug, DEBUG_CROPS_DIRNAME / f'{filename.stem}.jpg') image_crop = cv2.resize(image_crop, final_dims, interpolation=cv2.INTER_AREA) # Quality interpolation for input util.write_image(image_crop, CROPS_DIRNAME / f'{filename.stem}.jpg') gt_image = cv2.resize(gt_image, final_dims, interpolation=cv2.INTER_NEAREST) # No interpolation for labels util.write_image(gt_image, GT_DIRNAME / f'{filename.stem}.png')