leonett commited on
Commit
e0c9cd3
verified
1 Parent(s): 13ce078

Upload 3 files

Browse files
Files changed (3) hide show
  1. README.md +13 -14
  2. app.py +45 -0
  3. requirements.txt +3 -0
README.md CHANGED
@@ -1,14 +1,13 @@
1
- ---
2
- title: Error Ela
3
- emoji: 馃搳
4
- colorFrom: purple
5
- colorTo: green
6
- sdk: gradio
7
- sdk_version: 5.14.0
8
- app_file: app.py
9
- pinned: false
10
- license: gpl-3.0
11
- short_description: Detecci贸n de im谩genes alteradas con Error de Ela
12
- ---
13
-
14
- Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
1
+ ---
2
+ title: Error Ela
3
+ emoji: 馃搳
4
+ colorFrom: purple
5
+ colorTo: green
6
+ sdk: gradio
7
+ sdk_version: 5.12.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: gpl-3.0
11
+ ---
12
+
13
+ Check out the configuration reference at https://huggingface.co/docs/hub/spaces-config-reference
 
app.py ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import cv2
2
+ import numpy as np
3
+ import gradio as gr
4
+
5
+ def transformar_imagen(imagen, puntos):
6
+ # Verificamos que se hayan seleccionado 4 puntos
7
+ if puntos is None or len(puntos) != 4:
8
+ return "Por favor, selecciona 4 puntos en la imagen."
9
+
10
+ # Convertir la lista de puntos a un array NumPy de tipo float32
11
+ pts = np.array(puntos, dtype="float32")
12
+
13
+ # Calcular el ancho y el alto del rect谩ngulo destino basado en distancias entre puntos
14
+ ancho = int(max(np.linalg.norm(pts[0] - pts[1]), np.linalg.norm(pts[2] - pts[3])))
15
+ alto = int(max(np.linalg.norm(pts[0] - pts[3]), np.linalg.norm(pts[1] - pts[2])))
16
+
17
+ # Definir los puntos destino para la transformaci贸n (un rect谩ngulo)
18
+ dst = np.array([
19
+ [0, 0],
20
+ [ancho - 1, 0],
21
+ [ancho - 1, alto - 1],
22
+ [0, alto - 1]
23
+ ], dtype="float32")
24
+
25
+ # Calcular la matriz de homograf铆a
26
+ M = cv2.getPerspectiveTransform(pts, dst)
27
+
28
+ # Aplicar la transformaci贸n de perspectiva
29
+ warped = cv2.warpPerspective(imagen, M, (ancho, alto))
30
+ return warped
31
+
32
+ # Creamos la interfaz de Gradio
33
+ iface = gr.Interface(
34
+ fn=transformar_imagen,
35
+ inputs=[
36
+ gr.Image(type="numpy", tool="select", label="Carga la imagen y selecciona 4 puntos"),
37
+ gr.Dataframe(headers=["x", "y"], datatype=["number", "number"], interactive=True, label="Puntos (4 filas: [x, y])")
38
+ ],
39
+ outputs=gr.Image(type="numpy", label="Imagen transformada"),
40
+ title="Homograf铆a de Matr铆cula",
41
+ description="Carga una imagen, selecciona 4 puntos sobre la matr铆cula y se aplicar谩 la transformaci贸n de perspectiva."
42
+ )
43
+
44
+ if __name__ == "__main__":
45
+ iface.launch()
requirements.txt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ gradio
2
+ opencv-python-headless
3
+ numpy