Actualización del código Error ELA
Browse files
app.py
CHANGED
@@ -3,9 +3,7 @@
|
|
3 |
import cv2
|
4 |
import numpy as np
|
5 |
from PIL import Image
|
6 |
-
from PIL.ExifTags import TAGS
|
7 |
-
import hashlib
|
8 |
-
import gradio as gr
|
9 |
import os
|
10 |
from datetime import datetime
|
11 |
import tempfile
|
@@ -41,31 +39,24 @@ def realizar_ela(imagen, quality=95, scale=100):
|
|
41 |
print(f"Error al realizar ELA: {e}")
|
42 |
return None
|
43 |
|
44 |
-
def analizar_manipulacion(imagen,
|
45 |
"""
|
46 |
-
Analiza si la imagen ha sido manipulada.
|
47 |
"""
|
48 |
manipulada = False
|
49 |
razones = []
|
50 |
|
51 |
-
|
52 |
-
razones.append("La imagen no tiene metadatos EXIF.")
|
53 |
-
else:
|
54 |
-
if "Software" in metadatos:
|
55 |
-
razones.append(f"La imagen fue editada con: {metadatos['Software']}")
|
56 |
-
manipulada = True
|
57 |
-
|
58 |
if ela_imagen is None:
|
59 |
razones.append("No se pudo realizar el análisis ELA.")
|
60 |
else:
|
61 |
promedio_ela = np.mean(ela_imagen)
|
62 |
-
if promedio_ela > 10:
|
63 |
razones.append("El análisis ELA sugiere posibles alteraciones.")
|
64 |
manipulada = True
|
|
|
|
|
65 |
|
66 |
-
if not razones:
|
67 |
-
razones.append("No se encontraron indicadores claros de manipulación.")
|
68 |
-
|
69 |
return manipulada, razones
|
70 |
|
71 |
def procesar_imagen(archivo_imagen):
|
@@ -85,9 +76,20 @@ def procesar_imagen(archivo_imagen):
|
|
85 |
Fecha de modificación: {fecha_modificacion}
|
86 |
"""
|
87 |
|
|
|
88 |
metadatos = obtener_metadatos(imagen)
|
|
|
|
|
89 |
ela_imagen = realizar_ela(imagen)
|
90 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
|
92 |
info_manipulacion = "\nAnálisis de manipulación:\n"
|
93 |
if manipulada:
|
@@ -113,12 +115,14 @@ def procesar_imagen(archivo_imagen):
|
|
113 |
return None, error_msg
|
114 |
|
115 |
# Interfaz de GRADIO
|
|
|
|
|
116 |
iface = gr.Interface(
|
117 |
fn=procesar_imagen,
|
118 |
inputs=gr.Image(type="filepath", label="Sube una imagen"),
|
119 |
outputs=[gr.Image(label="Error Level Analysis (ELA)"), gr.Textbox(label="Resultado del análisis")],
|
120 |
title="Análisis de Manipulación de Imágenes",
|
121 |
-
description="Sube una imagen para analizar posibles manipulaciones usando
|
122 |
)
|
123 |
|
124 |
# Lanzar la interfaz
|
|
|
3 |
import cv2
|
4 |
import numpy as np
|
5 |
from PIL import Image
|
6 |
+
from PIL.ExifTags import TAGS
|
|
|
|
|
7 |
import os
|
8 |
from datetime import datetime
|
9 |
import tempfile
|
|
|
39 |
print(f"Error al realizar ELA: {e}")
|
40 |
return None
|
41 |
|
42 |
+
def analizar_manipulacion(imagen, ela_imagen):
|
43 |
"""
|
44 |
+
Analiza si la imagen ha sido manipulada usando ELA como referencia principal.
|
45 |
"""
|
46 |
manipulada = False
|
47 |
razones = []
|
48 |
|
49 |
+
# Validar análisis ELA
|
|
|
|
|
|
|
|
|
|
|
|
|
50 |
if ela_imagen is None:
|
51 |
razones.append("No se pudo realizar el análisis ELA.")
|
52 |
else:
|
53 |
promedio_ela = np.mean(ela_imagen)
|
54 |
+
if promedio_ela > 10: # Umbral basado en pruebas
|
55 |
razones.append("El análisis ELA sugiere posibles alteraciones.")
|
56 |
manipulada = True
|
57 |
+
else:
|
58 |
+
razones.append("El análisis ELA no sugiere alteraciones.")
|
59 |
|
|
|
|
|
|
|
60 |
return manipulada, razones
|
61 |
|
62 |
def procesar_imagen(archivo_imagen):
|
|
|
76 |
Fecha de modificación: {fecha_modificacion}
|
77 |
"""
|
78 |
|
79 |
+
# Obtener metadatos (solo como referencia secundaria)
|
80 |
metadatos = obtener_metadatos(imagen)
|
81 |
+
|
82 |
+
# Realizar ELA
|
83 |
ela_imagen = realizar_ela(imagen)
|
84 |
+
|
85 |
+
# Analizar manipulación basado en ELA
|
86 |
+
manipulada, razones = analizar_manipulacion(imagen, ela_imagen)
|
87 |
+
|
88 |
+
# Agregar información sobre los metadatos
|
89 |
+
if metadatos:
|
90 |
+
razones.append("La imagen contiene metadatos EXIF.")
|
91 |
+
else:
|
92 |
+
razones.append("La imagen no tiene metadatos EXIF (esto no implica manipulación).")
|
93 |
|
94 |
info_manipulacion = "\nAnálisis de manipulación:\n"
|
95 |
if manipulada:
|
|
|
115 |
return None, error_msg
|
116 |
|
117 |
# Interfaz de GRADIO
|
118 |
+
import gradio as gr
|
119 |
+
|
120 |
iface = gr.Interface(
|
121 |
fn=procesar_imagen,
|
122 |
inputs=gr.Image(type="filepath", label="Sube una imagen"),
|
123 |
outputs=[gr.Image(label="Error Level Analysis (ELA)"), gr.Textbox(label="Resultado del análisis")],
|
124 |
title="Análisis de Manipulación de Imágenes",
|
125 |
+
description="Sube una imagen para analizar posibles manipulaciones usando principalmente ELA."
|
126 |
)
|
127 |
|
128 |
# Lanzar la interfaz
|