Spaces:
Sleeping
Sleeping
import gradio as gr | |
import cv2 | |
from ultralytics import YOLO | |
# Загружаем модель YOLO | |
model_path = "sss.pt" # Замените на путь к вашей модели | |
model = YOLO(model_path) | |
def process_frame(frame): | |
# Выполняем обнаружение объектов | |
results = model(frame, stream=True) # Используем stream=True для повышения скорости | |
# Рисуем боксы и метки на кадре | |
for result in results: | |
for box in result.boxes.data.tolist(): | |
x1, y1, x2, y2, confidence, class_id = box | |
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) | |
label = model.names[int(class_id)] # Убираем уверенность, оставляем только имя объекта | |
# Рисуем прямоугольник вокруг объекта | |
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2) | |
# Добавляем текст | |
cv2.putText(frame, label, (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2) | |
return frame | |
def capture_video(): | |
# Открываем видеопоток с камеры | |
cap = cv2.VideoCapture(0) | |
if not cap.isOpened(): | |
print("Не удалось открыть камеру") | |
return | |
while True: | |
ret, frame = cap.read() | |
if not ret: | |
break | |
# Обрабатываем кадр | |
processed_frame = process_frame(frame) | |
# Gradio ожидает изображение в формате NumPy, поэтому передаем его так | |
yield processed_frame | |
cap.release() | |
# Создаем интерфейс Gradio | |
iface = gr.Interface(fn=capture_video, | |
inputs=[], | |
outputs=gr.Image(type="numpy", label="Object Detection"), # Ожидаем NumPy массив | |
live=True) | |
# Запуск интерфейса | |
iface.launch() | |