Spaces:
Running
Running
Update main.py
Browse files
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)
|