File size: 2,699 Bytes
9aed5ca
 
 
2fbadd4
99c6bf5
2fbadd4
99c6bf5
2fbadd4
 
 
99c6bf5
2fbadd4
 
 
 
 
99c6bf5
284bdef
 
2fbadd4
 
 
 
99c6bf5
2fbadd4
ab38378
2fbadd4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
99c6bf5
2fbadd4
99c6bf5
2fbadd4
99c6bf5
2fbadd4
e24d2e5
 
 
 
 
2fbadd4
 
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
import gradio as gr
from PIL import Image

# Single image analysis function (your existing logic)
def analyze_image(image, min_size, circularity, do_necrosis=True):
    import Colony_Analyzer_AI2_HF as analyzer
    processed_img, picname, excelname = analyzer.main([image, min_size, circularity,do_necrosis])
    return Image.fromarray(processed_img), picname, excelname

# Z-stack analysis function (adapt with your own logic)
def analyze_zstack(images, min_size, circularity, do_necrosis=True):
    # images: list of PIL images
    # Plug in your own z-stack segmentation logic here
    # Example stub: pass images as a list to your analyzer
    import Colony_Analyzer_AI_zstack2_HF as analyzer
    images = [Image.open(f.name) for f in images]
    processed_img, picname, excelname = analyzer.main([images, min_size, circularity,do_necrosis])
    return Image.fromarray(processed_img), picname, excelname

with gr.Blocks() as demo:
    gr.Markdown("# AI Colony Analyzer\nUpload an image (or Z-Stack) to run colony analysis.")

    z_stack_checkbox = gr.Checkbox(label="Enable Z-Stack", value=False)
    do_necrosis_checkbox = gr.Checkbox(label="Enable necrosis detection", value=False)
    image_input_single = gr.Image(type="pil", label="Upload Image", visible=True)
    image_input_multi = gr.File(file_count="multiple", type="filepath", label="Upload Z-Stack Images", visible=False)
    min_size_input = gr.Number(label="Minimum Colony Size (pixels)", value=1000)
    circularity_input = gr.Number(label="Minimum Circularity", value=0.25)
    output_image = gr.Image(type="pil", label="Analyzed Image")
    output_file_img = gr.File(label="Download Image")
    output_file_excel = gr.File(label="Download results (Excel)")
    process_btn = gr.Button("Process")

    def toggle_inputs(z_stack_enabled):
        return (
            gr.update(visible=not z_stack_enabled),  # single input
            gr.update(visible=z_stack_enabled)        # multi input
        )

    z_stack_checkbox.change(
        toggle_inputs,
        inputs=z_stack_checkbox,
        outputs=[image_input_single, image_input_multi]
    )

    def conditional_analyze(z_stack, single_image, multi_images, min_size, circularity, do_necrosis=True):
        if z_stack:
            return analyze_zstack(multi_images, min_size, circularity,do_necrosis)
        else:
            return analyze_image(single_image, min_size, circularity,do_necrosis)

    process_btn.click(
        conditional_analyze,
        inputs=[z_stack_checkbox, image_input_single, image_input_multi, min_size_input, circularity_input, do_necrosis_checkbox],
        outputs=[output_image, output_file_img, output_file_excel]
    )

demo.launch()