Можно ли передать видео, записанное камерой Android, в функцию C++, сгенерированную MATLAB, для его обработки? ⇐ C++
Можно ли передать видео, записанное камерой Android, в функцию C++, сгенерированную MATLAB, для его обработки?
Я разработал приложение для записи видео на Android с камерой 2, чтобы провести эксперименты по обработке изображений.
С этого момента мой подход к обработке видео заключался в загрузке его из эмулятора и обработке в коде MATLAB, который принимает видео .mp4 в качестве входных данных, используя следующий пример кода:
функция = Android4(Vrecorded) %#кодеген % загрузок и созданный предварительно обученный детектор YOLO v4 DL NW, настроенный % для обнаружения массива светодиодов. vidObj = VideoReader(char(Vrecorded)); % захвата видео с камеры и разделения их на квадраты % Чтение свойств видео numFrames = vidObj.NumFrames; высота = vidObj.Height; ширина = vidObj.Width; % Предварительно выделяем 3D-массив для хранения видеокадров videoArray = нули (высота, ширина, 3, numFrames, 'uint8'); % Перебрать каждый кадр и сохранить его в массиве для FrameIdx = 1:numFrames кадр = readFrame (vidObj); videoArray(:, :, :,frameIdx) = кадр; конец детектор = coder.loadDeepLearningNetwork("trainedDetector_23022023.mat"); % Считать все кадры как изображения в оттенках серого Frames = reshape(videoArray(:,:,1,:), size(videoArray,1), size(videoArray,2), []); % дополнительного количества четырех кадров для захвата видео (NoF — количество кадров) NoF = размер (кадров, 3); % Обнаружение объектов на неизвестном изображении/видео с помощью предварительно обученного YOLO v4. FrameForDetection = нули (размер (кадры, 1), размер (кадры, 2), 3); FrameForDetection(:,:,:) = videoArray(:,:,:,1); %детектор объектов [bboxes,~,~] = обнаружить(детектор,FrameForDetection); % Эта ячейка содержит обрезанные кадры, содержащие RoI после объекта YOLO v4. % алгоритм обнаружения обрабатывает кадры обрезанныйFrameVectors = ячейка (1,1); размеры = imcrop(frames(:,:,1),bboxes(1,:)); CropedFrames = нули (размер (размеры, 1), размер (размеры, 2), NoF, 'uint8'); для n = 1:1 CropedFrameVectors{n} = нули (0,0,0,'uint8'); для k = 1:NoF % обрезает кадры в каждом обнаруженном объекте в соответствии с границами % результатов коробок, зафиксированных в первом кадре CropedFrames(:,:,k) = imcrop(frames(:,:,k),bboxes(1,:)); конец % Вставьте обрезанные рамки с ограничивающими рамками в ячейку, чтобы разрешить % нескольких обрезанных объектов в одной переменной CropedFrameVectors {n} = CropedFrames; % Стереть переменную, чтобы обрезать другой объект из-за разницы в bbox % размеров от одного объекта к другому (ширина x высота) конец Я = обрезанныйFrameVectors{1}; Однако моя цель — экспортировать этот код в Android, используя поддержку C++ CMake для Android (https://developer.android.com/studio/pr ... ative-code).
После генерации кода C++ из предыдущего кода MATLAB с помощью MATLAB Coder у меня есть следующая функция main():
// Включаем файлы #include "main.h" #include "Android5.h" #include "Android5_terminate.h" #include "rt_nonfinite.h" #include "string1.h" #include "coder_array.h" // Объявления функций статический кодер::array argInit_1xUnbounded_char_T(); статический символ argInit_char_T(); статический кодер::rtString argInit_rtString(); // Определения функций статический кодер::array argInit_1xUnbounded_char_T() { кодер::array результат; // Устанавливаем размер массива. result.set_size(1, 2); // Проходим по массиву для инициализации каждого элемента. for (int idx0{0}; idx0
Я разработал приложение для записи видео на Android с камерой 2, чтобы провести эксперименты по обработке изображений.
С этого момента мой подход к обработке видео заключался в загрузке его из эмулятора и обработке в коде MATLAB, который принимает видео .mp4 в качестве входных данных, используя следующий пример кода:
функция = Android4(Vrecorded) %#кодеген % загрузок и созданный предварительно обученный детектор YOLO v4 DL NW, настроенный % для обнаружения массива светодиодов. vidObj = VideoReader(char(Vrecorded)); % захвата видео с камеры и разделения их на квадраты % Чтение свойств видео numFrames = vidObj.NumFrames; высота = vidObj.Height; ширина = vidObj.Width; % Предварительно выделяем 3D-массив для хранения видеокадров videoArray = нули (высота, ширина, 3, numFrames, 'uint8'); % Перебрать каждый кадр и сохранить его в массиве для FrameIdx = 1:numFrames кадр = readFrame (vidObj); videoArray(:, :, :,frameIdx) = кадр; конец детектор = coder.loadDeepLearningNetwork("trainedDetector_23022023.mat"); % Считать все кадры как изображения в оттенках серого Frames = reshape(videoArray(:,:,1,:), size(videoArray,1), size(videoArray,2), []); % дополнительного количества четырех кадров для захвата видео (NoF — количество кадров) NoF = размер (кадров, 3); % Обнаружение объектов на неизвестном изображении/видео с помощью предварительно обученного YOLO v4. FrameForDetection = нули (размер (кадры, 1), размер (кадры, 2), 3); FrameForDetection(:,:,:) = videoArray(:,:,:,1); %детектор объектов [bboxes,~,~] = обнаружить(детектор,FrameForDetection); % Эта ячейка содержит обрезанные кадры, содержащие RoI после объекта YOLO v4. % алгоритм обнаружения обрабатывает кадры обрезанныйFrameVectors = ячейка (1,1); размеры = imcrop(frames(:,:,1),bboxes(1,:)); CropedFrames = нули (размер (размеры, 1), размер (размеры, 2), NoF, 'uint8'); для n = 1:1 CropedFrameVectors{n} = нули (0,0,0,'uint8'); для k = 1:NoF % обрезает кадры в каждом обнаруженном объекте в соответствии с границами % результатов коробок, зафиксированных в первом кадре CropedFrames(:,:,k) = imcrop(frames(:,:,k),bboxes(1,:)); конец % Вставьте обрезанные рамки с ограничивающими рамками в ячейку, чтобы разрешить % нескольких обрезанных объектов в одной переменной CropedFrameVectors {n} = CropedFrames; % Стереть переменную, чтобы обрезать другой объект из-за разницы в bbox % размеров от одного объекта к другому (ширина x высота) конец Я = обрезанныйFrameVectors{1}; Однако моя цель — экспортировать этот код в Android, используя поддержку C++ CMake для Android (https://developer.android.com/studio/pr ... ative-code).
После генерации кода C++ из предыдущего кода MATLAB с помощью MATLAB Coder у меня есть следующая функция main():
// Включаем файлы #include "main.h" #include "Android5.h" #include "Android5_terminate.h" #include "rt_nonfinite.h" #include "string1.h" #include "coder_array.h" // Объявления функций статический кодер::array argInit_1xUnbounded_char_T(); статический символ argInit_char_T(); статический кодер::rtString argInit_rtString(); // Определения функций статический кодер::array argInit_1xUnbounded_char_T() { кодер::array результат; // Устанавливаем размер массива. result.set_size(1, 2); // Проходим по массиву для инициализации каждого элемента. for (int idx0{0}; idx0
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение