Bild Klassifizierung in OpenCV (Python), Basierend auf Training Set
Dies ist mehr der Allgemeine "wo finde ich gute Ressourcen, um etwas zu tun" - Frage. Ich bin versucht, die Verwendung von Python (OpenCV oder anderweitig) zu klassifizieren, die Bilder basierend auf training set.
Mein training-set: dieses besteht aus zahlreichen Bildern der Mängel am Produkt. Jedes Bild kann genommen werden in 1 von 3 locations auf dem Produkt und jedes Bild enthält 1 von 5 Arten von Sachmängeln. Die Mängel wurden manuell klassifiziert und validiert, indem ein Mensch.
Bilder zu klassifizieren: Diese sind aus ähnlichen Bildern, die im gleichen 3 Orten, aber die Art des Mangels ist nicht eingestuft (obwohl der defekte Bereich IST anerkannt durch das Werkzeug, das Bild macht, es ist nur, dass das tool nicht KORREKT klassifizieren und die ich nicht ändern kann das tool).
Habe ich versucht, zu tun, diese Klassifizierung, die folgenden Empfehlungen in dem Buch Programming Computer Vision with Python: Werkzeuge und algorithmen für die Analyse von Bildern. In diesem Fall benutze ich SIFT-Deskriptoren gespeichert in einer mySQL-Datenbank (Trainings-Daten) in einem Bag of Words-Ansatz. So weit ich bin nicht mit zu viel Glück (ich weiterhin zu beheben) und dachte, ich würde eine Beratung durch alle OpenCV-Experten da draußen.
Irgendwelche Referenzen oder Beratung wäre sehr geschätzt werden.
So, kommen wir zurück zu der Frage, von der ich dachte, dass es Wert wäre, zu teilen, was ich gelernt habe. Ich weiß nicht, dass es "die Antwort" aber das ist, wo ich schon gelandet. Ein work in progress, Sie kann immer besser werden.
Meine Lösung jetzt wurde zu kombinieren mit 3 verschiedenen Ansätze. Alle sind im internet suchbar, also ich gehe nicht zu ausführlich auf das wie.
Zuerst habe ich die SIFT-Ansatz, die Generierung von SICHTEN, die Histogramme über ein Kommandozeilen-Aufruf VLFeat. Dies kann eine option sein, die an anderer Stelle in Python, es ist genau das, was ich verwendet. Ich verwendete k-means-clustering zu tun, die den visual-Tasche von Wörtern Wortschatz Sache und Bauten eine Datenbank binden den Schwerpunkt s zu Wort Histogramme im Zusammenhang mit der Ausbildung Bilder. Ich verbesserte Ergebnisse ein bisschen durch hinzufügen einer Stamm-SIEBEN Schritt. Dann habe ich eine separate Datenbank mit Dichten SIFT (aber keine Stamm-SIEBEN-Einstellungen). Schließlich erstellte ich eine Datenbank mit Farb-Histogramme basierend auf den RGB-Komponenten der Ausbildung-Bilder. Ich brauche nicht alle 256 bins RGB-ging aber mit addiert man die einzelnen R -, G-und B-Werte über 8 Behälter und dann das abflachen der Werte zu einem 24-bin-Histogramm.
Dieser Prozess ist gefolgt mit dem unbekannten Bildern, und dann Histogramm-Vektoren im Vergleich mit der euklidischen Distanz. Ich habe versucht, Chi-Quadrat-Vergleich als gut, aber, in meinem Fall der euklidischen vorausgesetzt, bessere Ergebnisse. Ich nehme die top-3-Ergebnisse aus den einzelnen Prozess -, Bild-Klassifizierung, basierend auf 5 von 9 Stimmen. Wenn eine Mehrheit nicht erreicht werden, so wird die Analyse ist unbestimmt.
Für meine geschlossenen Bevölkerung der Bilder, die ich auf 3,1% misclassification rate von 3,1% unbestimmt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Habe ich das problem der Bild-Klassifizierung mit den Bag of features (BoF)und SVM. Ich habe es mit C++ und OpenCV, aber ich bin sicher, dass man ähnliche Methoden für python auch.
Konzept:
Erstellen BoF Wörterbuch:
Ausbildung:
Testen:
Finden Sie diese Artikel
Die Implementierung eines CNN in Theano wird Ihnen wahrscheinlich bessere Ergebnisse, als alles in OpenCV. Wenn Sie eine Suche auf Google scholar gibt es eine große Anzahl von Papieren auf Bild-Klassifikation mit CNNs - die meisten dieser Ansätze sollte nicht schwierig sein zu implementieren, mit Theano.
Können Sie versuchen, ein Modell zu bauen, durch das hochladen Ihrer Trainingsdaten (Defekt, Nicht Defekt) zu demo.nanonets.ai (kostenlos zu benutzen)
1) Laden Sie Ihre Trainingsdaten hier:
demo.nanonets.ai
2) Dann die Abfrage der API mit den folgenden (Python-Code):
3) die Reaktion sieht wie folgt aus: