Ich muss die letzten 10 Bilder aus der Videodatei abrufen/registrieren/merken. Dies ist eine kleine Version eines größeren Projekts zur Erkennung von Mikroausdrücken. Daher muss überprüft werden, ob "Zeilen" für die letzten 10 Bilder (erkannt) angezeigt wurden oder ob es für mehr als 10 angezeigt wird, dann wird es nicht erkannt. Ich bin auch gezwungen, mit vision.VideoFileReader
und vision.OpticalFlow
zu arbeiten. Wie macht man das?Bereich der letzten 10 Zahlen/Frames in Matlab
file = 'MEXTest.mp4';
vid = vision.VideoFileReader(file,'ImageColorSpace','RGB','VideoOutputDataType','single');
optFlo = vision.OpticalFlow('OutputValue','Horizontal and vertical components in complex form','ReferenceFrameDelay',3);
shapeInsertOptFloColor = vision.ShapeInserter('Shape','Lines','BorderColor','Custom','CustomBorderColor',[255 255 0]);
numFrames = 0;
frameList = {};
hasLines = zeros(10, 1, 'logical');
figH = figure;
while ~isDone(vid)
colorFrame = step(vid);
colorFrameRes = imresize(colorFrame,0.3);
grayFrame = rgb2gray(colorFrameRes);
optFloVectors = step(optFlo, grayFrame);
lines = oflo(optFloVectors,20);
motionVectors = step(shapeInsertOptFloColor, colorFrameRes, lines);
imshow(motionVectors); title('Optical Flow on Frame');
notEmpty = ~isempty(lines);
if numel(notEmpty) ~= 1, notEmpty = 1; end
hasLines = [hasLines(2:end); notEmpty];
if numFrames >= 10
frameList = [frameList(2:end) colorFrame];
else
frameList = [frameList colorFrame];
end
numFrames = numFrames + 1;
if numFrames >= 10 && all(hasLines)
disp('Micro-Expression Detected')
else
disp('Not detected')
end
if ~ishghandle(figH)
close all
break
end
end
release(vid);
Was genau fragen Sie? Möchtest du dich an die letzten 10 Frames des Videos erinnern, die vor dem aktuellen Punkt eingelesen wurden? – rayryeng
'isempty (punkte) == false' ->' ~ isempty (punkte) ' –
ja, tut mir leid, dass ich das nicht richtig ausgedrückt habe. – UZIERSKI