Update app.py
Browse files
app.py
CHANGED
|
@@ -96,37 +96,48 @@ def estimar_probabilidad_manipulacion(porcentaje_ela):
|
|
| 96 |
else:
|
| 97 |
return "Muy alta (> 15%) - Manipulaci贸n extensa o generaci贸n por IA detectada."
|
| 98 |
|
|
|
|
| 99 |
def realizar_ela(imagen):
|
| 100 |
try:
|
| 101 |
img_np = np.array(imagen.convert("RGB"))
|
| 102 |
img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
|
| 103 |
|
| 104 |
-
quality =
|
| 105 |
-
noise_level =
|
| 106 |
-
error_scale =
|
|
|
|
|
|
|
| 107 |
|
| 108 |
temp_path = "/tmp/temp_image.jpg"
|
| 109 |
cv2.imwrite(temp_path, img_cv, [cv2.IMWRITE_JPEG_QUALITY, quality])
|
| 110 |
img_comprimida = cv2.imread(temp_path)
|
| 111 |
-
|
| 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 |
-
scaled_diff = diferencia * (noise_level / 10.0) * (error_scale /
|
| 117 |
scaled_diff = np.clip(scaled_diff, 0, 255).astype(np.uint8)
|
| 118 |
|
| 119 |
gray_diff = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
|
| 120 |
-
_, mask = cv2.threshold(gray_diff,
|
| 121 |
-
|
| 122 |
-
|
| 123 |
-
|
| 124 |
-
|
| 125 |
-
|
| 126 |
-
|
| 127 |
-
|
| 128 |
-
|
| 129 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
return result, mask
|
| 131 |
|
| 132 |
except Exception as e:
|
|
@@ -135,6 +146,9 @@ def realizar_ela(imagen):
|
|
| 135 |
cv2.putText(error_img, "ERROR AL PROCESAR ELA", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 136 |
return error_img, None
|
| 137 |
|
|
|
|
|
|
|
|
|
|
| 138 |
def crear_graficos_estadisticas(porcentaje_ela, dimensiones, metadatos):
|
| 139 |
"""Crear gr谩ficos estad铆sticos para el an谩lisis ELA"""
|
| 140 |
|
|
|
|
| 96 |
else:
|
| 97 |
return "Muy alta (> 15%) - Manipulaci贸n extensa o generaci贸n por IA detectada."
|
| 98 |
|
| 99 |
+
|
| 100 |
def realizar_ela(imagen):
|
| 101 |
try:
|
| 102 |
img_np = np.array(imagen.convert("RGB"))
|
| 103 |
img_cv = cv2.cvtColor(img_np, cv2.COLOR_RGB2BGR)
|
| 104 |
|
| 105 |
+
quality = 90
|
| 106 |
+
noise_level = 8
|
| 107 |
+
error_scale = 25
|
| 108 |
+
brightness_pct = 100
|
| 109 |
+
equalize_histogram = False
|
| 110 |
|
| 111 |
temp_path = "/tmp/temp_image.jpg"
|
| 112 |
cv2.imwrite(temp_path, img_cv, [cv2.IMWRITE_JPEG_QUALITY, quality])
|
| 113 |
img_comprimida = cv2.imread(temp_path)
|
|
|
|
| 114 |
if img_comprimida is None:
|
| 115 |
raise ValueError("No se pudo leer la imagen comprimida.")
|
| 116 |
|
| 117 |
diferencia = cv2.absdiff(img_cv.astype(np.float32), img_comprimida.astype(np.float32))
|
| 118 |
+
scaled_diff = diferencia * (noise_level / 10.0) * (error_scale / 100.0) * 20.0
|
| 119 |
scaled_diff = np.clip(scaled_diff, 0, 255).astype(np.uint8)
|
| 120 |
|
| 121 |
gray_diff = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
|
| 122 |
+
_, mask = cv2.threshold(gray_diff, 20, 255, cv2.THRESH_BINARY)
|
| 123 |
+
mask = mask.astype(np.uint8)
|
| 124 |
+
|
| 125 |
+
if equalize_histogram:
|
| 126 |
+
gray = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
|
| 127 |
+
gray_eq = cv2.equalizeHist(gray)
|
| 128 |
+
scaled_diff = cv2.cvtColor(gray_eq, cv2.COLOR_GRAY2BGR)
|
| 129 |
+
|
| 130 |
+
brightness_factor = min(1.1, brightness_pct / 100.0)
|
| 131 |
+
scaled_diff = cv2.convertScaleAbs(scaled_diff, alpha=brightness_factor, beta=0)
|
| 132 |
+
|
| 133 |
+
ela_color = scaled_diff.copy()
|
| 134 |
+
img_gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
|
| 135 |
+
img_gray = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)
|
| 136 |
+
img_gray = cv2.convertScaleAbs(img_gray, alpha=0.5, beta=0)
|
| 137 |
+
|
| 138 |
+
result = np.where(mask[..., None] > 0, ela_color, img_gray)
|
| 139 |
+
|
| 140 |
+
os.remove(temp_path)
|
| 141 |
return result, mask
|
| 142 |
|
| 143 |
except Exception as e:
|
|
|
|
| 146 |
cv2.putText(error_img, "ERROR AL PROCESAR ELA", (50, 150), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2)
|
| 147 |
return error_img, None
|
| 148 |
|
| 149 |
+
|
| 150 |
+
|
| 151 |
+
|
| 152 |
def crear_graficos_estadisticas(porcentaje_ela, dimensiones, metadatos):
|
| 153 |
"""Crear gr谩ficos estad铆sticos para el an谩lisis ELA"""
|
| 154 |
|