Хороший язык для компьютерного зрения?

28

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

Кто-нибудь знает хорошие языки и библиотеки для такого рода задач? А как насчет Python или Java?

Лучший

JStr
источник
Это академический проект ;-) извините, что не сказал этого!
JStr
1
Я работал около 3 лет в группе компьютерного зрения для стартапа программного обеспечения. Мы использовали python + scipy / numpy для быстрого создания прототипов и C ++ для производственного кода. Оболочки boost :: python для тяжелых C ++ помогли с портированием. BLAS и LAPACK используются для тяжелых числовых вещей.
Вим
2
@wim - ваш комментарий мог бы дать отличный ответ, с чуть более подробной информацией о том, почему вы использовали эти языки для разных этапов разработки.
Марк Бут
1
Вы можете использовать Matlab или Octave для быстрого создания прототипов, а затем конвертировать в C ++ с помощью наборов инструментов, таких как Armadillo (для линейной алгебры) и MLPACK (для машинного обучения и распознавания образов). Armadillo использует BLAS и LAPACK внутри (так же, как Matlab). Вы также можете смешивать код Matlab / Octave с кодом C ++ через mex-интерфейс Armadillo.
до

Ответы:

35

Может быть, вы можете более конкретно определить масштабы и масштабы вашей работы (академический проект? Коммерческий продукт для настольных компьютеров или мобильных устройств? Коммерческий проект на основе веб-технологий?).

Некоторые рекомендации и комментарии:

  • Matlab широко распространен в академическом мире и довольно хорош для набросков / проверки идей. У вас будет доступ к большому объему кода от других исследователей (в области CV и машинного обучения); Создание прототипов и отладка будут очень быстрыми и простыми, но все, что вы разработали в этой среде, будет трудно внедрить в производство. В зависимости от того, что делает ваш код, у вас могут возникнуть проблемы с памятью / производительностью (есть ситуации, когда вы не можете описать то, что вы хотите сделать в терминах примитивов Matlab, и вам приходится начинать циклы на пикселях, а интерпретируемый язык Matlab не является помогая в этом контексте). Взаимодействие с базами данных, веб-серверами и т. Д. Нелегко, иногда невозможно (вы не получите программу Matlab, которая станет Thrift-сервером, вызываемым веб-интерфейсом). Стоит $$$.

  • C ++ - это то, что используется во многих системах CV промышленного уровня (подумайте о чем-то вроде масштаба поиска изображений Google или Streetview, или многих коммерческих робототехнических приложений). Хорошие библиотеки, такие как OpenCV, отличная производительность, их легко внедрить в производственную среду. Если вам нужно заниматься машинным обучением, есть много библиотек (LibSVM / SVMlight, Torch). Если вам придется прибегнуть к коду «зацикливание на всех пикселях», он будет работать хорошо. Простота в использовании для кодирования систем / уровней хранения, необходимых в крупномасштабной поисковой системе (например, очень большая хэш-карта на диске для хранения хэшей с обратным индексным отображением для изображений). Такие вещи, как Thrift / Message Pack, могут превратить вашу поисковую программу в RPC-сервер, который может вызываться веб-интерфейсом. Однако: не очень проворный для прототипирования, довольно ужасный для того, чтобы опробовать новые идеи, медленное время разработки; и поставить в руки неопытных программистов может быть трудно отследить производительность и / или проблемы нестабильности.

  • Python - это нечто среднее между обоими. Вы можете использовать его для численных вычислений в стиле Matlab (с numpy и scipy) + иметь привязки к библиотекам, таким как OpenCV. С ним можно создавать системы / структуры данных и получать приемлемые характеристики. Существует довольно много пакетов машинного обучения, хотя и меньше, чем в Matlab или C ++. Если вам не придется прибегать к коду «зацикливание на всех пикселях», вы сможете закодировать практически все, что могли бы сделать с помощью C ++, с соотношением производительности 1: 1,5: 1: 3 и соотношением 2: 1: 10: 1. исходный код размера (спорно). Но в зависимости от успеха вашего проекта будет момент, когда производительность будет проблемой, и при переписывании на C ++ не будет выбора.

pichenettes
источник
4
Кроме того, Matlab очень силен в документации, в отличие от Python.
Андрей Рубштейн
1
Как насчет C? Это мой язык, когда я сомневаюсь.
Зетта Суро
10

Тем более что ваш проект академический, Mathematica - очень хорошая и подходящая система программного обеспечения. Mathematica 8 поставляется с исчерпывающим набором функций для обработки изображений, линейной алгебры, чисел, графических процессоров и т. Д. Это также символическая система, поэтому я могу выводить решения уравнений в замкнутой форме для уравнений - очень удобно для задач компьютерного зрения. Mathematica также может общаться с Python, C, C ++, Java, .NET, ..., кодом.

Матиас Одисио
источник
5

Если это академический проект, то вам определенно следует использовать Matlab, а точнее - набор инструментов для обработки изображений и набор инструментов системы Computer Vision. На создание прототипа и оценки алгоритмов в Matlab у вас уйдет на порядки меньше времени, чем в C ++.

Даже с интерфейсом Python OpenCV гораздо сложнее в использовании, чем Matlab, и, если вам действительно нужно, вы можете вызывать код C или C ++ из Matlab через mex.

Дима
источник
4

Для системы поиска изображений. У вас будет код на стороне клиента и на стороне сервера. Сторона сервера может быть либо на Python, либо на C / C ++. OpenCV - ваш лучший выбор здесь. Он имеет интерфейсы Python и C ++. Для клиента, я думаю, вам лучше использовать Java.

навигационный
источник
3

Лучший язык для компьютерного зрения - C ++. Хотя его главный недостаток в том, что труднее добиться того, чего вы хотите. OpenCV - лучшая библиотека для компьютерного зрения, но вы можете делать то же самое, используя matlab или python.

Посмотрите здесь .

omg_img
источник