Spaces:
Runtime error
Runtime error
import streamlit as st | |
import numpy as np | |
import cv2 | |
from ultralytics import YOLO | |
import supervision as sv | |
import time | |
model = YOLO("yolov8x.pt") | |
def callback(x: np.ndarray) -> sv.Detections: | |
result = model(x, verbose=False, conf=0.25)[0] | |
return sv.Detections.from_ultralytics(result) | |
def main(): | |
st.title("Small Object Detection with SAHI") | |
st.write("Slicing Aided Hyper Inference (SAHI) implementaion with Supervsion for small object detection") | |
example_image_loaded = st.checkbox("Load example image") | |
uploaded_image = None | |
if example_image_loaded: | |
image = cv2.imread("example-image.jpg") | |
else: | |
uploaded_image = st.file_uploader("Upload an image", type=["jpg", "png", "jpeg"]) | |
if uploaded_image is not None: | |
image = cv2.imdecode(np.fromstring(uploaded_image.read(), np.uint8), 1) | |
if uploaded_image is not None or example_image_loaded: | |
with st.spinner("Loading..."): | |
start_time_sahi = time.time() | |
slicer = sv.InferenceSlicer(callback=callback) | |
sliced_detections = slicer(image=image) | |
end_time_sahi = time.time() | |
start_time_yolo = time.time() | |
yolo_results = model(image, verbose=False, conf=0.25) | |
end_time_yolo = time.time() | |
st.header("Original Image") | |
st.image(image, channels="BGR") | |
st.header("SAHI-Processed Image") | |
sliced_image = sv.BoxAnnotator().annotate(image.copy(), detections=sliced_detections) | |
st.image(sliced_image, channels="BGR") | |
st.header("YOLO-Detected Image (Without SAHI)") | |
yolo_image = sv.BoxAnnotator().annotate(image.copy(), detections=sv.Detections.from_ultralytics(yolo_results[0])) | |
st.image(yolo_image, channels="BGR") | |
st.subheader("Method Comparison") | |
st.write("SAHI Inference Time:", round(end_time_sahi - start_time_sahi, 2), "seconds") | |
st.write("YOLOv8 Inference Time:", round(end_time_yolo - start_time_yolo, 2), "seconds") | |
st.write("SAHI Detection Count:", len(sliced_detections)) | |
st.write("YOLOv8 Detection Count:", len(yolo_results[0])) | |
if __name__ == "__main__": | |
main() |