В этом примере показано, как извлечь помеченные сцены из набора видео, где каждое видео содержит несколько меток сцены. Извлеченные сцены и их связанные метки могут использоваться для обучения или проверки видео классификатора. Для получения дополнительной информации о метках сцены смотрите Начало работы с 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".

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