classifySequence

Классифицируйте видео последовательность

Описание

пример

label = classifySequence(classifier) классифицирует видео последовательность с помощью видео классификатора classifier. Функция возвращает label, скаляр, категориальный, который задает классификацию последовательности видео или оптического потока. label одно из значений Classes свойство видео объекта классификатора.

[label,score] = classifySequence(classifier) дополнительно возвращает классификационную оценку, сопоставленную с меткой. Счет представляет доверие предсказанной метки класса и содержит значения между 0 и 1.

[___] = classifySequence(classifierObj,ExecutionEnvironment=env) задает аппаратные ресурсы для выполнения классификатора в дополнение к любой комбинации аргументов от предыдущих синтаксисов, как одна из этих опций:

  • "auto" — Устанавливает среду выполнения на графический процессор, при наличии. В противном случае функция устанавливает его на центральный процессор.

  • "gpu" — Устанавливает среду выполнения на графический процессор. Использование графического процессора требует Parallel Computing Toolbox™ и CUDA® активированный NVIDIA® Графический процессор. Для получения информации о поддерживаемом вычислите возможности, смотрите Поддержку графического процессора Релизом (Parallel Computing Toolbox).

  • "cpu" — Устанавливает среду выполнения на центральный процессор.

Примеры

свернуть все

В этом примере показано, как классифицировать видео последовательности на видеофайл с помощью Классификатора Видео SlowFast, предварительно обученного на кинетике 400 видео наборов данных распознавания активности. Чтобы узнать больше, как обучить видео сеть классификатора для вашего набора данных, посмотрите Распознавание Жеста с помощью Видео и Глубокого обучения.

Загрузите классификатор видео SlowFast

sf = slowFastVideoClassifier();

Видеоплеер Setup и видео средство чтения

Задайте имя видеофайла к потоковым видеокадрам.

videoFilename = "pushup.mp4";

Создайте VideoReader, чтобы считать видео.

reader = VideoReader(videoFilename);

Setup видеоплеер.

player = vision.VideoPlayer;

Классифицируйте видео последовательности

Задайте, как часто классификатор должен быть применен к входящим видеокадрам.

classifyInterval = 10;

Значение 10 эффективности времени выполнения балансов против эффективности классификации. Увеличьте это значение, чтобы улучшать производительность во время выполнения за счет недостающих действий из видеофайла.

Получите длину последовательности Классификатора Видео SlowFast. Классифицируйте только после получения, по крайней мере, sequenceLength количество кадров из видеофайла.

sequenceLength = sf.InputSize(4);

Считайте видеокадры с помощью hasFrame и readFrame функции VideoReader. Используя updateSequence функционируйте обновляют последовательность видео классификатора. Используя classifySequence функция классифицирует обновленную последовательность.

numFrames = 0;
text = "";

while hasFrame(reader)
    frame = readFrame(reader);
    numFrames = numFrames + 1;

    % Update the sequence with the next video frame.
    sf = updateSequence(sf,frame);

    % Classify the sequence only at every classifyInterval number of frames.
    if mod(numFrames, classifyInterval) == 0 && numFrames >= sequenceLength
        [label,score] = classifySequence(sf);
        text = string(label) + "; " + num2str(score, "%0.2f");
    end
    frame = insertText(frame,[30,30],text,'FontSize',24);
    step(player,frame);
end

В этом примере показано, как классифицировать потоковое видео от веб-камеры с помощью предварительно обученного Классификатора Видео SlowFast. Чтобы узнать больше, как обучить видео сеть классификатора для вашего набора данных, посмотрите Распознавание Жеста с помощью Видео и Глубокого обучения.

Загрузите предварительно обученный видео классификатор

Загрузите предварительно обученный классификатор видео SlowFast.

downloadFolder = fullfile(tempdir,"gesture");
zipFile = "slowFastPretrained_fourClasses.zip";
if ~isfile(fullfile(downloadFolder,zipFile))
    disp("Downloading the pretrained network...");    
    downloadURL = "https://ssd.mathworks.com/supportfiles/vision/data/" + zipFile;
    zipFile = fullfile(downloadFolder,zipFile);
    websave(zipFile,downloadURL);
    unzip(zipFile,downloadFolder);
end

Загрузите предварительно обученный классификатор видео SlowFast.

pretrainedDataFile = fullfile(downloadFolder,"slowFastPretrained_fourClasses.mat");
pretrained = load(pretrainedDataFile);
slowFastClassifier = pretrained.data.slowFast;

Отобразите имена метки класса предварительно обученного видео классификатора. Любой жест, такой как "хлопание" и "wavingHello" на веб-камере будет распознан Классификатором Видео SlowFast.

classes = slowFastClassifier.Classes
classes = 4×1 categorical
     clapping 
     noAction 
     somethingElse 
     wavingHello 

Setup веб-камера и видеоплеер

В этом примере объект веб-камеры используется, чтобы получить потоковое видео. Видеоплеер используется, чтобы отобразить потоковое видео наряду с предсказанным классом.

Создайте объект веб-камеры использование webcam функция.

cam = webcam;

Создайте Видеоплеер с помощью vision.VideoPlayer функция. Убедитесь, что поместили Видеоплеер в положение, где можно ясно видеть потоковое видео при выполнении классификации.

player = vision.VideoPlayer;

Классифицируйте потоковое видео веб-камеры

Задайте, как часто классификатор должен быть применен к входящим видеокадрам.

classifyInterval = 10;

Значение 10 эффективности времени выполнения балансов против эффективности классификации. Увеличьте это значение, чтобы улучшать производительность во время выполнения за счет недостающих жестов от живого видеопотока.

Получите длину последовательности Классификатора Видео SlowFast. Классифицируйте только после получения, по крайней мере, sequenceLength количество кадров от веб-камеры.

sequenceLength = slowFastClassifier.InputSize(4);

Задайте максимальное количество систем координат, чтобы получить в цикле с помощью maxNumFrames переменная. Убедитесь, что вы махаете одной из рук, чтобы распознать "wavingHello" пометьте, и хлопок с помощью обеих рук для классификатора, чтобы распознать "clapping" метка.

maxNumFrames = 280;

Получите снимок состояния веб-камеры в цикле. Обновите последовательность потокового видео классификатора с помощью updateSequence метод, и классифицирует последовательность потоковой передачи с помощью classifySequence метод.

numFrames = 0;
text = "";

while numFrames <= maxNumFrames
    frame = snapshot(cam);
    
    numFrames = numFrames + 1;
    slowFastClassifier = updateSequence(slowFastClassifier,frame);
    if mod(numFrames, classifyInterval) == 0 && numFrames >= sequenceLength
        [label,scores] = classifySequence(slowFastClassifier);
        if ~isempty(label)
            text = string(label) + "; " + num2str(max(scores), "%0.2f");
        end
    end
    frame = insertText(frame,[30,30],text,'FontSize',18);
    step(player,frame);
end

Входные параметры

свернуть все

Классификатор в виде r2plus1dVideoClassifier или slowFastVideoClassifier объект.

Выходные аргументы

свернуть все

Классификация последовательности видео или оптического потока, возвращенной как категориальный скаляр.

Классификационная оценка сопоставлена с меткой, возвращенной как скалярное значение между 0 и 1. Счет представляет доверие предсказанной метки класса.

Введенный в R2021b