| import gradio as gr | |
| from src.pipeline.prediction_pipeline import PredictionPipeline | |
| import numpy as np | |
| from PIL import Image | |
| pipeline = PredictionPipeline() | |
| def predict_single(image): | |
| if image is None: | |
| return None, "No image detected!", "No image detected!" | |
| img = Image.fromarray(image) if isinstance(image, np.ndarray) else image | |
| result = pipeline.predict(img) | |
| annotated_img = pipeline.annotate(img, result) | |
| return annotated_img, result["category"], result["freshness"] | |
| with gr.Blocks() as demo: | |
| gr.Markdown("# Food Freshness Detection") | |
| with gr.Tab("Image Upload"): | |
| image = gr.Image(sources=["upload"], label="Upload an Image") | |
| out_img = gr.Image() | |
| cat = gr.Textbox(label="Category") | |
| fresh = gr.Textbox(label="Freshness") | |
| btn = gr.Button("Predict on Image") | |
| btn.click(predict_single, inputs=image, outputs=[out_img, cat, fresh]) | |
| with gr.Tab("Live Webcam"): | |
| webcam = gr.Image(sources=["webcam"], label="Webcam") | |
| out_img = gr.Image() | |
| cat = gr.Textbox(label="Category") | |
| fresh = gr.Textbox(label="Freshness") | |
| btn = gr.Button("Predict") | |
| btn.click(predict_single, inputs=webcam, outputs=[out_img, cat, fresh]) | |
| if __name__ == "__main__": | |
| demo.launch(server_name="0.0.0.0", server_port=7860) | |