leonett commited on
Commit
a9fca4f
·
verified ·
1 Parent(s): 372cb24

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +30 -23
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 = 90
104
- noise_level = 8
105
- error_scale = 25
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
- scaled_diff = diferencia * (noise_level / 10.0) * (error_scale / 100.0) * 20.0
 
 
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, 20, 255, cv2.THRESH_BINARY)
121
- mask = mask.astype(np.uint8)
122
-
123
- if equalize_histogram:
124
- gray = cv2.cvtColor(scaled_diff, cv2.COLOR_BGR2GRAY)
125
- gray_eq = cv2.equalizeHist(gray)
126
- scaled_diff = cv2.cvtColor(gray_eq, cv2.COLOR_GRAY2BGR)
127
-
128
- brightness_factor = min(1.1, brightness_pct / 100.0)
129
- scaled_diff = cv2.convertScaleAbs(scaled_diff, alpha=brightness_factor, beta=0)
130
-
131
- ela_color = scaled_diff.copy()
132
- img_gray = cv2.cvtColor(img_cv, cv2.COLOR_BGR2GRAY)
133
- img_gray = cv2.cvtColor(img_gray, cv2.COLOR_GRAY2BGR)
134
- img_gray = cv2.convertScaleAbs(img_gray, alpha=0.5, beta=0)
135
-
136
- result = np.where(mask[..., None] > 0, ela_color, img_gray)
 
 
 
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, ""