Download app.py from HuberDa/Label: direct link, hf CLI and curl.
- Browser
- Download file 5.06 kB
-
https://huggingface.co/spaces/HuberDa/Label/resolve/main/app.py
- Command line
-
hf download hf://spaces/HuberDa/Label/app.py
-
curl -L -o app.py https://huggingface.co/spaces/HuberDa/Label/resolve/main/app.py
5.06 kB
| 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) | |