Spaces:
Runtime error
Runtime error
File size: 5,430 Bytes
0f02cf8 9285af4 0f02cf8 7ac80ce 0f02cf8 7ac80ce 0f02cf8 b7828ff 0f02cf8 b7828ff 0f02cf8 7ac80ce 0f02cf8 7ac80ce 9285af4 0f02cf8 9285af4 0f02cf8 7ac80ce 0f02cf8 9285af4 0f02cf8 9285af4 0f02cf8 9285af4 0f02cf8 9285af4 0f02cf8 9285af4 0f02cf8 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 | 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()
|