import gradio as gr import cv2 import numpy as np import mediapipe as mp from rembg import remove from PIL import Image, ImageEnhance # Initialisation de Mediapipe pour la détection de visage mp_face_mesh = mp.solutions.face_mesh face_mesh = mp_face_mesh.FaceMesh() # Fonction pour la suppression d’arrière-plan def remove_bg(image): return remove(image) # Fonction pour la retouche beauté def beauty_filter(image, smooth_factor=50): img = np.array(image) img_rgb = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) results = face_mesh.process(img_rgb) if results.multi_face_landmarks: mask = np.zeros_like(img_rgb) for face_landmarks in results.multi_face_landmarks: points = [(int(p.x * img.shape[1]), int(p.y * img.shape[0])) for p in face_landmarks.landmark] convex_hull = cv2.convexHull(np.array(points)) cv2.fillConvexPoly(mask, convex_hull, (255, 255, 255)) blur = cv2.GaussianBlur(img_rgb, (smooth_factor, smooth_factor), 0) img_rgb = np.where(mask == (255, 255, 255), blur, img_rgb) return Image.fromarray(cv2.cvtColor(img_rgb, cv2.COLOR_BGR2RGB)) # Fonction pour la correction automatique des couleurs def auto_color_correction(image, brightness, contrast, saturation): img = ImageEnhance.Brightness(image).enhance(brightness) img = ImageEnhance.Contrast(img).enhance(contrast) img = ImageEnhance.Color(img).enhance(saturation) return img # Fonction pour le maquillage virtuel def virtual_makeup(image, lipstick_intensity, blush_intensity): img = np.array(image) img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) results = face_mesh.process(img) if results.multi_face_landmarks: for face_landmarks in results.multi_face_landmarks: lips = [(int(p.x * img.shape[1]), int(p.y * img.shape[0])) for p in face_landmarks.landmark[61:68]] cv2.fillPoly(img, [np.array(lips)], (0, 0, int(255 * lipstick_intensity))) cheek = [(int(p.x * img.shape[1]), int(p.y * img.shape[0])) for p in face_landmarks.landmark[234:236]] cv2.fillPoly(img, [np.array(cheek)], (int(255 * blush_intensity), 0, 0)) img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) return Image.fromarray(img) # Interface Gradio with gr.Blocks() as demo: gr.Markdown("## Éditeur de Photos IA : Retouche Beauté, Maquillage, Amélioration des Images") with gr.Tab("Suppression d'Arrière-Plan"): img_input = gr.Image(type="pil", label="Image Originale") img_output = gr.Image(type="pil", label="Image sans Arrière-Plan") btn_remove_bg = gr.Button("Supprimer l'Arrière-Plan") btn_remove_bg.click(remove_bg, inputs=img_input, outputs=img_output) with gr.Tab("Retouche Beauté"): img_input2 = gr.Image(type="pil", label="Image Originale") smooth_slider = gr.Slider(5, 100, value=50, label="Lissage de la peau") img_output2 = gr.Image(type="pil", label="Image Retouchée") btn_beauty = gr.Button("Appliquer Retouche Beauté") btn_beauty.click(beauty_filter, inputs=[img_input2, smooth_slider], outputs=img_output2) with gr.Tab("Correction des Couleurs"): img_input3 = gr.Image(type="pil", label="Image Originale") brightness = gr.Slider(0.5, 2.0, value=1.0, label="Luminosité") contrast = gr.Slider(0.5, 2.0, value=1.0, label="Contraste") saturation = gr.Slider(0.5, 2.0, value=1.0, label="Saturation") img_output3 = gr.Image(type="pil", label="Image Corrigée") btn_correct_colors = gr.Button("Corriger les Couleurs") btn_correct_colors.click(auto_color_correction, inputs=[img_input3, brightness, contrast, saturation], outputs=img_output3) with gr.Tab("Maquillage Virtuel"): img_input4 = gr.Image(type="pil", label="Image Originale") lipstick_slider = gr.Slider(0.0, 1.0, value=0.5, label="Intensité Rouge à Lèvres") blush_slider = gr.Slider(0.0, 1.0, value=0.5, label="Intensité Blush") img_output4 = gr.Image(type="pil", label="Image avec Maquillage") btn_makeup = gr.Button("Appliquer Maquillage Virtuel") btn_makeup.click(virtual_makeup, inputs=[img_input4, lipstick_slider, blush_slider], outputs=img_output4) demo.launch()