MarioPrzBasto commited on
Commit
1ff63a0
·
verified ·
1 Parent(s): 20c9d54

Update main.py

Browse files
Files changed (1) hide show
  1. main.py +43 -0
main.py CHANGED
@@ -10,6 +10,11 @@ import base64
10
  import requests
11
  from PIL import Image
12
  from io import BytesIO
 
 
 
 
 
13
 
14
  BASE_DIR = "saved_data"
15
  app = FastAPI()
@@ -28,6 +33,39 @@ def orb_sim(img1, img2):
28
  return 0
29
  return len(similar_regions) / len(matches)
30
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31
  def load_image(source):
32
  Image.MAX_IMAGE_PIXELS = None
33
 
@@ -56,13 +94,18 @@ async def save(image_data: RequestModel):
56
  img2 = load_image(image_data.source)
57
 
58
  similarity_orb = None
 
 
59
  if img1 is not None and img2 is not None:
60
  similarity_orb = orb_sim(img1, img2)
61
  print(f"Similaridade ORB entre {image_data.originSource} e {image_data.source}: {similarity_orb}")
 
 
62
 
63
  data_to_save = image_data.dict()
64
  if similarity_orb is not None:
65
  data_to_save["similarityOrb"] = similarity_orb
 
66
 
67
  with open(filename, "w") as f:
68
  json.dump(data_to_save, f, indent=4)
 
10
  import requests
11
  from PIL import Image
12
  from io import BytesIO
13
+ from tensorflow.keras.applications import MobileNetV2
14
+ from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
15
+ from tensorflow.keras.models import Model
16
+ from tensorflow.keras.preprocessing.image import img_to_array
17
+ from sklearn.metrics.pairwise import cosine_similarity
18
 
19
  BASE_DIR = "saved_data"
20
  app = FastAPI()
 
33
  return 0
34
  return len(similar_regions) / len(matches)
35
 
36
+ def preprocess_image_for_mobilenet(image):
37
+ # Garantir que a imagem tem 3 canais
38
+ if len(image.shape) == 2:
39
+ image = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
40
+ elif image.shape[2] == 1:
41
+ image = cv2.cvtColor(image, cv2.COLOR_GRAY2RGB)
42
+ else:
43
+ image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
44
+
45
+ # Redimensionar e preparar imagem
46
+ image = cv2.resize(image, (224, 224))
47
+ image = img_to_array(image)
48
+ image = np.expand_dims(image, axis=0)
49
+ image = preprocess_input(image)
50
+
51
+ return image
52
+
53
+ def mobilenet_similarity(img1, img2):
54
+ try:
55
+ img1_proc = preprocess_image_for_mobilenet(img1)
56
+ img2_proc = preprocess_image_for_mobilenet(img2)
57
+
58
+ feat1 = mobilenet.predict(img1_proc, verbose=0)
59
+ feat2 = mobilenet.predict(img2_proc, verbose=0)
60
+
61
+ sim = cosine_similarity(feat1, feat2)[0][0] # Valor entre -1 e 1
62
+ sim_score = (sim + 1) * 50 # Escalar para 0-100
63
+ logging.info(f"MobileNet similarity score is {sim_score}")
64
+ return sim_score
65
+ except Exception as e:
66
+ logging.error("Erro ao calcular similaridade com MobileNet", exc_info=True)
67
+ return 0
68
+
69
  def load_image(source):
70
  Image.MAX_IMAGE_PIXELS = None
71
 
 
94
  img2 = load_image(image_data.source)
95
 
96
  similarity_orb = None
97
+ similarity_mobilenet = None
98
+
99
  if img1 is not None and img2 is not None:
100
  similarity_orb = orb_sim(img1, img2)
101
  print(f"Similaridade ORB entre {image_data.originSource} e {image_data.source}: {similarity_orb}")
102
+ similarity_mobilenet = mobilenet_similarity(original_image, image)
103
+ print(f"Similaridade Mobilenet entre {image_data.originSource} e {image_data.source}: {similarity_mobilenet}")
104
 
105
  data_to_save = image_data.dict()
106
  if similarity_orb is not None:
107
  data_to_save["similarityOrb"] = similarity_orb
108
+ data_to_save["similarityMobilenet"] = similarity_mobilenet
109
 
110
  with open(filename, "w") as f:
111
  json.dump(data_to_save, f, indent=4)