import gradio as gr import improcess import numpy as np # Fonction pour choisir un filtre et l'appliquer def choose_filter(input_img, filter): if input_img is None: return None match filter: case "Gray Scale": return improcess.gray_scale(input_img) case "Gaussian Blur": return improcess.gaussian_blur(input_img) case "Binarize": return improcess.binarize(input_img) case "Negative": return improcess.negative(input_img) # Fonction pour manipuler le contraste def handle_contrast(output_image, contrast: list): if output_image is None: return None for trans in contrast: if trans == "Dark Contrast": output_image = improcess.log_trans(output_image) elif trans == "White Contrast": output_image = improcess.exp_trans(output_image) return output_image # Fonction pour modifier la morphologie def handle_morphology(image, morphology): if image is None: return None for trans in morphology: if trans == "Erosion": image = improcess.erosion(image) elif trans == "Dilatation": image = improcess.dilatation(image) return image # Fonction pour egaliser l'histogramme def equalize_hist(image, equalize): if equalize == True: return improcess.equalize(image) return image def detect_feat(input_img, feature): if input_img is None: return None match feature: case "Edges(canny)": input_img = improcess.find_edges(input_img) return input_img case "Edges(laplacian)": input_img = improcess.laplacian(input_img) return input_img case "Contours": input_img = improcess.find_contours(input_img) return input_img # Fonction pour réinitialiser l'image def reset_img(input_img): return input_img # Interface Gradio with gr.Blocks(theme="Zarkel/IBM_Carbon_Theme") as demo: gr.HTML( """

Image processing lab

""" ) with gr.Row(): input_img = gr.Image( "profile.jpeg", label="Original image", scale=1, interactive=True ) with gr.Group(): output_img = gr.Image( "profile.jpeg", label="Transformed image", scale=2, interactive=False, format="png", ) btn = gr.Button(value="Reset") # Bouton de réinitialisation with gr.Row(variant="panel"): with gr.Group(): morphology = gr.CheckboxGroup( choices=["Dilatation", "Erosion"], label="Morphology" ) # equalize_img = gr.Checkbox(label="Equalize image") gamma = gr.Slider( minimum=0, maximum=1, label="Luminosity", interactive=True, value=0 ) contrast = gr.CheckboxGroup( choices=["Dark Contrast", "White Contrast"], label="Contrast" ) angle = gr.Slider(label="Rotation (deg)", minimum=0, maximum=360) with gr.Group(): scale = gr.Slider( minimum=0.1, maximum=1.5, value=1, label="Resize", info="Choose a scale" ) filter = gr.Dropdown( interactive=True, label="Apply filter", choices=["Gray Scale", "Binarize", "Negative", "Gaussian Blur"], ) features = gr.Dropdown( choices=["Contours", "Edges(canny)", "Edges(laplacian)"], interactive=True, label="Extract feature", ) show_histogram = gr.Button(value="Show Histogram") # Mise à jour de l'image lorsqu'un filtre est appliqué filter.change(fn=choose_filter, inputs=[input_img, filter], outputs=output_img) # Mise à jour de l'image avec redimensionnement scale.change(fn=improcess.resize, inputs=[input_img, scale], outputs=output_img) # Bouton de réinitialisation de l'image btn.click(fn=reset_img, inputs=[input_img], outputs=[output_img]) # Mise à jour de l'image avec correction de gamma gamma.change( fn=improcess.gamma_trans, inputs=[input_img, gamma], outputs=[output_img] ) # Mise à jour de l'image avec contraste contrast.change( fn=handle_contrast, inputs=[output_img, contrast], outputs=output_img ) # Mise à jour de l'image avec une transformation morphologique morphology.change( fn=handle_morphology, inputs=[input_img, morphology], outputs=output_img ) # Egaliser l'histogramme de l'image # equalize_img.change(fn=equalize_hist, inputs=[input_img], outputs=[output_img]) # Effectuer une rotation de l'image angle.change(fn=improcess.rotate, inputs=[input_img, angle], outputs=[output_img]) # Extraire les caractéristiques features.select(fn=detect_feat, inputs=[input_img, features], outputs=[output_img]) # Afficher l'histogram show_histogram.click( fn=improcess.return_histogram_path, inputs=[input_img], outputs=[output_img] ) # Lancer l'application if __name__ == "__main__": demo.launch()