Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| from skimage.segmentation import slic | |
| from skimage.color import label2rgb | |
| import os | |
| import glob | |
| def edge_detection(image, threshold1, threshold2): | |
| gray = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) | |
| edges = cv2.Canny(gray, threshold1, threshold2) | |
| return edges | |
| def image_segmentation(image, n_segments, compactness): | |
| segments = slic(image, n_segments=n_segments, compactness=compactness, start_label=1) | |
| segmented_image = label2rgb(segments, image, kind="avg") | |
| return (segmented_image * 255).astype(np.uint8) | |
| def apply_threshold(image, threshold_value): | |
| gray_image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY) | |
| _, binary_image = cv2.threshold(gray_image, threshold_value, 255, cv2.THRESH_BINARY) | |
| return binary_image | |
| def apply_blur(image, kernel_size): | |
| kernel_size = int(kernel_size) | |
| if kernel_size % 2 == 0: | |
| kernel_size += 1 | |
| blurred_image = cv2.GaussianBlur(image, (kernel_size, kernel_size), 0) | |
| return blurred_image | |
| def apply_sharpen(image, intensity): | |
| kernel = np.array([ | |
| [0, -intensity, 0], | |
| [-intensity, 1 + 4 * intensity, -intensity], | |
| [0, -intensity, 0] | |
| ]) | |
| sharpened_image = cv2.filter2D(image, -1, kernel) | |
| return sharpened_image | |
| EXAMPLES_DIR = "examples/" | |
| example_images = glob.glob(os.path.join(EXAMPLES_DIR, "*.png")) | |
| def select_image(img): | |
| return img | |
| with gr.Blocks(theme='NoCrypt/miku') as demo: | |
| gr.Markdown("## 電腦視覺應用") | |
| image_input = gr.Image(label="上傳圖片", type="numpy", height="500px") | |
| with gr.Row(): | |
| for image in example_images: | |
| img_component = gr.Image( | |
| value=image, | |
| interactive=False, | |
| type="numpy" | |
| ) | |
| img_component.select( | |
| select_image, | |
| inputs=img_component, | |
| outputs=image_input | |
| ) | |
| gr.Markdown("---") | |
| with gr.Tab("邊緣檢測"): | |
| edge_threshold1 = gr.Slider(0, 255, value=50, label="邊緣檢測閾值1") | |
| edge_threshold2 = gr.Slider(0, 255, value=150, label="邊緣檢測閾值2") | |
| edge_button = gr.Button("執行邊緣檢測") | |
| edge_output = gr.Image(label="邊緣檢測結果", type="numpy") | |
| edge_button.click( | |
| edge_detection, | |
| inputs=[image_input, edge_threshold1, edge_threshold2], | |
| outputs=edge_output | |
| ) | |
| with gr.Tab("影像分割"): | |
| n_segments = gr.Slider(100, 1000, value=200, step=50, label="分割區域數量") | |
| compactness = gr.Slider(1, 50, value=10, label="分割緊湊性") | |
| segment_button = gr.Button("執行影像分割") | |
| segment_output = gr.Image(label="影像分割結果", type="numpy") | |
| segment_button.click( | |
| image_segmentation, | |
| inputs=[image_input, n_segments, compactness], | |
| outputs=segment_output | |
| ) | |
| with gr.Tab("圖像二值化"): | |
| threshold_slider = gr.Slider(0, 255, value=128, step=1, label="二值化閾值") | |
| threshold_button = gr.Button("應用二值化") | |
| threshold_output = gr.Image(label="二值化结果", type="numpy") | |
| threshold_button.click( | |
| apply_threshold, | |
| inputs=[image_input, threshold_slider], | |
| outputs=threshold_output | |
| ) | |
| with gr.Tab("模糊"): | |
| blur_slider = gr.Slider(1, 21, value=5, step=2, label="模糊核大小") | |
| blur_button = gr.Button("應用模糊") | |
| blur_output = gr.Image(label="模糊结果", type="numpy") | |
| blur_button.click( | |
| apply_blur, | |
| inputs=[image_input, blur_slider], | |
| outputs=blur_output | |
| ) | |
| with gr.Tab("銳化"): | |
| sharpen_slider = gr.Slider(0.0, 2.0, value=1.0, step=0.1, label="銳化强度") | |
| sharpen_button = gr.Button("應用銳化") | |
| sharpen_output = gr.Image(label="銳化结果", type="numpy") | |
| sharpen_button.click( | |
| apply_sharpen, | |
| inputs=[image_input, sharpen_slider], | |
| outputs=sharpen_output | |
| ) | |
| demo.launch(debug=True) | |