Я пишу тестовый процесс, который будет действовать как дубликат оригинальных процессоров
Мой класс примет видеофайл в качестве входных данных, а затем сгенерирует информацию, относящуюся к кадрам
Java2DFrameConverter bufferedImgConverter = new Java2DFrameConverter();
String filePath = "Palivala.mp4";
File tsFile = new File(filePath);
FFmpegFrameGrabber ffmpegFrameGrabber = new FFmpegFrameGrabber(tsFile);
OpenCVFrameConverter matConverter = new OpenCVFrameConverter.ToMat();
ffmpegFrameGrabber.start();
try {
while ((frame = ffmpegFrameGrabber.grabFrame(false, true, true, false)) != null) {
BufferedImage bufferedImage = bufferedImgConverter.convert(frame);
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
try {
ImageIO.write(bufferedImage, "jpeg", buffer);
} catch (IOException e) {
e.printStackTrace();
}
byte frameAsBytes[] = buffer.toByteArray();
start = System.currentTimeMillis();
BufferedImage bufferedImage2 = ImageIO.read(new ByteArrayInputStream(frameAsBytes));
Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage)); //problem is here, I explained problem at the bottom
if (mat.empty())
continue;
if (prevMat != null) {
// here I am generating required data and sending to the method which I want to test
}
prevMat = mat.clone();
numProcessedFrames++;
}
} catch (org.bytedeco.javacv.FrameGrabber.Exception e) {
System.out.println("Exception while grabbing frames for segment " + e);
}
ffmpegFrameGrabber.stop();
Если я использую начальныйBufferedImage
объект (bufferedImage
) работает должным образом, но когда я использую преобразованный BufferedImage
объект (bufferedImage2
), он не работает должным образом, т. Е. Фактически мой процесс находит информацию о замороженных кадрах, если видео заморожено на 20 секунд
Я генерирую standard-deviation
, используя mat
объект, который получает от
Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage)); //it works fine
Mat mat = matConverter.convertToMat(bufferedImgConverter.convert(bufferedImage2)); its the problem
Я получаю информацию в замороженном кадре, используя standard-deviation
и мой standard-deviation-threshold
равен 90
standard-deviation
постоянно ниже 90
Если я использую bufferedImage
объект
standard-deviation
постоянно ниже 90
до 6 секунд, затем для 1 кадра я получаю значение standard-deviation
как [118.0, 118.0, 119.0]
, затем next кадр снова ниже 90
Если я использую bufferedImage2
объект