Гарна мова для комп’ютерного зору?


28

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

Хтось знає якісь хороші мови та лайки для такого роду завдань? Що з Python чи Java?

Найкраще


Область є академічним проектом ;-) Вибачте за те, що не сказали!
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 ++ через мекс-інтерфейс Armadillo.
mtall

Відповіді:


35

Можливо, ви можете бути більш конкретними щодо масштабів і масштабів вашої роботи (академічний проект? Настільний або мобільний комерційний продукт? Веб-комерційний проект?).

Деякі рекомендації та коментарі:

  • Матлаб є поширеним в академічному світі і досить хороший для накреслення / перевірки ідей. Ви отримаєте доступ до великого коду коду від інших дослідників (у резюме та машинному навчанні); складання прототипів і налагодження буде дуже швидким і простим, але все, що ви розробили в цьому середовищі, буде важко поставити у виробництво. Залежно від того, що робить ваш код, у вас можуть виникнути проблеми з пам’яттю / працездатністю (бувають ситуації, коли ви не можете описати, що ви хочете робити, що стосується примітивів Matlab, і вам доведеться починати циклічно працювати на пікселях, а Matlab - інтерпретована мова - це не допомагаючи в цьому контексті). Взаємодія з базами даних, веб-серверами тощо не є легкою, іноді неможливою (ви не отримаєте програму Matlab стати сервером Thrift, який викликається веб-фронтом). Витрати $$$.

  • C ++ - це те, що використовується у багатьох системах резюме виробничого класу (придумайте щось у масштабі пошуку зображень 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 ++ не буде можливим.


4
Також Matlab дуже сильний у документації, на відміну від Python.
Андрій Рубштейн

1
Що з C? Це моя мовна мова, коли сумніваєтесь.
Зетта Суро

10

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


5

Якщо це академічний проект, то вам обов'язково слід використовувати Matlab, а точніше Boxbox Toolbox Toolbox і Computer Vision System Toolbox. Це займе у вас на порядок менше часу для прототипу та оцінки алгоритмів у Matlab, ніж у C ++.

Навіть з інтерфейсом Python OpenCV набагато складніше у використанні, ніж Matlab, і якщо вам це справді доведеться, ви можете зателефонувати на C або C ++ код з Matlab через mex.


4

Для системи пошуку зображень. У вас є код на стороні клієнта та сервер. Сторона сервера може бути в Python або C / C ++. OpenCV - ваш найкращий вибір тут. Він має інтерфейси python & C ++. Що стосується клієнта, я думаю, вам краще використовувати java.


3

Найкраща мова для комп’ютерного зору - це C ++. Хоча головним його недоліком є ​​те, що важче досягти того, що ти хочеш. OpenCV - найкраща бібліотека для комп'ютерного зору, але ви можете робити те ж саме, використовуючи matlab або python.

Погляньте тут .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.