yaroslavski88's picture
Upload 24 files
3f67d40
from ultralytics import YOLO
import streamlit as st
import cv2
from PIL import Image
import tempfile
def _display_detected_frames(conf, model, st_frame, image):
res = model.predict(image, conf=conf)
res_plotted = res[0].plot()
st_frame.image(res_plotted,
caption='Detected Video',
channels="BGR",
use_column_width=True
)
@st.cache_resource
def load_model(model_path):
model = YOLO(model_path)
return model
def infer_uploaded_image(conf, model):
source_img = st.sidebar.file_uploader(
label="Выберите изображение...",
type=("jpg", "jpeg", "png", 'bmp', 'webp')
)
col1, col2 = st.columns(2)
with col1:
if source_img:
uploaded_image = Image.open(source_img)
st.image(
image=source_img,
caption="Загруженное изображение",
use_column_width=True
)
if source_img:
if st.button("Старт"):
with st.spinner("Запускается..."):
res = model.predict(uploaded_image,
conf=conf)
boxes = res[0].boxes
res_plotted = res[0].plot()[:, :, ::-1]
with col2:
st.image(res_plotted,
caption="Обработанное изображение",
use_column_width=True)
try:
with st.expander("Результаты обнаружения"):
for box in boxes:
st.write(box.xywh)
except Exception as ex:
st.write("Изображение не загружено")
st.write(ex)
def infer_uploaded_video(conf, model):
source_video = st.sidebar.file_uploader(
label="Выберите видео..."
)
if source_video:
st.video(source_video)
if source_video:
if st.button("Старт"):
with st.spinner("Запускается..."):
try:
tfile = tempfile.NamedTemporaryFile()
tfile.write(source_video.read())
vid_cap = cv2.VideoCapture(
tfile.name)
st_frame = st.empty()
while (vid_cap.isOpened()):
success, image = vid_cap.read()
if success:
_display_detected_frames(conf,
model,
st_frame,
image
)
else:
vid_cap.release()
break
except Exception as e:
st.error(f"Ошибка загрузки видео: {e}")
def infer_uploaded_webcam(conf, model):
try:
flag = st.button(
label="Остановить"
)
vid_cap = cv2.VideoCapture(0)
st_frame = st.empty()
while not flag:
success, image = vid_cap.read()
if success:
_display_detected_frames(
conf,
model,
st_frame,
image
)
else:
vid_cap.release()
break
except Exception as e:
st.error(f"Ошибка загрузки видео: {str(e)}")