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