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