Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from PIL import Image | |
| import numpy as np | |
| import torch | |
| import asyncio | |
| from detectron2.engine import DefaultPredictor | |
| from detectron2.config import get_cfg | |
| from detectron2 import model_zoo | |
| from detectron2.utils.visualizer import Visualizer | |
| from detectron2.data import MetadataCatalog | |
| # Fix event loop issue | |
| try: | |
| asyncio.get_running_loop() | |
| except RuntimeError: | |
| asyncio.set_event_loop(asyncio.new_event_loop()) | |
| # Title and uploader | |
| st.title("Detectron2 Object Detection") | |
| st.write("Upload an image to perform object detection") | |
| uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) | |
| def load_model(): | |
| cfg = get_cfg() | |
| cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml")) | |
| cfg.MODEL.ROI_HEADS.SCORE_THRESH_TEST = 0.5 | |
| cfg.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml") | |
| predictor = DefaultPredictor(cfg) | |
| return predictor | |
| def predict_fn(predictor, image): | |
| image_array = np.array(image)[:, :, :3] | |
| outputs = predictor(image_array) | |
| return outputs["instances"], image_array | |
| def visualize_predictions(image, instances): | |
| v = Visualizer(image[:, :, ::-1], MetadataCatalog.get("coco_2017_val"), scale=1.2) | |
| v = v.draw_instance_predictions(instances) | |
| result = v.get_image() | |
| return result[:, :, ::-1] | |
| if uploaded_file is not None: | |
| image = Image.open(uploaded_file) | |
| st.image(image, caption="Uploaded Image", use_column_width=True) | |
| st.write("Processing...") | |
| predictor = load_model() | |
| instances, image_array = predict_fn(predictor, image) | |
| result_image = visualize_predictions(image_array, instances) | |
| st.image(result_image, caption="Detected Objects", use_column_width=True) | |