Spaces:
Sleeping
Sleeping
Marcepelaez
commited on
Commit
•
06f070a
1
Parent(s):
19a5f57
app
Browse files
app.py
ADDED
@@ -0,0 +1,69 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from PIL import Image, ImageOps, ImageEnhance
|
2 |
+
import gradio as gr
|
3 |
+
import numpy as np
|
4 |
+
|
5 |
+
# Función para transformar negativo a positivo ajustando el balance de color
|
6 |
+
def negativo_a_positivo_fotografico(image):
|
7 |
+
# Convertir la imagen a modo RGB si no lo está
|
8 |
+
if image.mode != "RGB":
|
9 |
+
image = image.convert("RGB")
|
10 |
+
|
11 |
+
# Invertir los colores de la imagen (convertir negativo a positivo)
|
12 |
+
image_invertida = ImageOps.invert(image)
|
13 |
+
|
14 |
+
# Mejorar la saturación y el brillo para corregir la apariencia típica de los negativos
|
15 |
+
image_corregida = ImageEnhance.Color(image_invertida).enhance(1.5) # Ajustar la saturación
|
16 |
+
image_corregida = ImageEnhance.Brightness(image_corregida).enhance(1.2) # Ajustar el brillo
|
17 |
+
|
18 |
+
return image_corregida
|
19 |
+
|
20 |
+
# Función original para imágenes digitales negativas
|
21 |
+
def negativo_a_positivo(image):
|
22 |
+
# Convertir la imagen a modo RGB si no lo está
|
23 |
+
if image.mode != "RGB":
|
24 |
+
image = image.convert("RGB")
|
25 |
+
|
26 |
+
# Invertir los colores de la imagen (transformar negativo a positivo)
|
27 |
+
image_positivo = ImageOps.invert(image)
|
28 |
+
|
29 |
+
return image_positivo
|
30 |
+
|
31 |
+
# Interfaz para Gradio con selección de tipo de imagen y ajustes de brillo y saturación
|
32 |
+
def interfaz(image, tipo_negativo, brillo, saturacion, contraste, nitidez):
|
33 |
+
# Convertir la imagen a un formato adecuado para Pillow
|
34 |
+
pil_image = Image.fromarray(image)
|
35 |
+
|
36 |
+
# Elegir el tipo de conversión según la selección del usuario
|
37 |
+
if tipo_negativo == "Negativo Digital":
|
38 |
+
image_positivo = negativo_a_positivo(pil_image)
|
39 |
+
else:
|
40 |
+
image_positivo = negativo_a_positivo_fotografico(pil_image)
|
41 |
+
|
42 |
+
# Aplicar ajustes de brillo, saturación, contraste y nitidez
|
43 |
+
image_positivo = ImageEnhance.Brightness(image_positivo).enhance(brillo)
|
44 |
+
image_positivo = ImageEnhance.Color(image_positivo).enhance(saturacion)
|
45 |
+
image_positivo = ImageEnhance.Contrast(image_positivo).enhance(contraste)
|
46 |
+
image_positivo = ImageEnhance.Sharpness(image_positivo).enhance(nitidez)
|
47 |
+
|
48 |
+
# Devolver la imagen transformada en formato de array para Gradio
|
49 |
+
return np.array(image_positivo)
|
50 |
+
|
51 |
+
# Crear el Space de Hugging Face con Gradio
|
52 |
+
demo = gr.Interface(
|
53 |
+
fn=interfaz,
|
54 |
+
inputs=[
|
55 |
+
gr.Image(type="numpy", label="Sube o captura una imagen en negativo"),
|
56 |
+
gr.Radio(choices=["Negativo Digital", "Negativo de Rollo Fotográfico"], label="Tipo de Negativo"),
|
57 |
+
gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Brillo"),
|
58 |
+
gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Saturación"),
|
59 |
+
gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Contraste"),
|
60 |
+
gr.Slider(0.5, 2.0, value=1.0, label="Ajuste de Nitidez")
|
61 |
+
],
|
62 |
+
outputs="image",
|
63 |
+
live=True,
|
64 |
+
title="Transforma Negativos en Positivos",
|
65 |
+
description="Carga una imagen de negativo (desde archivo o cámara) y ajusta el brillo, saturación, contraste y nitidez para obtener el mejor resultado."
|
66 |
+
)
|
67 |
+
|
68 |
+
# Ejecutar la aplicación de Gradio
|
69 |
+
demo.launch()
|