2012-04-10 8 views
4

Ich habe eine Reihe von Referenzbildern (200) und eine Reihe von Fotos dieser Bilder (Zehntausende). Ich muss jedes Foto halbautomatisch klassifizieren. Welchen Algorithmus und welche Open-Source-Bibliothek würdest du mir für diese Aufgabe empfehlen? Das Beste für mich wäre, ein Ähnlichkeitsmaß zwischen dem Foto und den Referenzbildern zu haben, so dass ich einer menschlichen Bedienperson die bestellten Bilder von der ähnlichsten der kleinsten zeigen würde, um ihre Arbeit zu erleichtern.Bildklassifizierung/Erkennung Open-Source-Bibliothek

Um ein wenig mehr Kontext zu geben, sind die Referenzbilder Markenpakete, und die Fotos sind von den gleichen Paketen, aber mit allen Arten von Geräuschen: Reflexionen aus dem Blitz, wenig Licht, unperfekte Perspektive, etc. Die Fotos sind bereits (manuell) segmentiert: Nur das Paket ist sichtbar.

In meinen Tagen mit Bilderkennung (wie vor 15 Jahren) hätte ich wahrscheinlich versucht, ein neuronales Netzwerk mit den Referenzbildern zu trainieren, aber ich frage mich, ob es jetzt bessere Möglichkeiten gibt, dies zu tun.

Antwort

5

Ich empfehle, dass Sie Python verwenden und die NumPy/SciPy-Bibliotheken für Ihre numerische Arbeit verwenden. Einige hilfreiche Bibliotheken für den Umgang mit Bildern sind die Mahotas-Bibliothek und die scikits.image-Bibliothek.

Darüber hinaus werden Sie scikits.learn verwenden möchten, das ist ein Python-Wrapper für Libsvm, eine sehr standardmäßige SVM-Implementierung.

Der schwierige Teil ist die Wahl Ihres Deskriptors. Der Deskriptor ist das Feature, das Sie aus jedem Bild berechnen, um eine Ähnlichkeitsdistanz mit dem Satz von Referenzbildern zu berechnen. Eine gute Auswahl an Dingen wäre Histogram of Oriented Gradients, SIFT-Features und Farbhistogramme, und Sie können mit verschiedenen Möglichkeiten experimentieren, die verschiedenen Teile des Bildes zu gruppieren und diese Deskriptoren miteinander zu verketten.

Als nächstes legen Sie einige Ihrer Daten für das Training beiseite. Für diese Daten müssen Sie sie manuell entsprechend dem zutreffenden Referenzbild beschriften, zu dem sie gehören. Sie können diese Beschriftungen in scikits.learn in die integrierten Funktionen einspeisen und eine SVM mit mehreren Klassen zur Erkennung Ihrer Bilder trainieren.

Danach sollten Sie sich MPI4Py, eine Implementierung von MPI in Python, ansehen, um Multiprozessoren zu nutzen, wenn Sie die große Deskriptor-Berechnung und Klassifizierung der Zehntausende von verbleibenden Bildern durchführen.

Die von Ihnen beschriebene Aufgabe ist sehr schwierig und die Lösung mit hoher Genauigkeit könnte leicht zu einer Publikation auf Forschungsebene im Bereich der Computer Vision führen. Ich hoffe, ich habe Ihnen einige Ansatzpunkte gegeben: Die Suche nach den oben genannten Konzepten bei Google wird nützliche Forschungsarbeiten und weitere Einzelheiten zur Verwendung der verschiedenen Bibliotheken enthalten.

+0

Danke; Ich verwende derzeit Ruby in meinem Projekt, aber Python sieht für diese Art von Arbeit wie eine bessere Alternative aus. – danmaz74

1

Das Beste für mich wäre einen Ähnlichkeitsmaß zwischen dem Foto zu haben und den Referenzbildern, so dass ich zu einem menschlichen Operator aus dem am ähnlichsten der mindestens ein ordneten die Bilder zeigen würde, sie zu machen Arbeit einfacher.

Ein Weg Leute sind dies mit der sogenannten "Earth Mover's distance". Kurz gesagt, man stellt sich jedes Pixel in einem Bild als einen Stapel von Steinen vor, deren Höhe dem Pixelwert entspricht, und definiert den Abstand zwischen zwei Bildern als minimalen Arbeitsaufwand, um eine Anordnung von Steinen in die andere zu übertragen.

Algorithmen hierfür sind ein aktuelles Forschungsthema. Hier ist ein Matlab für einen: http://www.cs.huji.ac.il/~ofirpele/FastEMD/code/. Sieht aus, als hätten sie auch eine Java-Version.Hier ist ein Link auf das Originalpapier und C-Code: http://ai.stanford.edu/~rubner/emd/default.htm

0

Versuchen Radpiminer (eines der am häufigsten verwendeten Data-Mining-Plattform, http://rapid-i.com) mit IMMI (Bild Mining Verlängerung, http://www.burgsys.com/mumi-image-mining-community.php), AGPL-Lizenz.

Es implementiert derzeit mehrere Methoden zur Ähnlichkeitsmessung (nicht nur trivial pixelweise Vergleich). Die Ähnlichkeitsmaße können für einen Lernalgorithmus (z. B. ein neuronales Netzwerk, KNN, SVM, ...) eingegeben werden und können trainiert werden, um eine bessere Leistung zu ergeben. Einige Informationen bout die Methoden wird in diesem Papier gegeben: http://splab.cz/wp-content/uploads/2012/07/artery_detection.pdf

0

Jetzt-a-Tage Deep Learning basiert Framworks wie Torch, Tensorflow, Theano, Keras sind die besten Open-Source-Tool/Bibliothek für Objektklassifizierungs-/Erkennungsaufgaben.