Запустите MATLAB script из python + pass args

Мне нужно использовать MATLAB Image Acquisition Toolbox для получения нескольких изображений с видеокамеры. MATLAB кажется хорошим решением, потому что Image Acquisition является легким, и я должен сделать некоторую обработку изображений впоследствии. Я долго искал, но я все еще не нашел ничего работающего.

Были некоторые попытки:


mlabwrap 1.1 - запустите MATLAB- script:

A MATLAB script как:

vid = videoinput('testadaptor');
img = getsnapshot(vid);
imwrite(img,'./image.png','png');

Вы можете запустить этот script, используя:

mlab.run('script.m')

Но где передать некоторые аргументы (каталог, описание изображения и т.д.)? Я ничего не нашел из-за плохого документального документа. Я использовал функцию mlab.lookfor( "тема интереса" ) без успеха


mlabwrap 1.1 - Захват изображения с использованием функций mlab:

На первый взгляд нет возможности считывать "объект видеовхода", нет таких функций, как:

image = getsnapshot(video input object)
imwrite(image,'directiory\image.png','png')

Python-Matlab-мост

https://github.com/jaderberg/python-matlab-bridge

У меня Windows 7 64 бит как ОС. Говорят, что он работает только на unix.


Nipype

http://nipy.sourceforge.net/nipype/api/generated/nipype.interfaces.matlab.html

Кажется, он очень новый. Я не пытался его установить. Я думаю, что это подходит для моей проблемы, но не для окон.


PyMAT

Поддержка python 2.7


И есть ли кто-нибудь, кто может мне помочь?

Ответ 1

Пока я не очень хорошо знаком с python-matlab-bridge, Nipype или PyMAT, я много работал с mlabwrap, и я постараюсь ответить на ваш вопрос в отношении этого пакета.

Во-первых, это будет намного проще, если вы будете работать с точки зрения функций, а не скриптов. Позвольте переделать ваш Matlab script как функцию, в myFunction.m следующим образом:

function myFunction(v_input, directory, file_name)

    vid = videoinput(v_input);
    img = getsnapshot(vid);
    location = [directory file_name]
    imwrite(img, location,'png');

Затем вы можете вызвать эту функцию из python с помощью mlabwrap.mlab, передавая строки для аргументов функции. Все функции Matlab, включая пользовательские функции, доступны как атрибуты из модуля mlabwrap.mlab.

>>> from mlabwrap import mlab
>>> mlab.myFunction('testadaptor', './', 'image.png')

mlabwrap преобразует ваши строки в Matlab-читаемый формат и передаст их в вашу функцию в качестве аргументов. Если a AttributeError поднят, это обычно означает, что ваша функция не находится на пути Matlab. Вы можете добавить его с помощью команды:

>>> mlab.path(mlab.path(), 'C:\function\directory')

Как и предостережение, mlabwrap автоматически преобразует некоторые типы аргументов, такие как строки или массивы numpy между Python и Matlab. Однако существует много типов, таких как структуры и классы Matlab, которые он не может преобразовать. В этом случае он вернет функцию MLabObjectProxy из функции Matlab. Эти прокси-объекты нельзя манипулировать в Python или преобразовывать в типы Python, но могут быть успешно переданы через mlabwrap в другие функции Matlab. Часто для функций со сложным выходом лучше записать этот вывод в файл в функции Matlab и импортировать данные из файла со стороны Python. Удачи!

Ответ 2

  • Python/OpenCV: вы можете использовать собственное решение для получения изображений с вашего видео устройства. С помощью OpenCV вы можете даже обрабатывать изображения в реальном времени.
  • matlab_wrapper: предполагается, что у вас есть функция MATLAB (не script), которая принимает некоторый параметр и возвращает массив изображений, например. [img] = get_image(some_parameter), вы можете написать что-то вроде этого:
matlab = matlab_wrapper.MatlabSession()
img = matlab.workspace.get_image(some_parameter)

Отказ от ответственности: я являюсь автором matlab_wrapper