В этом примере показано, как сгенерировать код от функции MATLAB, которая обнаруживает объекты в изображениях при помощи acfObjectDetector
объект. Когда вы намереваетесь сгенерировать код от своей функции MATLAB, которая использует acfObjectDetector
объект, необходимо создать объект за пределами функции MATLAB. Пример объясняет, как изменить код MATLAB в, Обучают Детектор Знака Стоп Используя Детектор объектов ACF поддерживать генерацию кода.
Чтобы сгенерировать код С, MATLAB Coder требует, чтобы код MATLAB был в форме функции. Аргументы функции не могут быть объектами MATLAB. Это требование представляет проблему для генерации кода от функции MATLAB, которая использует acfObjectDetector
объекты создаются за пределами функции MATLAB. Чтобы решить эту задачу, используйте toStruct
функционируйте, чтобы преобразовать acfObjectDetector
объект в структуру и передачу структура к функции MATLAB.
Чтобы поддержать генерацию кода, этот пример реструктурирует код существующего примера (См., Обучают Детектор Знака Стоп Используя Детектор объектов ACF) в функции под названием detectObjectsUsingACF
, который присутствует в текущей рабочей папке как вспомогательный файл. detectObjectsUsingACF
функционируйте берет изображение в качестве входа и загружает предварительно обученный детектор знака Стоп ACF.
type('detectObjectsUsingACF.m')
function [bboxes,scores] = detectObjectsUsingACF(InputImage) % Load a trained detector from a MAT file S = coder.load('detectorStruct.mat'); % Define a persistent variable persistent detector if isempty(detector) % Re-create the ACF Object Detector detector = acfObjectDetector(S.detectorStruct.Classifier,S.detectorStruct.TrainingOptions); end % Use the detect function to detect objects in the input image [bboxes,scores] = detect(detector,InputImage); end
Загрузите обучающие данные.
load('stopSignsAndCars.mat')
Выберите основную истину для знаков Стоп. Достоверные данные являются набором известных местоположений знаков Стоп в изображениях.
stopSigns = stopSignsAndCars(:,1:2);
Добавьте полный путь в файлы изображений.
stopSigns.imageFilename = fullfile(toolboxdir('vision'),... 'visiondata',stopSigns.imageFilename);
Используйте trainACFObjectDetector
функция, чтобы обучить детектор ACF. Выключите процесс обучения, выведенный установкой 'Verbose' to false
.
detector = trainACFObjectDetector(stopSigns,'NegativeSamplesFactor',2,'Verbose',false);
Поскольку вы намереваетесь сгенерировать код для функции MATLAB detectObjectsUsingACF
, преобразуйте созданный detector
в структуру.
detectorStruct = toStruct(detector);
Сохраните обученную структуру объекта как файл MAT.
save('detectorStruct.mat','detectorStruct');
Сгенерируйте код C-MEX, который можно запустить в среде MATLAB. Используйте codegen
(MATLAB Coder) команда.
codegen detectObjectsUsingACF -report -args { coder.typeof(uint8(0), [inf inf 3])}
Code generation successful: To view the report, open('codegen/mex/detectObjectsUsingACF/html/report.mldatx').
Чтобы обнаружить объекты в изображении, загрузите тестовое изображение.
img = imread('stopSignTest.jpg');
Вызовите сгенерированную C-MEX-ФУНКЦИЮ путем передачи загруженного изображения img
как вход.
[bboxes, scores] = detectObjectsUsingACF_mex(img);
Отобразите результаты обнаружения и вставьте ограничительные рамки для объектов в изображение.
img = insertObjectAnnotation(img,'rectangle',bboxes,scores);
figure
imshow(img)
Выпустите системную память, используемую, чтобы сохранить сгенерированный файл MEX на C.
clear ObjectDetectionFromImages_mex;
Введение в генерацию кода с функцией, соответствующей и регистрацией | Сгенерируйте код, чтобы обнаружить ребра на изображениях (MATLAB Coder)