| 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", |
| |
| ) |
|
|
| |
| 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" |
|
|
| |
| def image_generator(hf_dataset, split="train"): |
| for index, example in enumerate(hf_dataset[split]): |
| image = example['image'] |
| image_array = np.array(image) |
| yield index, image_array |
|
|
| |
| image_gen = image_generator(directory_path) |
|
|
|
|
| |
| def record_input(label: str, index: int, free_text: str): |
| |
| output = { |
| "index": index, |
| "label": label, |
| "free_text": free_text |
| } |
| |
| 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: |
| |
| index, image = next(image_gen) |
| return str(index), image, "" |
| except StopIteration: |
| return "No more images", None, "" |
| except Exception as e: |
| return str(e), None, "" |
|
|
| with gr.Blocks(fill_height=True, fill_width=True, theme = theme) as demo: |
| gr.Markdown("# OCTis Training Center") |
| |
| with gr.Row(): |
| |
| 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) |
| |
| |
| index_box = gr.Textbox(label="Index", visible=False) |
| |
| with gr.Row(): |
| |
| 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(): |
| |
| 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_btn = gr.Button("Start") |
| skip_btn = gr.Button("Überspringen") |
|
|
| |
| 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]) |
|
|
| |
| 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) |
|
|
| |
| 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) |
|
|