В этом примере показано, как классифицировать потоковое видео от веб-камеры с помощью предварительно обученного Классификатора Видео 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
В этом примере объект веб-камеры используется, чтобы получить потоковое видео. Видеоплеер используется, чтобы отобразить потоковое видео наряду с предсказанным классом.
Создайте объект веб-камеры использование 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