File size: 1,724 Bytes
3834351
4768cde
dd1d7f5
a32df56
3834351
49abd9f
 
 
 
 
 
 
4768cde
3834351
 
4768cde
49abd9f
 
 
 
4768cde
 
dd1d7f5
 
 
 
 
3834351
9226311
d807150
 
 
 
 
 
 
 
 
 
 
 
 
49abd9f
4768cde
3834351
 
dd1d7f5
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
import gradio as gr
import tempfile
from pathlib import Path
from wrapper import run_pipeline_on_image

def show_preview(image):
    """Show the original uploaded image as-is."""
    if image is None:
        return None
    # Return original image without conversion
    return image

def process(image):
    if image is None:
        return []
    with tempfile.TemporaryDirectory() as tmpdir:
        # Save PIL image preserving original format
        # Determine extension from image format
        ext = image.format.lower() if image.format else 'png'
        img_path = Path(tmpdir) / f"input.{ext}"
        image.save(img_path)
        outputs = run_pipeline_on_image(str(img_path), tmpdir, save_artifacts=True)
        # Keep order consistent: return exactly the 7 images
        order = [
            'NDVI', 'ARI', 'GNDVI', 'LBP', 'HOG', 'Lacunarity', 'SizeAnalysis'
        ]
        return [outputs[k] for k in order if k in outputs]

with gr.Blocks() as demo:
    gr.Markdown("# 🌿 Sorghum Plant Analysis Demo")
    gr.Markdown("Upload a sorghum plant image to analyze vegetation indices, texture features, and morphology.")
    
    with gr.Row():
        with gr.Column():
            inp = gr.Image(type="pil", label="Upload Image")
            run = gr.Button("Run Pipeline", variant="primary")
        with gr.Column():
            preview = gr.Image(type="pil", label="Uploaded Image Preview", interactive=False)
    
    gallery = gr.Gallery(label="Analysis Results", columns=3, height="auto")
    
    # Update preview when image is uploaded
    inp.change(fn=show_preview, inputs=inp, outputs=preview)
    run.click(process, inputs=inp, outputs=gallery)

if __name__ == "__main__":
    demo.launch()