Spaces:
Running on CPU Upgrade
Running on CPU Upgrade
| import base64 | |
| from typing import List | |
| from skimage.metrics import structural_similarity as ssim | |
| import cv2 | |
| import numpy as np | |
| import requests | |
| from models import RequestModel, ResponseModel | |
| from PIL import Image | |
| from io import BytesIO | |
| import logging | |
| logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') | |
| def load_image_url(source): | |
| Image.MAX_IMAGE_PIXELS = None | |
| if source.startswith('http'): | |
| response = requests.get(source) | |
| img = np.asarray(bytearray(response.content), dtype=np.uint8) | |
| img = cv2.imdecode(img, cv2.IMREAD_GRAYSCALE) | |
| else: | |
| img = base64.b64decode(source) | |
| img = Image.open(BytesIO(img)) | |
| img = np.array(img) | |
| img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY) | |
| return img | |
| def check_similarity(images: List[RequestModel]): | |
| logging.info(f"Checking similarity for main source with resource id {images[0].originId}") | |
| original_image = load_image_url(images[0].source) | |
| original_image_shape = original_image.shape | |
| results = [] | |
| for i in range(1, len(images)): | |
| try: | |
| image = load_image_url(images[i].source) | |
| image = cv2.resize(image, original_image_shape[::-1]) | |
| s, _ = ssim(original_image, image, full=True) | |
| similarity_score = (s + 1) * 50 | |
| except Exception as e: | |
| logging.error(f"Error loading image for resource id {images[i].originId} : {e}") | |
| similarity_score = 0 | |
| response = ResponseModel(originId=images[i].originId, sequence=images[i].sequence, | |
| assetCode=images[i].assetCode, similarity=similarity_score) | |
| results.append(response) | |
| return results |