File size: 2,689 Bytes
43f8fa1
 
 
 
 
 
2afae91
43f8fa1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
5470ab9
43f8fa1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2afae91
43f8fa1
 
 
 
 
 
 
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
import gradio as gr
import kornia as K
from kornia.core import Tensor
from PIL import Image
import numpy as np

def oral_edge_detection(image, detector):
    # Convert PIL Image to Tensor
    img_np = np.array(image)
    img: Tensor = K.utils.image_to_tensor(img_np).float() / 255.0
    img = img.unsqueeze(0)  # Add batch dimension
    x_gray = K.color.rgb_to_grayscale(img)
    
    if detector == '1st order derivates in x':
        grads: Tensor = K.filters.spatial_gradient(x_gray, order=1) 
        grads_x = grads[:, :, 0]
        output = K.utils.tensor_to_image(1. - grads_x.clamp(0., 1.))
    
    elif detector == '1st order derivates in y':
        grads: Tensor = K.filters.spatial_gradient(x_gray, order=1)
        grads_y = grads[:, :, 1]
        output = K.utils.tensor_to_image(1. - grads_y.clamp(0., 1.))
    elif detector == 'Laplacian':
        x_laplacian: Tensor = K.filters.laplacian(x_gray, kernel_size=5)
        output = K.utils.tensor_to_image(1. - x_laplacian.clamp(0., 1.))
    else:
        x_canny: Tensor = K.filters.canny(x_gray)[0]
        output = K.utils.tensor_to_image(1. - x_canny.clamp(0., 1.0))
    return output

examples = [
    ["image.jpg", "Canny"]
]
title = "Oral Edge Detection"
description = "<p style='text-align: center'>This is a Gradio demo for Oral Edge Detection.</p><p style='text-align: center'>To use it, simply upload your image, or click one of the examples to load them, and select any edge detector to run it! Read more at the links at the bottom.</p>"
article = "<p style='text-align: center'><a href='https://kornia.readthedocs.io/en/latest/' target='_blank'>Kornia Docs</a> | <a href='https://github.com/kornia/kornia' target='_blank'>Kornia Github Repo</a> | <a href='https://kornia-tutorials.readthedocs.io/en/latest/filtering_edges.html' target='_blank'>Kornia Edge Detection Tutorial</a></p>"

with gr.Blocks(title=title) as demo:
    gr.Markdown(f"# {title}")
    gr.Markdown(description)
    
    with gr.Row():
        input_image = gr.Image(type="pil", label="Input Image")
        output_image = gr.Image(type="numpy", label="Edge Detection Result")
    
    detector = gr.Dropdown(
        choices=["1st order derivates in x", "1st order derivates in y", "2nd order derivatives in x", "Laplacian", "Canny"],
        label="Oral Edge Detector",
        value="Canny"
    )
    
    detect_button = gr.Button("Detect Edges")
    
    detect_button.click(fn=oral_edge_detectionedge_detection, inputs=[input_image, detector], outputs=output_image)
    
    gr.Examples(examples=examples, inputs=[input_image, detector], outputs=output_image)
    
    gr.Markdown(article)

if __name__ == "__main__":
    demo.launch()