|
|
import streamlit as st |
|
|
from streamlit_webrtc import webrtc_streamer, VideoTransformerBase |
|
|
from ultralytics import YOLO |
|
|
import av |
|
|
from PIL import Image |
|
|
|
|
|
|
|
|
model = YOLO('yolov8_background1k_best.pt') |
|
|
|
|
|
|
|
|
st.title("Gun/Arms Detection 馃殌") |
|
|
|
|
|
|
|
|
CONFIDENCE_THRESHOLD = 0.30 |
|
|
|
|
|
|
|
|
def detect_objects(image): |
|
|
results = model(image, conf=CONFIDENCE_THRESHOLD) |
|
|
annotated_image = results[0].plot() |
|
|
return annotated_image, len(results[0].boxes) |
|
|
|
|
|
|
|
|
class YOLOVideoProcessor(VideoTransformerBase): |
|
|
def __init__(self): |
|
|
self.model = model |
|
|
|
|
|
def transform(self, frame): |
|
|
image = frame.to_ndarray(format="bgr24") |
|
|
results = self.model(image, conf=CONFIDENCE_THRESHOLD) |
|
|
annotated_image = results[0].plot() |
|
|
return av.VideoFrame.from_ndarray(annotated_image, format="bgr24") |
|
|
|
|
|
|
|
|
st.sidebar.title("Sube una imagen o usa la webcam") |
|
|
|
|
|
|
|
|
uploaded_file = st.sidebar.file_uploader("Sube una imagen (JPG/PNG):", type=["jpg", "png", "jpeg"]) |
|
|
|
|
|
if uploaded_file: |
|
|
image = Image.open(uploaded_file) |
|
|
st.image(image, caption='Imagen subida', use_column_width=True) |
|
|
|
|
|
if st.button('Detectar objetos en la imagen'): |
|
|
annotated_image, num_boxes = detect_objects(image) |
|
|
st.image(annotated_image, caption=f"{num_boxes} objetos detectados", use_column_width=True) |
|
|
|
|
|
|
|
|
st.sidebar.write("O usa la webcam para detecci贸n en tiempo real:") |
|
|
use_webcam = st.sidebar.checkbox("Usar Webcam") |
|
|
|
|
|
if use_webcam: |
|
|
webrtc_streamer(key="object-detection", video_processor_factory=YOLOVideoProcessor) |
|
|
|