File size: 5,056 Bytes
1bd1e28
 
 
18810d9
1bd1e28
29a84ce
 
 
 
 
 
 
 
 
 
 
 
2dd56eb
29a84ce
 
 
 
4ff2986
2dd56eb
 
 
 
 
 
1bd1e28
29a84ce
18810d9
29a84ce
 
 
 
 
 
1bd1e28
 
 
29a84ce
 
 
 
 
 
 
 
 
 
 
 
 
1bd1e28
 
29a84ce
 
 
 
 
 
 
 
 
 
2dd56eb
29a84ce
 
 
 
 
 
 
 
 
 
 
 
 
 
2dd56eb
 
 
29a84ce
 
 
2dd56eb
 
 
29a84ce
 
 
 
 
 
 
 
 
 
 
2dd56eb
 
 
 
 
 
29a84ce
 
 
 
 
 
 
 
 
1bd1e28
 
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
import numpy as np
import gradio as gr
import json
from datasets import load_dataset


theme = gr.themes.Base(
    secondary_hue="cyan",
).set(
    button_primary_background_fill='*primary_100',
    button_primary_text_color='*neutral_950',
    border_color_accent="*primary_100",
    body_text_color="*neutral_950",
    block_border_color="*primary_100",
    block_title_text_color="*neutral_950",
    block_title_text_size="text_xl",
    panel_border_color="*primary_950",
    form_gap_width="2px",
    
)

# Daten laden
directory_path = load_dataset("HuberDa/OCTTestdaten")
disease_1 = "Alterbedinge Makulardegeneration (AMD)"
disease_2 = "Diabetische Netzhauterkrankung (DR)"
disease_3 = "Drusen"
disease_4 = "Chorodiale Neovaskularisation (CNV)"
disease_5 = "Diabetisches Makulaödem (DME)"
disease_6 = "Normal / Keine Krankheit"

# Bilder generieren
def image_generator(hf_dataset, split="train"):
    for index, example in enumerate(hf_dataset[split]):
        image = example['image']  # Access the image column
        image_array = np.array(image)  # Convert to a NumPy array
        yield index, image_array  # Yield the index and image

# Generator aktivieren
image_gen = image_generator(directory_path)


# Input der Bilder sammeln
def record_input(label: str, index: int, free_text: str):
    # Den Output mit index, label, and free text sammeln
    output = {
        "index": index,
        "label": label,
        "free_text": free_text
    }
    # Output notieren
    with open("output.txt", 'a') as f:
        json.dump(output, f)
        f.write("\n")
    return f"Bild {index} wurde als {label} klassifiziert. \nZusätzliche Notizen: {free_text}"

def start():
    try:
        # Nächstes Bild und Index holen
        index, image = next(image_gen)  # Index und Bild entpacken
        return str(index), image, ""  # Rückgabe von index, image, and leeren der Textbox
    except StopIteration:
        return "No more images", None, ""  # Falls keine Bilder übrig
    except Exception as e:
        return str(e), None, ""  # Für andere Probleme

with gr.Blocks(fill_height=True, fill_width=True, theme = theme) as demo:
    gr.Markdown("# OCTis Training Center")
       
    with gr.Row():
        # Bildanzeige
        img_block = gr.Image(visible=True, width=500, height=500, show_fullscreen_button=True, show_share_button=False, show_download_button=False, show_label=False)

    with gr.Row():
        output_message = gr.Textbox(label="Ergebnis", interactive=False)
        free_text_input = gr.Textbox(label="zusätzliche Informationen", placeholder="Hier Text eingeben...", lines=2)  
        
        # versteckte textbox für index
        index_box = gr.Textbox(label="Index", visible=False)
       
    with gr.Row():
        # Buttons 1 - 3 
        disease1_btn = gr.Button(value=disease_1,variant="primary")
        disease2_btn = gr.Button(value=disease_2,variant="primary")
        disease3_btn = gr.Button(value=disease_3,variant="primary")
        
    with gr.Row():
        # Button 4 - 6
        disease4_btn = gr.Button(value=disease_4,variant="primary")
        disease5_btn = gr.Button(value=disease_5,variant="primary")
        nodisease_btn = gr.Button(value=disease_6,variant="primary")

    with gr.Row():
        # Start und skip Button
        start_btn = gr.Button("Start")
        skip_btn = gr.Button("Überspringen")

    # Starten der App
    start_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    skip_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])

    # Labeling mit Buttons
    disease1_btn.click(fn=lambda idx, free_text: record_input(disease_1, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)
    disease2_btn.click(fn=lambda idx, free_text: record_input(disease_2, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)
    disease3_btn.click(fn=lambda idx, free_text: record_input(disease_3, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)
    disease4_btn.click(fn=lambda idx, free_text: record_input(disease_4, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)
    disease5_btn.click(fn=lambda idx, free_text: record_input(disease_5, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)
    nodisease_btn.click(fn=lambda idx, free_text: record_input(disease_6, idx, free_text), inputs=[index_box, free_text_input], outputs=output_message)

    # Nächstes Bild
    disease1_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    disease2_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    disease3_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    disease4_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    disease5_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])
    nodisease_btn.click(fn=start, outputs=[index_box, img_block, free_text_input])

demo.queue()
demo.launch(share=True, debug=True)