Если вы знакомы с компьютерным зрением и глубоким обучением, вы, вероятно, сталкивались с 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 и этим вариантам интеграции вы сможете эффективно обнаруживать видеообъекты в реальном времени.