Spaces:
Runtime error
Runtime error
| 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( | |
| """ | |
| <h1 style='text-align: center'>Image processing lab</h1> | |
| """ | |
| ) | |
| 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() | |