Генерация кода с помощью VideoDevice Системного объекта

Использование codegen Функция

VideoDevice System object™ поддерживает генерацию кода в MATLAB® через codegen функция. Как использовать codegen функция, у вас должна быть лицензия MATLAB Coder™. Системные объекты также поддерживают генерацию кода, используя блок MATLAB Function в Simulink®. Можно также использовать системный объект с MATLAB Compiler™.

Примечание

MATLAB Compiler поддерживает системные объекты для использования в функциях MATLAB. Этот MATLAB Compiler не поддерживает системные объекты для использования в скриптах MATLAB.

Примечание

Если вы используете codegen команда для генерации MEX-функции в Windows® платформа, вам нужно выполнить imaqreset перед запуском сгенерированного файла MEX. Однако MEX работает неправильно, если Kinect® для установки пакета поддержки датчика Windows.

После запуска сгенерированного файла MEX, если вы запускаете какой-нибудь код MATLAB, который включает объект VideoDevice System с адаптером камеры, который также используется в сгенерированном файле MEX, необходимо выполнить clear mex во-первых.

Примечание

The codegen Команда может использоваться для генерации исполняемых файлов на платформах, отличных от Windows. Однако генерация MEX-функции не поддерживается в Linux® и платформы macOS.

Для получения дополнительной информации см. документацию по MATLAB codegen функция.

Общие библиотечные зависимости

Объект VideoDevice System генерирует код с ограниченной переносимостью. Системный объект использует предварительно скомпилированные общие библиотеки, такие как DLL, для поддержки ввода-вывода для определенных типов устройств. Общие местоположения библиотеки, которые требуются сгенерированному исполняемому файлу, следующие:

  • Специальные общие библиотеки MathWorks в разделе [MATLABROOT ]\bin\< ARCH >\

  • Библиотеки адаптеров MathWorks в разделе [MATLABROOT ]\SupportPackages\< RELEASE >\toolbox\imaq\supportpackages\genericvideo\adaptor\< ARCH >\специально для выбранного устройства.

Для примера ваш путь может выглядеть так в системе Windows и с помощью релиза R2018a:

C :\ProgramData\MATLAB\SupportPackages\R2018a\toolbox\imaq\supportpackages\genericvideo\adaptor\win64

Перед запуском сгенерированного исполняемого файла за пределами MATLAB необходимо будет добавить перечисленные папки в системный путь.

Правила использования для системных объектов в сгенерированном коде MATLAB

  • Присвойте системные объекты постоянным переменным.

  • Глобальные переменные не поддерживаются.

  • Инициализируйте системные объекты один раз путем встраивания указателей на объекты в if оператор с вызовом isempty( ).

  • Вызовите конструктор только один раз для каждого системного объекта.

  • Установите аргументы в конструкторы системных объектов в виде констант во время компиляции.

  • Используйте конструктор объектов, чтобы задать свойства системного объекта, потому что вы не можете использовать запись через точку для генерации кода. Можно использовать get функция для отображения свойств.

  • Протестируйте свой код в симуляции перед генерацией кода.

Ниже показан пример некоторых из этих правил.

% Note: System Objects created for Codegen have to be persistent variables.
persistent vid;

% Construct the IMAQ VideoDevice System Object.
if isempty(vid)
    % Note: All required parameters must be passed to the System Object at
    % the point of construction.
    vid = imaq.VideoDevice('winvideo', 1, 'MJPG_320x240', ...
                           'ROI', [1 1 320 240], ...
                           'ReturnedColorSpace', 'rgb', ...
                           'DeviceProperties.Brightness', 130, ...
                           'DeviceProperties.Sharpness', 220);
end

Ограничения на использование системных объектов в сгенерированном коде MATLAB

Убедитесь, что значение, присвоенное нетронутой или общественной собственности, является константой и что этому свойству существует самое большее одно назначение (включая назначение в конструкторе). Не устанавливайте никаких свойств во время генерации кода.

В генерации кода поддерживаются только следующие функции системного объекта:

  • get

  • getNumInputs

  • getNumOutputs

  • reset

  • step

Не устанавливайте Системные объекты, чтобы стать выходами от блока MATLAB Function.

Не передайте Системный объект в качестве примера входного параметра функции, компилируемой с codegen.

Не передайте Системный объект функциям, объявленным как внешние (то есть функции, вызываемые в интерпретированном режиме), используя coder.extrinsic функция. Не возвращайте Системные объекты из каких-либо внешних функций.