Отслеживание объектов: 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