Извлеките обучающие данные для видео классификации

В этом примере показано, как извлечь помеченные сцены из набора видео, где каждое видео содержит несколько меток сцены. Извлеченные сцены и их связанные метки могут использоваться для обучения или проверки видео классификатора. Для получения дополнительной информации о метках сцены смотрите Начало работы с Video Labeler.

Загрузите учебные видео и метки сцены

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

downloadFolder = fullfile(tempdir,'sceneLabels');
if ~isfolder(downloadFolder)
    mkdir(downloadFolder);
end

Загрузите обучающие данные с помощью websave и разархивируйте содержимое к downloadFolder.

downloadURL = "https://ssd.mathworks.com/supportfiles/vision/data/videoClipsAndSceneLabels.zip";

filename = fullfile(downloadFolder,"videoClipsAndSceneLabels.zip");
if ~exist(filename,'file')
    disp("Downloading the video clips and the corresponding scene labels to " + downloadFolder);
    websave(filename,downloadURL);    
end

% Unzip the contents to the download folder.
unzip(filename,downloadFolder);

Создайте groundTruth объекты представлять помеченные видеофайлы с помощью функции поддержки, createGroundTruthForVideoCollection, перечисленный в конце этого примера.

gTruth = createGroundTruthForVideoCollection(downloadFolder);

Соберите области значений времени видеоизображения и метки

Соберите все области значений времени сцены и соответствующие метки сцены с помощью sceneTimeRanges функция.

[timeRanges, sceneLabels] = sceneTimeRanges(gTruth);

Здесь timeRanges и sceneLabels массивы ячеек M-1, где M является количеством объектов основной истины. Каждый раз располагается, матрица длительности T-2, где T является количеством областей значений времени. Каждая строка матрицы соответствует области значений времени в достоверных данных, где метка сцены была применена, задана в форме [rangeStart, rangeEnd]. Например, первый объект основной истины, соответствующий видеофайлу video_0001.avi, содержит 4 сцены с, маркирует "noAction", "wavingHello", "clapping", и "somethingElse".

[~,name,ext] = fileparts(string(gTruth(1).DataSource.Source));
firstVideoFilename = name + ext
firstVideoFilename = 
"video_0001.avi"
firstTimeRange = timeRanges{1}
firstTimeRange = 4×2 duration
       15 sec   28.033 sec
      7.3 sec   15.033 sec
        0 sec   7.3333 sec
       28 sec   37.033 sec

firstSceneLabel = sceneLabels{1}
firstSceneLabel = 4×1 categorical
     noAction 
     wavingHello 
     clapping 
     somethingElse 

Запишите извлеченные видеоизображения

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

Выберите папку в папке загрузки, чтобы записать видеоизображения.

rootFolder = fullfile(downloadFolder,"videoScenes");

Видеофайлы записаны в папки, заданные folderNames входной параметр. Используйте имена меток сцены в качестве имен папок.

folderNames = sceneLabels;

Запишите видеоизображения в "videoScenes" папка.

filenames = writeVideoScenes(gTruth,timeRanges,rootFolder,folderNames);
[==================================================] 100%
Elapsed time: 00:01:47
Estimated time remaining: 00:00:00

Выход filenames массив ячеек M-1 символьных строк, который задает полный путь к сохраненным видеоизображениям в каждом объекте groundTruth.

Обратите внимание на то, что видеофайлы, соответствующие метке сцены, записаны в папки, названные меткой сцены. Например, видеоизображения, соответствующие метке "clapping" сцены записаны в папку "videoScenes/clapping", и видеоизображения, соответствующие метке "wavingHello" сцены записаны в папку "videoScenes/wavingHello".

Извлеченные видеоизображения могут теперь использоваться для обучения и проверки видео классификатора. Для получения дополнительной информации об использовании извлеченных данных для обучения видео классификатор посмотрите Распознавание Жеста с помощью Видео и Глубокого обучения. Для получения дополнительной информации об использовании извлеченных данных для оценки видео классификатора смотрите, Оценивают Видео Классификатор.

Вспомогательные Функции

createGroundTruthForVideoCollection

createGroundTruthForVideoCollection функция создает достоверные данные для данного набора видео и соответствующей информации о метке.

function gTruth = createGroundTruthForVideoCollection(downloadFolder)
labelDataFiles = dir(fullfile(downloadFolder,"*_labelData.mat"));
labelDataFiles = fullfile(downloadFolder,{labelDataFiles.name}');
numGtruth = numel(labelDataFiles);

%Load the label data information and create ground truth objects.
gTruth = groundTruth.empty(numGtruth,0);
for ii = 1:numGtruth
    ld = load(labelDataFiles{ii});
    videoFilename = fullfile(downloadFolder,ld.videoFilename);
    gds = groundTruthDataSource(videoFilename);
    gTruth(ii) = groundTruth(gds,ld.labelDefs,ld.labelData);
end
end
Для просмотра документации необходимо авторизоваться на сайте