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)
|