Update app.py
Browse files
app.py
CHANGED
|
@@ -100,40 +100,46 @@ def realizar_ela(imagen):
|
|
| 100 |
img_np = np.array(imagen.convert("RGB"))
|
| 101 |
img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
|
| 102 |
|
| 103 |
-
quality =
|
| 104 |
-
noise_level =
|
| 105 |
-
error_scale =
|
| 106 |
-
brightness_pct = 100
|
| 107 |
-
equalize_histogram = False
|
| 108 |
|
| 109 |
temp_path = "/tmp/temp_image.jpg"
|
| 110 |
cv2.imwrite(temp_path, img_cv, [cv2.IMWRITE_JPEG_QUALITY, quality])
|
| 111 |
img_comprimida = cv2.imread(temp_path)
|
|
|
|
| 112 |
if img_comprimida is None:
|
| 113 |
raise ValueError("No se pudo leer la imagen comprimida.")
|
| 114 |
|
|
|
|
| 115 |
diferencia = cv2.absdiff(img_cv.astype(np.float32), img_comprimida.astype(np.float32))
|
| 116 |
-
|
|
|
|
|
|
|
| 117 |
scaled_diff = np.clip(scaled_diff, 0, 255).astype(np.uint8)
|
| 118 |
|
|
|
|
| 119 |
gray_diff = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
|
| 120 |
-
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
result = np.where(mask[
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
os.remove(temp_path)
|
| 139 |
return result, mask
|
|
@@ -144,6 +150,7 @@ def realizar_ela(imagen):
|
|
| 144 |
cv2.putText(error_img, "ERROR AL PROCESAR ELA", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 145 |
return error_img, None
|
| 146 |
|
|
|
|
| 147 |
def procesar_imagen(archivo_imagen):
|
| 148 |
if not archivo_imagen:
|
| 149 |
return None, "❌ **ERROR: Por favor, cargue una imagen antes de analizar.**", None, ""
|
|
|
|
| 100 |
img_np = np.array(imagen.convert("RGB"))
|
| 101 |
img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
|
| 102 |
|
| 103 |
+
quality = 95
|
| 104 |
+
noise_level = 15 # Aumentado para mejor detección
|
| 105 |
+
error_scale = 30 # Aumentado para mejor visibilidad
|
|
|
|
|
|
|
| 106 |
|
| 107 |
temp_path = "/tmp/temp_image.jpg"
|
| 108 |
cv2.imwrite(temp_path, img_cv, [cv2.IMWRITE_JPEG_QUALITY, quality])
|
| 109 |
img_comprimida = cv2.imread(temp_path)
|
| 110 |
+
|
| 111 |
if img_comprimida is None:
|
| 112 |
raise ValueError("No se pudo leer la imagen comprimida.")
|
| 113 |
|
| 114 |
+
# Calcular diferencia
|
| 115 |
diferencia = cv2.absdiff(img_cv.astype(np.float32), img_comprimida.astype(np.float32))
|
| 116 |
+
|
| 117 |
+
# Escalar la diferencia para mejor visualización
|
| 118 |
+
scaled_diff = diferencia * (noise_level / 10.0) * (error_scale / 10.0)
|
| 119 |
scaled_diff = np.clip(scaled_diff, 0, 255).astype(np.uint8)
|
| 120 |
|
| 121 |
+
# Convertir a escala de grises para la máscara
|
| 122 |
gray_diff = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
|
| 123 |
+
|
| 124 |
+
# Aplicar threshold más sensible
|
| 125 |
+
_, mask = cv2.threshold(gray_diff, 10, 255, cv2.THRESH_BINARY)
|
| 126 |
+
|
| 127 |
+
# Mejorar la visualización de las áreas de error
|
| 128 |
+
# Crear imagen de resultado con colores visibles
|
| 129 |
+
result = scaled_diff.copy()
|
| 130 |
+
|
| 131 |
+
# Resaltar áreas de error en amarillo/rojo
|
| 132 |
+
# Donde la máscara es blanca, poner color rojo/amarillo
|
| 133 |
+
mask_colored = cv2.merge([mask, mask, np.zeros_like(mask)]) # Crear máscara amarilla
|
| 134 |
+
|
| 135 |
+
# Combinar la imagen original con las áreas resaltadas
|
| 136 |
+
background = cv2.addWeighted(img_cv, 0.3, np.zeros_like(img_cv), 0.7, 0) # Fondo oscurecido
|
| 137 |
+
|
| 138 |
+
# Donde hay máscara, mostrar color amarillo; donde no, mostrar fondo
|
| 139 |
+
result = np.where(mask[:, :, None] > 0, mask_colored, background)
|
| 140 |
+
|
| 141 |
+
# Aumentar contraste para mejor visualización
|
| 142 |
+
result = cv2.convertScaleAbs(result, alpha=1.2, beta=10)
|
| 143 |
|
| 144 |
os.remove(temp_path)
|
| 145 |
return result, mask
|
|
|
|
| 150 |
cv2.putText(error_img, "ERROR AL PROCESAR ELA", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 151 |
return error_img, None
|
| 152 |
|
| 153 |
+
|
| 154 |
def procesar_imagen(archivo_imagen):
|
| 155 |
if not archivo_imagen:
|
| 156 |
return None, "❌ **ERROR: Por favor, cargue una imagen antes de analizar.**", None, ""
|