Compare commits
No commits in common. 'b2542d3f364328d73b1f4ac9df9207069dfa8e5b' and '12ce05c52b65b9169de6c33ff78a46903eb58acb' have entirely different histories.
b2542d3f36
...
12ce05c52b
10 changed files with 0 additions and 222 deletions
@ -1,3 +0,0 @@ |
|||||||
# Default ignored files |
|
||||||
/shelf/ |
|
||||||
/workspace.xml |
|
@ -1,10 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<module type="PYTHON_MODULE" version="4"> |
|
||||||
<component name="NewModuleRootManager"> |
|
||||||
<content url="file://$MODULE_DIR$"> |
|
||||||
<excludeFolder url="file://$MODULE_DIR$/.venv" /> |
|
||||||
</content> |
|
||||||
<orderEntry type="inheritedJdk" /> |
|
||||||
<orderEntry type="sourceFolder" forTests="false" /> |
|
||||||
</component> |
|
||||||
</module> |
|
@ -1,6 +0,0 @@ |
|||||||
<component name="InspectionProjectProfileManager"> |
|
||||||
<settings> |
|
||||||
<option name="USE_PROJECT_PROFILE" value="false" /> |
|
||||||
<version value="1.0" /> |
|
||||||
</settings> |
|
||||||
</component> |
|
@ -1,7 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<project version="4"> |
|
||||||
<component name="Black"> |
|
||||||
<option name="sdkName" value="Python 3.12 (YOLOv8)" /> |
|
||||||
</component> |
|
||||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.12 (YOLOv8)" project-jdk-type="Python SDK" /> |
|
||||||
</project> |
|
@ -1,8 +0,0 @@ |
|||||||
<?xml version="1.0" encoding="UTF-8"?> |
|
||||||
<project version="4"> |
|
||||||
<component name="ProjectModuleManager"> |
|
||||||
<modules> |
|
||||||
<module fileurl="file://$PROJECT_DIR$/.idea/YOLOv8.iml" filepath="$PROJECT_DIR$/.idea/YOLOv8.iml" /> |
|
||||||
</modules> |
|
||||||
</component> |
|
||||||
</project> |
|
@ -1,37 +0,0 @@ |
|||||||
import cv2 |
|
||||||
from ultralytics import YOLO |
|
||||||
|
|
||||||
# Загрузим YOLOv8 модель (если ты скачал .pt файл вручную, укажи путь) |
|
||||||
model = YOLO('yolov8n.pt') # автоматически скачается, если файла нет |
|
||||||
|
|
||||||
# Открываем веб-камеру |
|
||||||
cap = cv2.VideoCapture(0) |
|
||||||
|
|
||||||
while True: |
|
||||||
ret, frame = cap.read() |
|
||||||
if not ret: |
|
||||||
break |
|
||||||
|
|
||||||
# Детекция объектов |
|
||||||
results = model(frame)[0] |
|
||||||
|
|
||||||
for result in results.boxes: |
|
||||||
cls_id = int(result.cls[0]) |
|
||||||
conf = float(result.conf[0]) |
|
||||||
if model.names[cls_id] == 'person': |
|
||||||
x1, y1, x2, y2 = map(int, result.xyxy[0]) |
|
||||||
# Зелёная рамка |
|
||||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) |
|
||||||
# Текст |
|
||||||
label = f'{model.names[cls_id]} {conf:.2f}' |
|
||||||
cv2.putText(frame, label, (x1, y1 - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0,255,0), 1) |
|
||||||
|
|
||||||
# Показываем результат |
|
||||||
cv2.imshow("Detection", frame) |
|
||||||
|
|
||||||
# Выход — по клавише ESC |
|
||||||
if cv2.waitKey(1) & 0xFF == 27: |
|
||||||
break |
|
||||||
|
|
||||||
cap.release() |
|
||||||
cv2.destroyAllWindows() |
|
@ -1,99 +0,0 @@ |
|||||||
import cv2 |
|
||||||
import time |
|
||||||
import os |
|
||||||
from ultralytics import YOLO |
|
||||||
import logging |
|
||||||
|
|
||||||
# Отключаем вывод ненужных логов из ultralytics |
|
||||||
logging.getLogger('ultralytics').setLevel(logging.WARNING) |
|
||||||
|
|
||||||
# Загружаем модель YOLOv8 |
|
||||||
model = YOLO('yolov8n.pt') |
|
||||||
|
|
||||||
# Захват видео с камеры |
|
||||||
cap = cv2.VideoCapture(0) |
|
||||||
|
|
||||||
# Устанавливаем разрешение для захвата кадров |
|
||||||
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920) |
|
||||||
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080) |
|
||||||
|
|
||||||
# Получаем FPS из камеры |
|
||||||
fps = cap.get(cv2.CAP_PROP_FPS) |
|
||||||
print(f"FPS камеры: {fps}") |
|
||||||
|
|
||||||
# Установим FPS записи видео равным FPS камеры |
|
||||||
record_fps = fps # Записываем с FPS, который камера реально поддерживает |
|
||||||
|
|
||||||
# Время между кадрами (в секундах) |
|
||||||
frame_interval = 1 / record_fps |
|
||||||
|
|
||||||
recording = False |
|
||||||
record_start_time = 0 |
|
||||||
out = None |
|
||||||
last_frame_time = 0 |
|
||||||
|
|
||||||
# Путь для сохранения видео |
|
||||||
save_dir = r'C:\Users\ilyac\PycharmProjects\YOLOv8\.venv\video' |
|
||||||
os.makedirs(save_dir, exist_ok=True) # Создаст папку, если не существует |
|
||||||
|
|
||||||
# Используем кодек MJPG для записи видео с хорошим качеством |
|
||||||
fourcc = cv2.VideoWriter_fourcc(*'MJPG') |
|
||||||
|
|
||||||
while True: |
|
||||||
ret, frame = cap.read() |
|
||||||
if not ret: |
|
||||||
break |
|
||||||
|
|
||||||
# Применяем модель YOLOv8 для обнаружения объектов |
|
||||||
results = model(frame)[0] |
|
||||||
person_detected = False |
|
||||||
|
|
||||||
# Проходим по результатам и рисуем рамки вокруг людей |
|
||||||
for result in results.boxes: |
|
||||||
cls_id = int(result.cls[0]) |
|
||||||
if model.names[cls_id] == 'person': |
|
||||||
person_detected = True |
|
||||||
x1, y1, x2, y2 = map(int, result.xyxy[0]) |
|
||||||
# Уменьшаем ширину рамки на 20% |
|
||||||
width_shrink = int((x2 - x1) * 0.2) |
|
||||||
x1 += width_shrink |
|
||||||
x2 -= width_shrink |
|
||||||
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) |
|
||||||
|
|
||||||
# Начинаем запись, если человек был обнаружен |
|
||||||
if person_detected and not recording: |
|
||||||
print("🟢 Обнаружен человек — начинаю запись на 10 секунд") |
|
||||||
record_start_time = time.time() |
|
||||||
timestamp = time.strftime('%Y-%m-%d_%H-%M-%S') |
|
||||||
video_path = os.path.join(save_dir, f'person_{timestamp}.avi') |
|
||||||
out = cv2.VideoWriter(video_path, fourcc, record_fps, (frame.shape[1], frame.shape[0])) |
|
||||||
recording = True |
|
||||||
|
|
||||||
# Запись видео с интервалом времени |
|
||||||
if recording: |
|
||||||
current_time = time.time() |
|
||||||
|
|
||||||
# Пишем кадр в видео, если прошло достаточно времени |
|
||||||
if current_time - last_frame_time >= frame_interval: |
|
||||||
out.write(frame) |
|
||||||
last_frame_time = current_time |
|
||||||
|
|
||||||
# Проверяем, прошло ли 10 секунд |
|
||||||
if current_time - record_start_time >= 10: |
|
||||||
print("🔴 10 секунд прошло — запись завершена") |
|
||||||
recording = False |
|
||||||
out.release() |
|
||||||
out = None |
|
||||||
|
|
||||||
# Отображаем видео в окне |
|
||||||
cv2.imshow("Live", frame) |
|
||||||
|
|
||||||
# Выход по клавише ESC |
|
||||||
if cv2.waitKey(1) & 0xFF == 27: |
|
||||||
break |
|
||||||
|
|
||||||
# Завершаем работу с камерой и записывающим устройством |
|
||||||
cap.release() |
|
||||||
if out: |
|
||||||
out.release() |
|
||||||
cv2.destroyAllWindows() |
|
@ -1,33 +0,0 @@ |
|||||||
import cv2 |
|
||||||
import time |
|
||||||
|
|
||||||
# Открытие видеофайла |
|
||||||
cap = cv2.VideoCapture(r'C:\Users\ilyac\PycharmProjects\YOLOv8\.venv\video\person_2025-04-07_23-36-45.avi') # Укажите путь к вашему видеофайлу |
|
||||||
|
|
||||||
if not cap.isOpened(): |
|
||||||
print("Ошибка при открытии видео!") |
|
||||||
exit() |
|
||||||
|
|
||||||
# Получаем FPS видео (кадров в секунду) |
|
||||||
fps = cap.get(cv2.CAP_PROP_FPS) |
|
||||||
print(f"FPS видео: {fps}") |
|
||||||
|
|
||||||
while cap.isOpened(): |
|
||||||
ret, frame = cap.read() |
|
||||||
if not ret: |
|
||||||
break # Если не удалось прочитать кадр, завершаем |
|
||||||
|
|
||||||
# Отображаем кадр |
|
||||||
cv2.imshow('Video', frame) |
|
||||||
|
|
||||||
# Добавляем задержку между кадрами для замедления видео |
|
||||||
# Если FPS = 30, а мы хотим воспроизводить в 2 раза медленным темпом, ставим задержку 2x |
|
||||||
time.sleep(1 / fps * 4) # Умножаем на 2 для замедления воспроизведения |
|
||||||
|
|
||||||
# Выход из программы при нажатии клавиши 'ESC' |
|
||||||
if cv2.waitKey(1) & 0xFF == 27: |
|
||||||
break |
|
||||||
|
|
||||||
# Закрываем все окна и освобождаем ресурсы |
|
||||||
cap.release() |
|
||||||
cv2.destroyAllWindows() |
|
Binary file not shown.
Loading…
Reference in new issue