Изучение YOLOv8: прямая потоковая передача для обнаружения видеообъектов

Если вы знакомы с компьютерным зрением и глубоким обучением, вы, вероятно, сталкивались с YOLO («Вы смотрите только один раз») — популярным алгоритмом обнаружения объектов. YOLOv8 выводит концепцию YOLO на новый уровень, предлагая повышенную точность и более высокую скорость вывода. В этой статье мы углубимся в возможности прямой потоковой передачи YOLOv8 для обнаружения видеообъектов и рассмотрим различные методы для этого.

Метод 1: интеграция OpenCV и YOLOv8
OpenCV — это мощная библиотека компьютерного зрения, предоставляющая различные инструменты и функции. Объединив YOLOv8 с OpenCV, мы можем добиться обнаружения видеообъектов в реальном времени. Вот фрагмент кода, который поможет вам начать:

import cv2
# Load YOLOv8 weights and configuration
net = cv2.dnn.readNetFromDarknet('yolov8.cfg', 'yolov8.weights')
# Load video stream
video = cv2.VideoCapture('video.mp4')
while True:
    ret, frame = video.read()
    # Preprocess the frame
    blob = cv2.dnn.blobFromImage(frame, 1/255, (416, 416), swapRB=True, crop=False)
    net.setInput(blob)
    # Perform object detection
    detections = net.forward()
    # Process the detections
    # ...
    # Display the results
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) == 27:  # Press Esc to exit
        break
video.release()
cv2.destroyAllWindows()

Метод 2: использование DeepStream SDK
NVIDIA DeepStream SDK — еще один мощный инструмент для видеоаналитики в реальном времени. Он обеспечивает оптимизированные конвейеры для обработки видео, включая обнаружение объектов. YOLOv8 можно интегрировать с DeepStream SDK, чтобы обеспечить прямую потоковую передачу для обнаружения видеообъектов. Вот пример использования DeepStream с YOLOv8:

# Import necessary libraries
from deepstream import get_deepstream_detector
# Define the YOLOv8 model
yolov8 = get_deepstream_detector('yolov8')
# Create DeepStream pipeline
pipeline = deepstream_pipeline()
# Add YOLOv8 component to the pipeline
pipeline.add_component(yolov8)
# Run the pipeline
pipeline.run()

Метод 3: интеграция TensorFlow и YOLOv8
Если вы предпочитаете работать с TensorFlow, вы можете интегрировать YOLOv8 с TensorFlow для обнаружения видеообъектов. TensorFlow предоставляет API высокого уровня под названием TensorFlow Object Detection API, который упрощает процесс. Вот пример:

import tensorflow as tf
from object_detection.utils import label_map_util
from object_detection.utils import visualization_utils as viz_utils
# Load YOLOv8 model
model = tf.saved_model.load('yolov8')
# Load label map
label_map = label_map_util.load_labelmap('label_map.pbtxt')
categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=90,
                                                            use_display_name=True)
category_index = label_map_util.create_category_index(categories)
# Load video stream
video = cv2.VideoCapture('video.mp4')
while True:
    ret, frame = video.read()
    # Perform object detection
    input_tensor = tf.convert_to_tensor(frame)
    input_tensor = input_tensor[tf.newaxis, ...]
    detections = model(input_tensor)
    # Process the detections
    # ...
    # Display the results
    viz_utils.visualize_boxes_and_labels_on_image_array(
        frame,
        detections['detection_boxes'][0].numpy(),
        detections['detection_classes'][0].numpy().astype(int),
        detections['detection_scores'][0].numpy(),
        category_index,
        use_normalized_coordinates=True,
        max_boxes_to_draw=200,
        min_score_thresh=0.3,
        agnostic_mode=False)
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) == 27:  # Press Esc to exit
        break
video.release()
cv2.destroyAllWindows()

В этой статье мы рассмотрели несколько методов достижения прямой потоковой передачи с помощью YOLOv8 для обнаружения видеообъектов. Мы рассмотрели интеграцию с OpenCV, NVIDIA DeepStream SDK и TensorFlow. Каждый метод предлагает свои преимущества и гибкость, поэтому выберите тот, который лучше всего соответствует вашим требованиям. Благодаря возможностям YOLOv8 и этим вариантам интеграции вы сможете эффективно обнаруживать видеообъекты в реальном времени.