Отслеживание объектов: MATLAB и Python Numpy

В ближайшее время я приступлю к окончательному проекту "Инженерный проект", состоящему из отслеживания в реальном времени объектов, движущихся по 2D-поверхности. Объекты будут зарегистрированы моим алгоритмом, используя извлечение функций.

Я пытаюсь провести некоторое исследование, чтобы решить, следует ли использовать MATLAB или использовать Python Numpy (численный Python). Некоторые из факторов, которые я принимаю во внимание:

1.) Опыт

У меня есть разумный опыт в обоих, но, возможно, больше опыта в обработке изображений с помощью Numpy. Тем не менее, я всегда находил MATLAB очень интуитивным и легким в выборе.

2.) Способности в реальном времени

Очень важно, чтобы мой выбор мог поддерживать получение видеоданных в реальном времени с внешней камеры. Я нашел эту ссылку для MATLAB, где показано, как это сделать. Я уверен, что это было бы возможно для Python, возможно, используя библиотеку OpenCV?

3.) Производительность

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

4.) Цена

Я знаю, что есть затраты, связанные с MATLAB, но я буду работать в университете и, следовательно, буду иметь доступ к полной MATLAB без каких-либо затрат для себя, поэтому цена не является фактором.

Я был бы очень признателен за любой вклад от любого, кто сделал что-то подобное, и что было вашим опытом. Спасибо!

Ответ 1

Python (с NumPy, SciPy и MatPlotLib) - это новый Matlab. Поэтому я настоятельно рекомендую Python над Matlab.

Я сделал изменения более года назад, и я очень доволен результатами.

Вот короткий список pro/con для Python и Matlab

Преимущества Python:

  • Объектно-ориентированный
  • Легко писать большие и "настоящие" программы
  • Открытый исходный код (поэтому он полностью свободен для использования)
  • Быстро (большинство тяжелых алгоритмов вычислений имеют оболочку python для соединения с библиотеками C, например NumPy, SciPy, SciKits, libSVM, libLINEAR)
  • Удобная среда, настраиваемая (iPython, модуль python для VIM,...)
  • Быстро растущее сообщество пользователей Python. Тонны документации и людей, желающих помочь.

Python cons:

  • Может быть больно для установки (особенно некоторые модули в OS X)
  • Обработка сюжетов не такая приятная/легкая, как в Matlab, особенно 3D-графики или анимации.
  • Он по-прежнему является script языком, поэтому используйте его для (быстрого) прототипирования
  • Python не предназначен для многоядерного программирования

Преимущества Matlab:

  • Очень простая установка
  • Мощные панели инструментов (например, SignalProcessing, Systems Biology)
  • Унифицированная документация и персонализированная поддержка, если вы покупаете лицензию.
  • Легко иметь анимацию сюжета и интерактивную графику (которую я нахожу очень полезной для запуска экспериментов)

Matlab cons:

  • Не бесплатно (и дорого)
  • На основе Java + X11, который выглядит чрезвычайно уродливо (хорошо, я принимаю, что я полностью смещен здесь)
  • Трудно писать большие и расширяемые программы
  • Многие пользователи Matlab переключаются на Python:)

Ответ 2

Я бы порекомендовал python.

Я переключился с MATLAB → python примерно на 1/2 пути через мой phd и не жалею об этом. В самом упрощенном языке python - гораздо более приятный язык, имеет реальные объекты и т.д.

Если вы планируете делать какие-либо части своего кода в c/С++, я бы определенно рекомендовал python. Интерфейс mex работает, но если ваша сборка становится сложной/большой, она начинает болеть, и я никогда не разбирался в том, как эффективно ее отлаживать. У меня также были большие трудности с mex + выделение больших блоков, взаимодействующих с управлением памятью Matlab (моя невозможность исправить эту проблему - это то, что заставило меня переключиться).

В качестве побочной заметки/самостоятельной рекламы у меня есть Crocker-Grier в С++ (с обертками для swig) и pure python.

Ответ 3

  • Если вы знакомы с обоими языками, это не критерий принятия решений.

  • У Matlab есть проблемы с настройками реального времени, особенно потому, что большинство алгоритмов компьютерного зрения очень дорогостоящие. Это преимущество использования проверенной и проверенной библиотеки, такой как OpenCV, где эффективно используются многие из алгоритмов, которые вы будете использовать. Matlab предлагает возможность компиляции кода в Mex файлы, но это большая работа.

  • Matlab имеет параллель для циклов parfor, что упрощает (или, по крайней мере, проще) многоядерную обработку. Но вопрос в том, достаточно ли этого, чтобы получить скорость в реальном времени.

  • Без комментариев.

  • Основным преимуществом Matlab является то, что вы быстро получите запущенную программу из-за хорошей документации. Но Я обнаружил, что повторное использование кода плохо с Matlab, если вы не уделяете ему особого внимания.

Я думаю, что окончательное решение должно быть, если вам нужно/может запустить ваш алгоритм в реальном времени, что я сомневаюсь в Matlab, но это зависит от того, какие методы вы планируете использовать.

Ответ 4

Другие сделали замечательные комментарии (я уже обсуждал эту тему раньше в другом ответе fooobar.com/info/518551/...), но я просто хотел указать, что Python имеет ряд действительно отличных инструментов для параллельного вычисления/разделения работы на нескольких ядрах. Здесь короткий и далеко не полный список:

Вы также, вероятно, обнаружите, что cython будет намного более эффективным инструментом по сравнению с тем, что Matlab может предложить, если вам когда-либо понадобится интерфейс внешних C-библиотек или написать C-расширения, и он имеет отличную поддержку numpy, встроенную прямо в.

Здесь есть список с рядом других опций: http://wiki.python.org/moin/ParallelProcessing