yaroslavski88
commited on
Commit
•
3f67d40
1
Parent(s):
df51c30
Upload 24 files
Browse files- .gitattributes +1 -0
- README.md +99 -12
- app.py +81 -0
- config.py +57 -0
- imgs/image_input_demo.png +0 -0
- imgs/image_input_demo_1.png +0 -0
- imgs/video_input_demo.png +0 -0
- imgs/webcam_input_demo.png +3 -0
- pic_bed/Images_Object_detection_V1.png +0 -0
- pic_bed/banner-yolov8.png +0 -0
- requirements.txt +6 -0
- utils.py +116 -0
- weights/detection/DetLicPL_l.pt +3 -0
- weights/detection/DetLicPL_s.pt +3 -0
- weights/detection/VehDet.pt +3 -0
- weights/detection/yolov8l-seg.pt +3 -0
- weights/detection/yolov8l.pt +3 -0
- weights/detection/yolov8m-seg.pt +3 -0
- weights/detection/yolov8m.pt +3 -0
- weights/detection/yolov8n-seg.pt +3 -0
- weights/detection/yolov8n.pt +3 -0
- weights/detection/yolov8s-seg.pt +3 -0
- weights/detection/yolov8s.pt +3 -0
- weights/detection/yolov8x-seg.pt +3 -0
- weights/detection/yolov8x.pt +3 -0
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
imgs/webcam_input_demo.png filter=lfs diff=lfs merge=lfs -text
|
README.md
CHANGED
@@ -1,12 +1,99 @@
|
|
1 |
-
|
2 |
-
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
|
2 |
+
<div align="center">
|
3 |
+
|
4 |
+
# YOLOv8_Object_detection_v1.0_app
|
5 |
+
|
6 |
+
<p>
|
7 |
+
<a align="center" target="_blank">
|
8 |
+
<img width="50%" src="pic_bed/Images_Object_detection_V1.png"></a><br>
|
9 |
+
<a align="center" href="https://ultralytics.com/yolov8" target="_blank">
|
10 |
+
<img width="50%" src="pic_bed/banner-yolov8.png"></a>
|
11 |
+
</p>
|
12 |
+
|
13 |
+
<br>
|
14 |
+
|
15 |
+
<div>
|
16 |
+
<a href="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml"><img src="https://github.com/ultralytics/ultralytics/actions/workflows/ci.yaml/badge.svg" alt="Ultralytics CI"></a>
|
17 |
+
<a href="https://colab.research.google.com/drive/1shMJ1F6XbzQOBSlxvoEbnkgoJPngVLvs?usp=sharing"><img src="https://colab.research.google.com/assets/colab-badge.svg" alt="Open In Colab"></a>
|
18 |
+
</div>
|
19 |
+
<br>
|
20 |
+
</div>
|
21 |
+
|
22 |
+
## Введение / Introduction
|
23 |
+
### RUS:
|
24 |
+
- Этот репозиторий предоставляет удобный интерактивный интерфейс для [YOLOv8](https://github.com/ultralytics/ultralytics), и этот интерфейс создан на базе [Streamlit](https://github.com/streamlit/streamlit).<br>
|
25 |
+
- В таблицу ниже, помимо стандартных моделей, включены модели, обученные на основе датасетов с [Roboflow](https://universe.roboflow.com/):
|
26 |
+
- Определение автомобильных номеров - [Car plate detection Computer Vision Project](https://universe.roboflow.com/plate-detection-8sa0a/car-plate-detection-vbivf)
|
27 |
+
- Определение транспортных средств при разном времени суток и погодных условиях - [Smart city cars detection Computer Vision Project](https://universe.roboflow.com/simone-bernabe/smart-city-cars-detection)
|
28 |
+
### ENG:
|
29 |
+
- This repository supply a user-friendly interactive interface for [YOLOv8](https://github.com/ultralytics/ultralytics) and the interface is powered by [Streamlit](https://github.com/streamlit/streamlit)
|
30 |
+
- The table below, in addition to standard models, includes models trained based on datasets from [Roboflow](https://universe.roboflow.com/):
|
31 |
+
- Determination of license plates - [Car plate detection Computer Vision Project](https://universe.roboflow.com/plate-detection-8sa0a/car-plate-detection-vbivf)
|
32 |
+
- Identification vehicles under different times of day and weather conditions - [Smart city cars detection Computer Vision Project](https://universe.roboflow.com/simone-bernabe/smart-city-cars-detection)
|
33 |
+
|
34 |
+
## Функции / Features
|
35 |
+
### RUS:
|
36 |
+
- Доступные типы задачи: Обнаружение транспорта, обнаружение гос.номера автомобиля, сегментация, обнаружения объектов
|
37 |
+
- Доступные модели обнаружения/сегментации: `DetlicPl_s` `DetlicPl_l` `Veh_Det` `yolov8n`, `yolov8s`, `yolov8m`, `yolov8l`, `yolov8x` `yolov8n-seg`, `yolov8s-seg`, `yolov8m-seg`, `yolov8l-seg`, `yolov8x-seg`
|
38 |
+
- Несколько входных форматов: `Изображение`, `Видео`, `Вебкамера`
|
39 |
+
### ENG:
|
40 |
+
- Available task types: Vehicle detection, license plate detection, segmentation, object detection.
|
41 |
+
- Available detection/segmentation models: `DetlicPl_s` `DetlicPl_l` `Veh_Det` `yolov8n`, `yolov8s`, `yolov8m`, `yolov8l`, `yolov8x` `yolov8n-seg`, `yolov8s-seg`, `yolov8m-seg`, `yolov8l-seg`, `yolov8x-seg`
|
42 |
+
- Multiple input formats: Multiple input formats. `Image`, `Video`, `Webcam`
|
43 |
+
|
44 |
+
## Интерактивный интерфейс / Interactive Interface
|
45 |
+
### Интерфейс ввода изображения / Image Input Interface
|
46 |
+
![image_input_demo](https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app/blob/main/imgs/image_input_demo.png)<br>
|
47 |
+
![image_input_demo](https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app/blob/main/imgs/image_input_demo_1.png)
|
48 |
+
|
49 |
+
### Интерфейс ввода видео / Video Input Interface
|
50 |
+
![video_input_demo](https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app/blob/main/imgs/video_input_demo.png)
|
51 |
+
|
52 |
+
### Интерфейс ввода веб-камеры / Webcam Input Interface
|
53 |
+
![webcam_input_demo](https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app/blob/main/imgs/webcam_input_demo.png)
|
54 |
+
|
55 |
+
## Установка / Installation
|
56 |
+
### Скачать и распаковать репозиторий / Download and unzip repository
|
57 |
+
```commandline
|
58 |
+
https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app
|
59 |
+
```
|
60 |
+
### Открыть Терминал/ Open Terminal
|
61 |
+
```commandline
|
62 |
+
https://github.com/yaroslavski88/Yolov8_Object_detection_v1.0_app
|
63 |
+
### Установить пакеты / Install packages
|
64 |
+
```commandline
|
65 |
+
# yolov8 dependencies
|
66 |
+
pip install ultralytics
|
67 |
+
|
68 |
+
# Streamlit dependencies
|
69 |
+
pip install streamlit
|
70 |
+
```
|
71 |
+
### Загрузите предварительно обученные веса обнаружения YOLOv8 / Download Pre-trained YOLOv8 Detection Weights
|
72 |
+
- RUS: Создайте каталог с именем `weights`, создайте подкаталог с именем `detection` и сохраните загруженные веса обнаружения объектов YOLOv8 внутри этого каталога. Файлы весов можно скачать из таблиц ниже.<br>
|
73 |
+
- ENG: Create a directory named `weights` and create a subdirectory named `detection` and save the downloaded YOLOv8 object detection weights inside this directory. The weight files can be downloaded from the tables below.
|
74 |
+
|
75 |
+
| Обнаружение транспорта, обнаружение гос.номера автомобиля / Vehicle detection, license plate detection models|
|
76 |
+
| ------------------------------------------------------------------------------------------------------------ |
|
77 |
+
| [DetlicPl_s](https://drive.google.com/drive/folders/1rxSLLwHc9jeHqOM5EAUcq3JxwpczEm5Z?usp=sharing) |
|
78 |
+
| [DetlicPl_l](https://drive.google.com/drive/folders/1rxSLLwHc9jeHqOM5EAUcq3JxwpczEm5Z?usp=sharing) |
|
79 |
+
| [Veh_Det](https://drive.google.com/drive/folders/1rxSLLwHc9jeHqOM5EAUcq3JxwpczEm5Z?usp=sharing) |
|
80 |
+
| Модели Yolov8 (Обнаружение) / Models Yolov8 (Detection) |
|
81 |
+
| [YOLOv8n](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n.pt) |
|
82 |
+
| [YOLOv8s](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s.pt) |
|
83 |
+
| [YOLOv8m](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m.pt) |
|
84 |
+
| [YOLOv8l](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l.pt) |
|
85 |
+
| [YOLOv8x](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x.pt) |
|
86 |
+
| Модели Yolov8 (Сегментация) / Models Yolov8 (Segmentation) |
|
87 |
+
| [YOLOv8n](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8n-seg.pt) |
|
88 |
+
| [YOLOv8s](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8s-seg.pt) |
|
89 |
+
| [YOLOv8m](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8m-seg.pt) |
|
90 |
+
| [YOLOv8l](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8l-seg.pt) |
|
91 |
+
| [YOLOv8x](https://github.com/ultralytics/assets/releases/download/v0.0.0/yolov8x-seg.pt) |
|
92 |
+
|
93 |
+
## Запуск / Run
|
94 |
+
```commandline
|
95 |
+
streamlit run app.py
|
96 |
+
```
|
97 |
+
- RUS: Затем запустится сервер Streamlit и автоматически откроется в веб-браузере страница Streamlit по умолчанию.<br>
|
98 |
+
- ENG: Then will start the Streamlit server and open your web browser to the default Streamlit page automatically.
|
99 |
+
|
app.py
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pathlib import Path
|
2 |
+
from PIL import Image
|
3 |
+
import streamlit as st
|
4 |
+
|
5 |
+
import config
|
6 |
+
from utils import load_model, infer_uploaded_image, infer_uploaded_video, infer_uploaded_webcam
|
7 |
+
|
8 |
+
st.set_page_config(
|
9 |
+
page_title="Интерактивный интерфейс для YOLOv8",
|
10 |
+
page_icon="🤖",
|
11 |
+
layout="wide",
|
12 |
+
initial_sidebar_state="expanded"
|
13 |
+
)
|
14 |
+
|
15 |
+
# заголовок главной страницы
|
16 |
+
st.title("Интерактивный интерфейс для YOLOv8")
|
17 |
+
|
18 |
+
st.sidebar.header("Настройка модели DL")
|
19 |
+
|
20 |
+
# опции модели
|
21 |
+
task_type = st.sidebar.selectbox(
|
22 |
+
"Выберите задачу",
|
23 |
+
config.DETECTION_TASK_LIST
|
24 |
+
)
|
25 |
+
|
26 |
+
|
27 |
+
model_type = None
|
28 |
+
if task_type == "Обнаружение транспорта":
|
29 |
+
model_type = st.sidebar.selectbox(
|
30 |
+
"Выберите модель",
|
31 |
+
config.DETECTION_MODEL_CAR_LIST
|
32 |
+
)
|
33 |
+
elif task_type == "Обнаружение гос.номера автомобиля":
|
34 |
+
model_type = st.sidebar.selectbox(
|
35 |
+
"Выберите модель",
|
36 |
+
config.DETECTION_MODEL_GN_LIST
|
37 |
+
)
|
38 |
+
elif task_type == "Сегментация":
|
39 |
+
model_type = st.sidebar.selectbox(
|
40 |
+
"Выберите модель",
|
41 |
+
config.DETECTION_MODEL_SEG_LIST
|
42 |
+
)
|
43 |
+
elif task_type == "Обнаружение объектов":
|
44 |
+
model_type = st.sidebar.selectbox(
|
45 |
+
"Выберите модель",
|
46 |
+
config.DETECTION_MODEL_OTHER_LIST
|
47 |
+
)
|
48 |
+
else:
|
49 |
+
st.error("Другие функции пока не реализованы")
|
50 |
+
|
51 |
+
confidence = float(st.sidebar.slider(
|
52 |
+
"Выберите уверенность модели", 1, 100, 50)) / 100
|
53 |
+
|
54 |
+
model_path = ""
|
55 |
+
if model_type:
|
56 |
+
model_path = Path(config.DETECTION_MODEL_DIR, str(model_type))
|
57 |
+
else:
|
58 |
+
st.error("Пожалуйста, выберите модель на боковой панели")
|
59 |
+
|
60 |
+
# загрузка обученной модели
|
61 |
+
try:
|
62 |
+
model = load_model(model_path)
|
63 |
+
except Exception as e:
|
64 |
+
st.error(f"Не удалось загрузить модель. Пожалуйста, проверьте указанный путь: {model_path}")
|
65 |
+
|
66 |
+
# Настройка изображения/видео
|
67 |
+
st.sidebar.header("Настройка изображения/видео")
|
68 |
+
source_selectbox = st.sidebar.selectbox(
|
69 |
+
"Выберите источник",
|
70 |
+
config.SOURCES_LIST
|
71 |
+
)
|
72 |
+
|
73 |
+
source_img = None
|
74 |
+
if source_selectbox == config.SOURCES_LIST[0]: # Image
|
75 |
+
infer_uploaded_image(confidence, model)
|
76 |
+
elif source_selectbox == config.SOURCES_LIST[1]: # Video
|
77 |
+
infer_uploaded_video(confidence, model)
|
78 |
+
elif source_selectbox == config.SOURCES_LIST[2]: # Webcam
|
79 |
+
infer_uploaded_webcam(confidence, model)
|
80 |
+
else:
|
81 |
+
st.error("Выберите источник.")
|
config.py
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from pathlib import Path
|
2 |
+
import sys
|
3 |
+
|
4 |
+
file_path = Path(__file__).resolve()
|
5 |
+
|
6 |
+
root_path = file_path.parent
|
7 |
+
|
8 |
+
if root_path not in sys.path:
|
9 |
+
sys.path.append(str(root_path))
|
10 |
+
|
11 |
+
ROOT = root_path.relative_to(Path.cwd())
|
12 |
+
|
13 |
+
|
14 |
+
SOURCES_LIST = ["Изображение", "Видео", "Вебкамера"]
|
15 |
+
|
16 |
+
DETECTION_MODEL_DIR = ROOT / 'weights' / 'detection'
|
17 |
+
DetLicPL_s = DETECTION_MODEL_DIR / "DetLicPL_s.pt"
|
18 |
+
DetLicPL_l = DETECTION_MODEL_DIR / "DetLicPL_l.pt"
|
19 |
+
VehDet = DETECTION_MODEL_DIR / "VehDet.pt"
|
20 |
+
YOLOv8n = DETECTION_MODEL_DIR / "yolov8n.pt"
|
21 |
+
YOLOv8s = DETECTION_MODEL_DIR / "yolov8s.pt"
|
22 |
+
YOLOv8m = DETECTION_MODEL_DIR / "yolov8m.pt"
|
23 |
+
YOLOv8l = DETECTION_MODEL_DIR / "yolov8l.pt"
|
24 |
+
YOLOv8x = DETECTION_MODEL_DIR / "yolov8x.pt"
|
25 |
+
YOLOv8n_seg = DETECTION_MODEL_DIR / "yolov8n-seg.pt"
|
26 |
+
YOLOv8s_seg = DETECTION_MODEL_DIR / "yolov8s-seg.pt"
|
27 |
+
YOLOv8m_seg = DETECTION_MODEL_DIR / "yolov8m-seg.pt"
|
28 |
+
YOLOv8l_seg = DETECTION_MODEL_DIR / "yolov8l-seg.pt"
|
29 |
+
YOLOv8x_seg = DETECTION_MODEL_DIR / "yolov8x-seg.pt"
|
30 |
+
|
31 |
+
DETECTION_MODEL_CAR_LIST = [
|
32 |
+
"VehDet.pt"]
|
33 |
+
|
34 |
+
DETECTION_MODEL_GN_LIST = [
|
35 |
+
"DetLicPL_s.pt",
|
36 |
+
"DetLicPL_l.pt"]
|
37 |
+
|
38 |
+
DETECTION_MODEL_SEG_LIST = [
|
39 |
+
"yolov8n-seg.pt",
|
40 |
+
"yolov8s-seg.pt",
|
41 |
+
"yolov8m-seg.pt",
|
42 |
+
"yolov8l-seg.pt",
|
43 |
+
"yolov8x-seg.pt"]
|
44 |
+
|
45 |
+
DETECTION_MODEL_OTHER_LIST = [
|
46 |
+
"yolov8n.pt",
|
47 |
+
"yolov8s.pt",
|
48 |
+
"yolov8m.pt",
|
49 |
+
"yolov8l.pt",
|
50 |
+
"yolov8x.pt"]
|
51 |
+
|
52 |
+
DETECTION_TASK_LIST = [
|
53 |
+
"Обнаружение транспорта",
|
54 |
+
"Обнаружение гос.номера автомобиля",
|
55 |
+
"Сегментация",
|
56 |
+
"Обнаружение объектов"]
|
57 |
+
|
imgs/image_input_demo.png
ADDED
imgs/image_input_demo_1.png
ADDED
imgs/video_input_demo.png
ADDED
imgs/webcam_input_demo.png
ADDED
Git LFS Details
|
pic_bed/Images_Object_detection_V1.png
ADDED
pic_bed/banner-yolov8.png
ADDED
requirements.txt
ADDED
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
streamlit==1.28.0
|
2 |
+
ultralytics==8.0.202
|
3 |
+
|
4 |
+
opencv-python==4.8.1.78
|
5 |
+
# opencv-python-headless==4.8.1.78
|
6 |
+
Pillow==10.1.0
|
utils.py
ADDED
@@ -0,0 +1,116 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
from ultralytics import YOLO
|
2 |
+
import streamlit as st
|
3 |
+
import cv2
|
4 |
+
from PIL import Image
|
5 |
+
import tempfile
|
6 |
+
|
7 |
+
def _display_detected_frames(conf, model, st_frame, image):
|
8 |
+
|
9 |
+
res = model.predict(image, conf=conf)
|
10 |
+
|
11 |
+
res_plotted = res[0].plot()
|
12 |
+
st_frame.image(res_plotted,
|
13 |
+
caption='Detected Video',
|
14 |
+
channels="BGR",
|
15 |
+
use_column_width=True
|
16 |
+
)
|
17 |
+
|
18 |
+
@st.cache_resource
|
19 |
+
def load_model(model_path):
|
20 |
+
model = YOLO(model_path)
|
21 |
+
return model
|
22 |
+
|
23 |
+
|
24 |
+
def infer_uploaded_image(conf, model):
|
25 |
+
source_img = st.sidebar.file_uploader(
|
26 |
+
label="Выберите изображение...",
|
27 |
+
type=("jpg", "jpeg", "png", 'bmp', 'webp')
|
28 |
+
)
|
29 |
+
|
30 |
+
col1, col2 = st.columns(2)
|
31 |
+
|
32 |
+
with col1:
|
33 |
+
if source_img:
|
34 |
+
uploaded_image = Image.open(source_img)
|
35 |
+
st.image(
|
36 |
+
image=source_img,
|
37 |
+
caption="Загруженное изображение",
|
38 |
+
use_column_width=True
|
39 |
+
)
|
40 |
+
|
41 |
+
if source_img:
|
42 |
+
if st.button("Старт"):
|
43 |
+
with st.spinner("Запускается..."):
|
44 |
+
res = model.predict(uploaded_image,
|
45 |
+
conf=conf)
|
46 |
+
boxes = res[0].boxes
|
47 |
+
res_plotted = res[0].plot()[:, :, ::-1]
|
48 |
+
|
49 |
+
with col2:
|
50 |
+
st.image(res_plotted,
|
51 |
+
caption="Обработанное изображение",
|
52 |
+
use_column_width=True)
|
53 |
+
try:
|
54 |
+
with st.expander("Результаты обнаружения"):
|
55 |
+
for box in boxes:
|
56 |
+
st.write(box.xywh)
|
57 |
+
except Exception as ex:
|
58 |
+
st.write("Изображение не загружено")
|
59 |
+
st.write(ex)
|
60 |
+
|
61 |
+
|
62 |
+
def infer_uploaded_video(conf, model):
|
63 |
+
|
64 |
+
source_video = st.sidebar.file_uploader(
|
65 |
+
label="Выберите видео..."
|
66 |
+
)
|
67 |
+
|
68 |
+
if source_video:
|
69 |
+
st.video(source_video)
|
70 |
+
|
71 |
+
if source_video:
|
72 |
+
if st.button("Старт"):
|
73 |
+
with st.spinner("Запускается..."):
|
74 |
+
try:
|
75 |
+
tfile = tempfile.NamedTemporaryFile()
|
76 |
+
tfile.write(source_video.read())
|
77 |
+
vid_cap = cv2.VideoCapture(
|
78 |
+
tfile.name)
|
79 |
+
st_frame = st.empty()
|
80 |
+
while (vid_cap.isOpened()):
|
81 |
+
success, image = vid_cap.read()
|
82 |
+
if success:
|
83 |
+
_display_detected_frames(conf,
|
84 |
+
model,
|
85 |
+
st_frame,
|
86 |
+
image
|
87 |
+
)
|
88 |
+
else:
|
89 |
+
vid_cap.release()
|
90 |
+
break
|
91 |
+
except Exception as e:
|
92 |
+
st.error(f"Ошибка загрузки видео: {e}")
|
93 |
+
|
94 |
+
|
95 |
+
def infer_uploaded_webcam(conf, model):
|
96 |
+
|
97 |
+
try:
|
98 |
+
flag = st.button(
|
99 |
+
label="Остановить"
|
100 |
+
)
|
101 |
+
vid_cap = cv2.VideoCapture(0)
|
102 |
+
st_frame = st.empty()
|
103 |
+
while not flag:
|
104 |
+
success, image = vid_cap.read()
|
105 |
+
if success:
|
106 |
+
_display_detected_frames(
|
107 |
+
conf,
|
108 |
+
model,
|
109 |
+
st_frame,
|
110 |
+
image
|
111 |
+
)
|
112 |
+
else:
|
113 |
+
vid_cap.release()
|
114 |
+
break
|
115 |
+
except Exception as e:
|
116 |
+
st.error(f"Ошибка загрузки видео: {str(e)}")
|
weights/detection/DetLicPL_l.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:a892f06265665e955a46e9f49abf270eea4a8c25093ae2d24543d6919d8676d9
|
3 |
+
size 87670451
|
weights/detection/DetLicPL_s.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6a2b7770f243f33a7337eeedcc109661dfd518aaf2627db720e539888ff64492
|
3 |
+
size 22540707
|
weights/detection/VehDet.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:77518fbebfa269255c68b7da291dfcf38def1988c1f95e6ebd2da5c48bda3265
|
3 |
+
size 22543075
|
weights/detection/yolov8l-seg.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:dfa891dab47031c12ac82cb1b883af4ab9efbc732118cc04604bfbf107f9dfa8
|
3 |
+
size 92391859
|
weights/detection/yolov8l.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:18218ea4798da042d9862e6029ca9531adbd40ace19b6c9a75e2e28f1adf30cc
|
3 |
+
size 87769683
|
weights/detection/yolov8m-seg.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:f9fc740ca0824e14b44681d491dc601efa664ec6ecea9a870acf876053826448
|
3 |
+
size 54899779
|
weights/detection/yolov8m.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:6c25b0b63b1a433843f06d821a9ac1deb8d5805f74f0f38772c7308c5adc55a5
|
3 |
+
size 52117635
|
weights/detection/yolov8n-seg.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d39e867b2c3a5dbc1aa764411544b475cb14727bf6af1ec46c238f8bb1351ab9
|
3 |
+
size 7054355
|
weights/detection/yolov8n.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:31e20dde3def09e2cf938c7be6fe23d9150bbbe503982af13345706515f2ef95
|
3 |
+
size 6534387
|
weights/detection/yolov8s-seg.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c035c6c5f9c48ee962518ef648854c2cc5e60fa404fac443e17d306fdda16543
|
3 |
+
size 23897299
|
weights/detection/yolov8s.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:268e5bb54c640c96c3510224833bc2eeacab4135c6deb41502156e39986b562d
|
3 |
+
size 22573363
|
weights/detection/yolov8x-seg.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d63cbfa5764867c0066bedfa43cf2dcd90a412a1de44b2e238c43978a9d28ea6
|
3 |
+
size 144076467
|
weights/detection/yolov8x.pt
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:c4d5a3f000d771762f03fc8b57ebd0aae324aeaefdd6e68492a9c4470f2d1e8b
|
3 |
+
size 136867539
|