import cv2 import numpy as np import gradio as gr def create_edge_map(image, scale_value): # Convertir l'image en niveaux de gris si ce n'est pas déjà le cas if len(image.shape) > 2 and image.shape[2] == 3: gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) else: gray = image # L'image est déjà en niveaux de gris # Appliquer un flou gaussien pour réduire le bruit blurred = cv2.GaussianBlur(gray, (5, 5), 0) # Calculer le gradient horizontal gradient_x = cv2.Sobel(blurred, cv2.CV_64F, 1, 0, ksize=5) # Calculer le gradient vertical gradient_y = cv2.Sobel(blurred, cv2.CV_64F, 0, 1, ksize=5) # Calculer la magnitude du gradient magnitude = np.sqrt(gradient_x**2 + gradient_y**2) # Normaliser la magnitude pour une meilleure visualisation edge_map = cv2.normalize(magnitude, None, alpha=0, beta=255, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_8U) # Ajouter un ajustement basé sur le paramètre scale_value edge_map = cv2.addWeighted(edge_map, scale_value, np.zeros_like(edge_map), 0, 0) return edge_map # Fonction Gradio pour générer la carte de profondeur def edge_map_function(image, scale_value): # Convertir l'image PIL en numpy array image_np = np.array(image) # Générer la carte de profondeur edge_map = create_edge_map(image_np, scale_value) # Retourner l'image résultante return edge_map # Créer une interface Gradio pour tester la fonction edge_map_function inputs = [ gr.Image(label="Upload Image"), # Utilisation de l'entrée d'image par défaut gr.Slider(minimum=1, maximum=5, label="Edges Scale") ] output = gr.Image(label="Edges Map") # Utilisation de la sortie d'image par défaut # Créer une interface Gradio gr.Interface(fn=edge_map_function, inputs=inputs, outputs=output, title="Edges Generator").launch()