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

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

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

1.) Опыт

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

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

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

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

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

4.) Цена

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

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


person hjweide    schedule 21.06.2012    source источник
comment
С точки зрения возможности трудоустройства после окончания учебы, я думаю, что Matlab — гораздо лучший выбор, если вы собираетесь заниматься инженерией.   -  person High Performance Mark    schedule 21.06.2012
comment
Я думаю, что это сильно зависит от того, где вы работаете. Лучше знать оба.   -  person Benjamin    schedule 21.06.2012


Ответы (4)


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

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

Вот краткий список плюсов и минусов для Python и Matlab.

Плюсы питона:

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

Минусы питона:

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

Плюсы Матлаба:

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

Минусы Матлаба:

  • Не бесплатно (и дорого)
  • На основе Java + X11, который выглядит крайне уродливо (хорошо, я согласен, что здесь я полностью предвзят)
  • Трудно писать большие и расширяемые программы
  • Многие пользователи Matlab переходят на Python :)
person Oriol Nieto    schedule 21.06.2012
comment
Спасибо! Сегодня я поговорил еще с несколькими людьми, и похоже, что я буду работать с Python. - person hjweide; 22.06.2012
comment
Я рад это слышать. Удачного программирования! - person Oriol Nieto; 22.06.2012

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

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

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

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

person tacaswell    schedule 21.06.2012

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

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

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

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

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

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

person denahiro    schedule 21.06.2012
comment
Спасибо за ваш вклад! Но что вы имеете в виду, когда говорите, что многократное использование кода плохо работает с Matlab? Почему это так? - person hjweide; 21.06.2012
comment
Многие люди склонны слишком часто использовать сценарии, что, на мой взгляд, чрезвычайно затрудняет повторное использование такого кода из-за конфликтов имен и зависимостей. Также трудно обеспечить соблюдение структур данных (например, входных данных), что означает, что большинству пользователей придется выяснить, как они должны структурировать входные данные (это строка или вектор-столбец? и т. д.). Я не говорю, что невозможно повторно использовать хороший код Matlab, но вокруг много плохого кода, и люди, как правило, не думают о возможности повторного использования при написании кода. - person denahiro; 21.06.2012

Другие сделали много замечательных комментариев (я уже высказывался по этой теме в другом ответе https://stackoverflow.com/a/5065585/392949) , но я просто хотел отметить, что Python имеет ряд действительно отличных инструментов для параллельных вычислений/разделения работы между несколькими ядрами. Вот краткий и ни в коем случае не исчерпывающий список:

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

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

person JoshAdel    schedule 22.06.2012