import streamlit as st import sahi.utils.file import sahi.utils.mmdet from sahi import AutoDetectionModel from PIL import Image import random from utils import sahi_mmdet_inference from streamlit_image_comparison import image_comparison MMDET_YOLOX_TINY_MODEL_URL = "https://huggingface.co/fcakyon/mmdet-yolox-tiny/resolve/main/yolox_tiny_8x8_300e_coco_20211124_171234-b4047906.pth" MMDET_YOLOX_TINY_MODEL_PATH = "yolox.pt" MMDET_YOLOX_TINY_CONFIG_URL = "https://huggingface.co/fcakyon/mmdet-yolox-tiny/raw/main/yolox_tiny_8x8_300e_coco.py" MMDET_YOLOX_TINY_CONFIG_PATH = "config.py" IMAGE_TO_URL = { "apple_tree.jpg": "https://user-images.githubusercontent.com/34196005/142730935-2ace3999-a47b-49bb-83e0-2bdd509f1c90.jpg", "highway.jpg": "https://user-images.githubusercontent.com/34196005/142730936-1b397756-52e5-43be-a949-42ec0134d5d8.jpg", "highway2.jpg": "https://user-images.githubusercontent.com/34196005/142742871-bf485f84-0355-43a3-be86-96b44e63c3a2.jpg", "highway3.jpg": "https://user-images.githubusercontent.com/34196005/142742872-1fefcc4d-d7e6-4c43-bbb7-6b5982f7e4ba.jpg", "highway2-yolox.jpg": "https://user-images.githubusercontent.com/34196005/143309873-c0c1f31c-c42e-4a36-834e-da0a2336bb19.jpg", "highway2-sahi.jpg": "https://user-images.githubusercontent.com/34196005/143309867-42841f5a-9181-4d22-b570-65f90f2da231.jpg", } @st.cache(allow_output_mutation=True, show_spinner=False) def download_comparison_images(): sahi.utils.file.download_from_url( "https://user-images.githubusercontent.com/34196005/143309873-c0c1f31c-c42e-4a36-834e-da0a2336bb19.jpg", "highway2-yolox.jpg", ) sahi.utils.file.download_from_url( "https://user-images.githubusercontent.com/34196005/143309867-42841f5a-9181-4d22-b570-65f90f2da231.jpg", "highway2-sahi.jpg", ) @st.cache(allow_output_mutation=True, show_spinner=False) def get_model(): sahi.utils.file.download_from_url( MMDET_YOLOX_TINY_MODEL_URL, MMDET_YOLOX_TINY_MODEL_PATH, ) sahi.utils.file.download_from_url( MMDET_YOLOX_TINY_CONFIG_URL, MMDET_YOLOX_TINY_CONFIG_PATH, ) detection_model = AutoDetectionModel.from_pretrained( model_type='mmdet', model_path=MMDET_YOLOX_TINY_MODEL_PATH, config_path=MMDET_YOLOX_TINY_CONFIG_PATH, confidence_threshold=0.5, device="cpu", ) return detection_model class SpinnerTexts: def __init__(self): self.ind_history_list = [] self.text_list = [ "Meanwhile check out [MMDetection Colab notebook of SAHI](https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_mmdetection.ipynb)!", "Meanwhile check out [YOLOv5 Colab notebook of SAHI](https://colab.research.google.com/github/obss/sahi/blob/main/demo/inference_for_yolov5.ipynb)!", "Meanwhile check out [aerial object detection with SAHI](https://blog.ml6.eu/how-to-detect-small-objects-in-very-large-images-70234bab0f98?gi=b434299595d4)!", "Meanwhile check out [COCO Utilities of SAHI](https://github.com/obss/sahi/blob/main/docs/COCO.md)!", "Meanwhile check out [FiftyOne utilities of SAHI](https://github.com/obss/sahi#fiftyone-utilities)!", "Meanwhile [give a Github star to SAHI](https://github.com/obss/sahi/stargazers)!", "Meanwhile see [how easy is to install SAHI](https://github.com/obss/sahi#getting-started)!", "Meanwhile check out [Medium blogpost of SAHI](https://medium.com/codable/sahi-a-vision-library-for-performing-sliced-inference-on-large-images-small-objects-c8b086af3b80)!", "Meanwhile try out [YOLOv5 HF Spaces demo of SAHI](https://huggingface.co/spaces/fcakyon/sahi-yolov5)!", ] def _store(self, ind): if len(self.ind_history_list) == 6: self.ind_history_list.pop(0) self.ind_history_list.append(ind) def get(self): ind = 0 while ind in self.ind_history_list: ind = random.randint(0, len(self.text_list) - 1) self._store(ind) return self.text_list[ind] st.set_page_config( page_title="Small Object Detection with SAHI + YOLOX", page_icon="🚀", layout="centered", initial_sidebar_state="auto", ) download_comparison_images() if "last_spinner_texts" not in st.session_state: st.session_state["last_spinner_texts"] = SpinnerTexts() if "output_1" not in st.session_state: st.session_state["output_1"] = Image.open("highway2-yolox.jpg") if "output_2" not in st.session_state: st.session_state["output_2"] = Image.open("highway2-sahi.jpg") st.markdown( """
SAHI Github | YOLOX Github | SAHI+YOLOv5 Demo
Follow me for more!
1. Upload or select the input image 🖼️
2. (Optional) Set SAHI parameters ✔️
3. Press to "🚀 Perform Prediction"
4. Enjoy sliding image comparison 🔥
prepared with streamlit-image-comparison
""", unsafe_allow_html=True, )