From 3759bda2da516e7bf84020bdd24e98298d30c52d Mon Sep 17 00:00:00 2001 From: Julius Unverfehrt Date: Tue, 30 Aug 2022 14:48:08 +0200 Subject: [PATCH] add support for broken images to hash encoding --- image_prediction/encoder/encoders/hash_encoder.py | 14 +++++++++++++- image_prediction/stitching/merging.py | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/image_prediction/encoder/encoders/hash_encoder.py b/image_prediction/encoder/encoders/hash_encoder.py index c21bacd..d9a6dfd 100644 --- a/image_prediction/encoder/encoders/hash_encoder.py +++ b/image_prediction/encoder/encoders/hash_encoder.py @@ -3,16 +3,28 @@ from typing import Iterable from PIL import Image from image_prediction.encoder.encoder import Encoder +from image_prediction.utils import get_logger + +logger = get_logger() class HashEncoder(Encoder): def encode(self, images: Iterable[Image.Image]): - yield from map(hash_image, images) + yield from map(_monitored_hashing, images) def __call__(self, images: Iterable[Image.Image], batch_size=16): yield from self.encode(images) +def _monitored_hashing(image): + try: # RED-5170: fails if image is 'broken' + image_hash = hash_image(image) + except (OSError, Exception) as err: + logger.warn(f"{err}: Couldn't hash image, generate dummy hash.") + image_hash = "F" * 25 + return image_hash + + def hash_image(image: Image.Image): """See: https://stackoverflow.com/a/49692185/3578468""" image = image.resize((10, 10), Image.ANTIALIAS) diff --git a/image_prediction/stitching/merging.py b/image_prediction/stitching/merging.py index 6286066..f09b8d2 100644 --- a/image_prediction/stitching/merging.py +++ b/image_prediction/stitching/merging.py @@ -190,7 +190,7 @@ def concat_images(im1: Image, im2: Image, metadata: dict, axis): try: # RED-5170: fails if image is 'broken' im_aggr.paste(im, box=box) - except Exception as err: + except (OSError, Exception) as err: logger.warn( f"{err}: Couldn't merge image, replace broken part by blank image and passthrough. (page: {metadata[Info.PAGE_IDX]})" )