ricardo238costa commited on
Commit
b9177b9
·
verified ·
1 Parent(s): 106befa

Update similarity.py

Browse files
Files changed (1) hide show
  1. similarity.py +24 -12
similarity.py CHANGED
@@ -1,5 +1,4 @@
1
  import base64
2
- import io
3
  from typing import List
4
  from skimage.metrics import structural_similarity as ssim
5
  import cv2
@@ -7,21 +6,28 @@ import numpy as np
7
  import requests
8
  from models import RequestModel, ResponseModel
9
  from PIL import Image
10
- Image.MAX_IMAGE_PIXELS = None
 
 
 
11
 
12
  def load_image_url(source):
 
 
13
  if source.startswith('http'):
14
- img = Image.open(requests.get(source, stream=True).raw)
 
 
15
  else:
16
- img_data = base64.b64decode(source)
17
- img = Image.open(io.BytesIO(img_data))
 
 
18
 
19
- img = np.array(img.convert('L'))
20
  return img
21
 
22
-
23
  def check_similarity(images: List[RequestModel]):
24
- print(f'checking similarity...')
25
 
26
  original_image = load_image_url(images[0].source)
27
  original_image_shape = original_image.shape
@@ -29,11 +35,17 @@ def check_similarity(images: List[RequestModel]):
29
  results = []
30
 
31
  for i in range(1, len(images)):
32
- image = load_image_url(images[i].source)
33
- image = cv2.resize(image, original_image_shape[::-1])
34
- s, _ = ssim(original_image, image, full=True)
35
- similarity_score = (s + 1) * 50
 
 
 
 
 
36
  response = ResponseModel(originId=images[i].originId, sequence=images[i].sequence,
37
  assetCode=images[i].assetCode, similarity=similarity_score)
38
  results.append(response)
 
39
  return results
 
1
  import base64
 
2
  from typing import List
3
  from skimage.metrics import structural_similarity as ssim
4
  import cv2
 
6
  import requests
7
  from models import RequestModel, ResponseModel
8
  from PIL import Image
9
+ from io import BytesIO
10
+ import logging
11
+
12
+ logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
13
 
14
  def load_image_url(source):
15
+ Image.MAX_IMAGE_PIXELS = None
16
+
17
  if source.startswith('http'):
18
+ response = requests.get(source)
19
+ img = np.asarray(bytearray(response.content), dtype=np.uint8)
20
+ img = cv2.imdecode(img, cv2.IMREAD_GRAYSCALE)
21
  else:
22
+ img = base64.b64decode(source)
23
+ img = Image.open(BytesIO(img))
24
+ img = np.array(img)
25
+ img = cv2.cvtColor(img, cv2.COLOR_RGB2GRAY)
26
 
 
27
  return img
28
 
 
29
  def check_similarity(images: List[RequestModel]):
30
+ logging.info(f"Checking similarity for main source with resource id {images[0].originId}")
31
 
32
  original_image = load_image_url(images[0].source)
33
  original_image_shape = original_image.shape
 
35
  results = []
36
 
37
  for i in range(1, len(images)):
38
+ try:
39
+ image = load_image_url(images[i].source)
40
+ image = cv2.resize(image, original_image_shape[::-1])
41
+ s, _ = ssim(original_image, image, full=True)
42
+ similarity_score = (s + 1) * 50
43
+ except Exception as e:
44
+ logging.error(f"Error loading image for resource id {images[i].originId} : {e}")
45
+ similarity_score = 0
46
+
47
  response = ResponseModel(originId=images[i].originId, sequence=images[i].sequence,
48
  assetCode=images[i].assetCode, similarity=similarity_score)
49
  results.append(response)
50
+
51
  return results