Использование Python для реализации моделей глубокого обучения: обработка видео и распознавание действий
Использование Python для реализации моделей глубокого обучения: обработка видео и распознавание действий

введение

Обработка видео и распознавание действий являются важными задачами компьютерного зрения и широко используются в системах наблюдения, умных домах, спортивном анализе и других областях. Используя Python и технологию глубокого обучения, мы можем создать простую систему распознавания действий. В этой статье рассказывается, как использовать Python для реализации обработки видео и распознавания действий, а также приводятся подробные примеры кода.

Необходимые инструменты

  • Python 3.x
  • TensorFlow или PyTorch (в этой статье в качестве примера используется TensorFlow)
  • OpenCV (для обработки видео)
  • Matplotlib (для визуализации данных) Шаг 1. Установите необходимые библиотеки. Сначала нам нужно установить необходимые библиотеки Python. Его можно установить с помощью следующей команды:
Язык кода:bash
копировать
pip install tensorflow opencv-python matplotlib

Шаг 2. Подготовьте данные

Мы будем использовать набор данных UCF101, который является широко используемым набором данных для распознавания действий. Вот код для загрузки и предварительной обработки данных:

Язык кода:python
кодКоличество запусков:0
копировать
import tensorflow as tf
import os
import cv2
import numpy as np

# Загрузите и разархивируйте набор данных UCF101.
url = "https://www.crcv.ucf.edu/data/UCF101/UCF101.rar"
data_dir = tf.keras.utils.get_file('UCF101', origin=url, untar=True)

# Определить функции загрузки и предварительной обработки видео.
def load_video(path, max_frames=0, resize=(224, 224)):
    cap = cv2.VideoCapture(path)
    frames = []
    try:
        while True:
            ret, frame = cap.read()
            if not ret:
                break
            frame = cv2.resize(frame, resize)
            frame = frame[:, :, [2, 1, 0]]  # BGR to RGB
            frames.append(frame)
            if max_frames and len(frames) == max_frames:
                break
    finally:
        cap.release()
    return np.array(frames)

# Пример: загрузить видео
video_path = os.path.join(data_dir, 'ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi')
video = load_video(video_path)
print(f"Video shape: {video.shape}")

Шаг 3. Постройте модель

Мы будем использовать предварительно обученную модель InceptionV3 в качестве экстрактора признаков и строить на ее основе модель распознавания действий. Ниже приведен код определения модели:

Язык кода:python
кодКоличество запусков:0
копировать
from tensorflow.keras.applications import InceptionV3
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D, TimeDistributed, LSTM

# Загрузите предварительно обученную модель InceptionV3.
base_model = InceptionV3(weights='imagenet', include_top=False)

# Постройте модель распознавания действий
model = Sequential([
    TimeDistributed(base_model, input_shape=(None, 224, 224, 3)),
    TimeDistributed(GlobalAveragePooling2D()),
    LSTM(64),
    Dense(101, activation='softmax')  # UCF101 имеет 101 категорию действий.
])

# Скомпилировать модель
model.compile(optimizer='adam', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

# Посмотреть структуру модели
model.summary()

Шаг 4. Обучите модель

Мы определим генератор данных и будем использовать его для обучения модели. Вот код для обучения модели:

Язык кода:python
кодКоличество запусков:0
копировать
from tensorflow.keras.utils import Sequence

class VideoDataGenerator(Sequence):
    def __init__(self, video_paths, labels, batch_size=8, max_frames=40, resize=(224, 224)):
        self.video_paths = video_paths
        self.labels = labels
        self.batch_size = batch_size
        self.max_frames = max_frames
        self.resize = resize

    def __len__(self):
        return len(self.video_paths) // self.batch_size

    def __getitem__(self, idx):
        batch_x = self.video_paths[idx * self.batch_size:(idx + 1) * self.batch_size]
        batch_y = self.labels[idx * self.batch_size:(idx + 1) * self.batch_size]
        return np.array([load_video(path, self.max_frames, self.resize) for path in batch_x]), np.array(batch_y)

# Пример: создание генератора данных
video_paths = [os.path.join(data_dir, 'ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi')] * 10
labels = [0] * 10  # Предположим, что метки всех видео равны 0.
train_generator = VideoDataGenerator(video_paths, labels)

# Модель обучения
model.fit(train_generator, epochs=10)

Шаг 5: Оцените модель

Мы можем оценить производительность модели, используя тестовые данные. Вот код для оценки модели:

Язык кода:python
кодКоличество запусков:0
копировать
# Пример: оценка модели
test_video_paths = [os.path.join(data_dir, 'ApplyEyeMakeup/v_ApplyEyeMakeup_g01_c01.avi')] * 2
test_labels = [0] * 2
test_generator = VideoDataGenerator(test_video_paths, test_labels)

loss, accuracy = model.evaluate(test_generator)
print(f"Test accuracy: {accuracy * 100:.2f}%")

Шаг 6: Визуализируйте результаты

Мы можем использовать Matplotlib для отображения результатов обработки видео и распознавания действий. Ниже приведен код для визуализации:

Язык кода:python
кодКоличество запусков:0
копировать
import matplotlib.pyplot as plt

# Визуализируйте видеокадры
def visualize_video(video):
    fig, axes = plt.subplots(1, len(video), figsize=(20, 5))
    for i, frame in enumerate(video):
        axes[i].imshow(frame)
        axes[i].axis('off')
    plt.show()

# Пример:Визуализируйте видеокадры
visualize_video(video[:5])

в заключение

С помощью описанных выше шагов мы реализовали простую систему обработки видео и распознавания действий. Эта система может загружать видеоданные, извлекать функции и определять действия в видео. Надеюсь, этот урок поможет вам!

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose