Gute Sprache für Computer Vision?


28

Ich versuche, ein inhaltsbasiertes System zum Abrufen von Bildern zu implementieren, möchte mir jedoch vorher einen Überblick über einige für diese Aufgabe geeignete Programmiersprachen verschaffen (mit guten Bibliotheken und dergleichen).

Kennt jemand einige gute Sprachen und Bibliotheken für diese Art von Aufgabe? Was ist mit Python oder Java?

Beste


Der Umfang ist ein akademisches Projekt ;-) Entschuldigung, dass ich das nicht gesagt habe!
jstr

1
Ich habe ca. 3 Jahre in einer Computer Vision Gruppe für ein Software-Startup gearbeitet. Wir haben python + scipy / numpy für die schnelle Erstellung von Prototypen und C ++ für den Produktionscode verwendet. Bei der Portierung halfen Boost :: Python-Wrapper für Heavy C ++. BLAS und LAPACK für schwere Zahlen.
Mittwoch,

2
@wim - Ihr Kommentar hätte eine großartige Antwort geliefert, mit ein wenig mehr Details darüber, warum Sie diese Sprachen für die verschiedenen Entwicklungsphasen verwendet haben.
Mark Booth

1
Sie können Matlab oder Octave für Rapid Prototyping verwenden und dann mithilfe von Toolkits wie Armadillo (für lineare Algebra) und MLPACK (für maschinelles Lernen und Mustererkennung) in C ++ konvertieren . Armadillo verwendet BLAS und LAPACK intern (wie Matlab). Sie können Matlab / Octave-Code auch über die mex-Oberfläche von Armadillo mit C ++ - Code mischen.
15.

Antworten:


35

Vielleicht können Sie den Umfang und den Umfang Ihrer Arbeit präzisieren (akademisches Projekt? Desktop- oder mobiles kommerzielles Produkt? Webbasiertes kommerzielles Projekt?).

Einige Empfehlungen und Kommentare:

  • Matlab ist in der akademischen Welt weit verbreitet und eignet sich gut zum Skizzieren / Validieren von Ideen. Sie haben Zugriff auf eine große Anzahl von Codes von anderen Forschern (in Lebenslauf und maschinellem Lernen); Prototyping und Debugging werden sehr schnell und einfach sein, aber was auch immer Sie in dieser Umgebung entwickelt haben, wird schwer in die Produktion zu bringen sein. Abhängig davon, was Ihr Code tut, kann es zu Speicher- / Leistungsproblemen kommen (es gibt Situationen, in denen Sie nicht beschreiben können, was Sie in Matlabs Grundelementen tun möchten, und eine Schleife mit Pixeln beginnen müssen und Matlabs als interpretierte Sprache keine ist) in diesem Zusammenhang helfen). Die Interaktion mit Datenbanken, Webservern usw. ist nicht einfach, manchmal sogar unmöglich (ein Matlab-Programm wird nicht zu einem Thrift-Server, der von einem Web-Front-End aufgerufen wird). Kosten $$$.

  • C ++ wird für viele CV-Systeme in Produktionsqualität verwendet (denken Sie an etwas im Maßstab von Googles Bildersuche oder Streetview oder an viele kommerzielle Robotikanwendungen). Gute Bibliotheken wie OpenCV, hervorragende Leistung, einfach in eine Produktionsumgebung zu integrieren. Wenn Sie maschinelles Lernen benötigen, gibt es viele Bibliotheken (LibSVM / SVMlight, Torch). Wenn Sie auf den Code "Schleife auf allen Pixeln" zurückgreifen müssen, funktioniert er gut. Einfache Codierung der Systeme / Speicherebenen, die in einem umfangreichen Abrufsystem benötigt werden (z. B .: eine sehr große Hash-Karte auf der Festplatte zum Speichern von Hashes mit invertierten Indexzuordnungen für Bilder). Dinge wie Thrift / Message Pack können Ihr Abrufprogramm in einen RPC-Server verwandeln, der von einem Web-Front-End aufgerufen werden kann. Allerdings: nicht sehr agil für das Prototyping, ziemlich schrecklich für das Ausprobieren neuer Ideen, langsamere Entwicklungszeit; und in die Hände von unerfahrenen Programmierern zu geben, kann schwierig sein, Performance- und / oder Instabilitätsprobleme zu verfolgen.

  • Python ist irgendwie ein Mittelweg zwischen beiden. Sie können es für numerische Berechnungen im Matlab-Stil (mit numpy und scipy) verwenden. + Sie haben Bindungen zu Bibliotheken wie OpenCV. Sie können damit System- / Datenstruktur-Aufgaben erledigen und akzeptable Leistungen erzielen. Es gibt einige maschinelle Lernpakete, allerdings weniger als in Matlab oder C ++. Wenn Sie nicht auf den Code "Schleife bei allen Pixeln" zurückgreifen müssen, können Sie so ziemlich alles codieren, was Sie mit C ++ mit einem Verhältnis von 1: 1,5 zu 1: 3 von Leistung und 2: 1 zu 10: 1 von Leistung hätten tun können der Quellcode-Größe (umstritten). Abhängig vom Erfolg Ihres Projekts wird es jedoch einen Punkt geben, an dem die Leistung ein Problem darstellt und das Umschreiben auf C ++ keine Option darstellt.


4
Außerdem ist Matlab im Gegensatz zu Python in der Dokumentation sehr stark.
Andrey Rubshtein

1
Was ist mit C? Das ist meine Sprache, wenn ich Zweifel habe.
Zetta Suro

10

Vor allem, weil Ihr Projekt akademisch ist, ist Mathematica ein sehr gutes und angemessenes Softwaresystem. Mathematica 8 enthält eine Reihe umfassender Funktionen für die Bildverarbeitung, lineare Algebra, Numerik, GPU usw. Es ist auch ein symbolisches System, mit dem ich häufig geschlossene Lösungen für Gleichungen ableiten kann - sehr praktisch für Computer-Vision-Aufgaben. Mathematica kann auch mit Python, C, C ++, Java, .NET, ..., Code kommunizieren.


5

Wenn es sich um ein akademisches Projekt handelt, sollten Sie auf jeden Fall Matlab und insbesondere die Image Processing Toolbox und die Computer Vision System Toolbox verwenden. Das Prototypen und Auswerten von Algorithmen in Matlab dauert um Größenordnungen kürzer als in C ++.

Selbst mit der Python-Oberfläche ist OpenCV viel schwieriger zu bedienen als Matlab, und wenn Sie es wirklich müssen, können Sie C- oder C ++ - Code von Matlab über mex aufrufen.


4

Für ein Bildwiederherstellungssystem. Sie würden clientseitigen und serverseitigen Code haben. Die Serverseite kann entweder in Python oder C / C ++ sein. OpenCV ist hier Ihre beste Wahl. Es hat sowohl Python- als auch C ++ - Schnittstellen. Für die Client-Seite, denke ich, sind Sie besser mit Java.


3

Die beste Sprache für Computer Vision ist C ++. Obwohl der größte Nachteil darin besteht, dass es schwieriger ist, das zu erreichen, was Sie wollen. OpenCV ist die beste Bibliothek für Computer Vision, aber Sie können das Gleiche mit Matlab oder Python tun.

Schauen Sie sich hier um .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.