Bilderkennungsprogramm

KBrandt

Newbie
Registriert
Juni 2015
Beiträge
7
Liebe Forumuser,

ich arbeite zur Zeit an einem Projekt bei dem es in kurzer Zeit möglich sein soll die Vollständigkeit eines Sets, welches Teile mit unterschiedlicher Größe und Farbe,wie z.B. ein Lego-Set, zu bestimmen und bei Unvollständigkeit heraus zu finden, welches Teil fehlt, ohne lange das komplette Set zu durchsuchen. Hier ist mir der Gedanke an eine Bilderkennungssoftware gekommen, die mir direkt ausgeben soll, welches Teil fehlt bzw. welches Teil nicht zum Set passt. Eventuell durch Bildabgleich mit einem vorher eingespeicherten Bild mit vollständiger Anzahl der Teile?

Da ich mich mit dem Programmieren einer Software nicht auskenne, wollte ich hier einmal mein Anliegen vortragen.

Gibt es vielleicht schon ein Programm, welches man für solch eine Kontrolle einsetzen kann? Und wenn nicht, ist es überhaupt möglich so eine Software programmieren zu lassen? Wenn ja, wie viel Aufwand würde dahinter stecken?
 
Wäre das unvollständige Set wiegen eine Option? An der Gewichtsdifferenz zu einem vollständigen Set könnte man evtl auf ein fehlendes Teil Rückschlüsse ziehen. Geht natürlich nur wenn die Gewichte der Einzelteile alle unterschiedlich sind und es keine große Streuung gibt.
 
Wir haben versucht, durch das Wiegen auf die Unvollständigkeit schließen zu können. Da die jeweiligen Sets jedoch gleiche Teile in unterschiedlichen Farben, aber mit gleichen Gewicht enthält, ist es schwierig nur durch die Differenz heraus zu finden, welches Teil fehlt. Auch besteht die Möglichkeit, dass nicht nur 1 Teil fehlt, sondern mehrere Teile, was allerdings nicht anhand der Differenz zu erkennen ist. Nur mit einer kompletten Kontrolle der Einzelteile kann dann auf das fehlende Teil/ die fehlenden Teile geschlossen werden. Leider ist dies aber doch recht zeitaufwendig. Zudem ist die Waage leider tatsächlich nicht genau genug, weshalb es bei mehrfachem Wiegen des gleichen Sets zu leichten Abweichungen kommen kann.
 
Wenn du bei den Basics anfangen willst guck dir mal OpenCV an (oder gib es einem Programmierer falls ihr welche habt). Mit OpenCV ist es unter anderem möglich eine Software herzustellen, die Bilder "lernen" kann und beim betrachten anderer Bilder feststellen kann ob es Übereinstimmungen gibt. Vielleicht ist das ja ein Ansatzpunkt für dich wenn du nichts anderes findest.
 
Ok wenn das Problem so komplex ist wird das mit wiegen natürlich nichts. Da wird tatsächlich wohl nur ein optisches System in Frage kommen. Luxuspur hat ja schon auf kommerzielle Produkte in der Richtung hingewiesen. Es gibt aber auch freie Software in dem Bereich (auch in kommerzieller Anwendung). Hier wäre OpenCV zu nennen. Unter dem Stichpunkt "opencv object detection" findet man einiges bei google zu dem Thema.
 
Vielen Dank für eure Hilfe. :)

Wenn man sich solch ein Programm mit OpenCV programmieren lässt, wie viel Aufwand würde dabei entstehen und kann man ungefähr einschätzen wie teuer solch eine Programmierung wäre?
 
Habt ihr die Möglichkeit Studenten zu betreuen?
Könnte ich mir als interessantes Masterarbeitsthema vorstellen.

Edit: Beim zweiten Nachdenken ist das vielleicht doch nicht so ne gute Idee. Jemand muss dem Masterarbeiter ja auch fachlich zur Seite stehen und ich geh davon aus, dass ihr niemanden dafür in der Firma habt.
 
Zuletzt bearbeitet: (Hab's mir anders überlegt.)
Ja, die hätten wir, bzw. ist die Überlegung bei uns auch schon vorhanden, dieses Thema für eine Abschlussarbeit zu vergeben. Wollte zunächst einmal wissen, ob es überhaupt möglich ist und wie aufwendig das wäre.
 
Hab mir OpenCV eben mal genauer angeschaut. Meiner Meinung nach sollte es damit auf jeden Fall möglich sein. OpenCV liefert alle nötigen Funktionen um Objekte sowohl anhand der Form als auch anhand der Farbe zu erkennen. Vermutlich müsste man in dem Anwendungsfall die Erkennung in zwei Stufen ablaufen lassen: Zuerst die Objekte anhand der Form identifizieren, dann nach Farbe und die Resultate dann kombinieren. Dann wüsste man genau ob was fehlt oder ein Teil die falsche Farbe hat. Ob das zuverlässig funktioniert hängt dann aber stark von den Umgebungsbedingungen ab (Objekte dürfen sich nicht zu stark verdecken / die Form verschiedener Objekte muss hinreichend unterschiedlich sein / die Farben dürfen nicht zu stark variieren / usw. )

Der Aufwand des Projekts hängt wohl stark von der Kenntniss des Programmierers ab. Jemand der sich gut mit OpenCV auskennt dürfte das aber ziemlich schnell erledigt haben. Die benötigten Funktionen scheinen alle da zu sein. Jemand der zwar Programmierkentnisse hat aber wenig Ahnung von Computer Vision und OpenCV wird sich in die Materie reinarbeiten müssen. Letztendlich kommt es auch auf die Anforderungen and das Programm drauf an und inwiefern das ganze dann noch in einen Fertigungsprozess integriert werden muss.
Wenn das Programm läuft muss es noch auf die Objekte trainiert werden. Dazu baraucht man möglichst viele Bilder der Einzelteile aus allen Winkeln. Auch das dauert sicherlich nochmal ne Zeit (ist aber ne schöne Arbeit für einen Praktikanten/Azubi ;) ). Und jedes mal wenn sich die Objekte ändern muss der Schritt natürlich erneut durchgeführt werden.
Im laufenden Betrieb müsste es dann allerdings möglich sein mehrere Kontrollen pro Sekunde durchzuführen. Sollte sich also auch für relativ schnelle Prozesse eignen. Die Kosten im laufenen Betrieb sind dann sicherlich sehr gering. Mehr als eine Kamera(Webcam) und einen Computer braucht man nicht.

Hoffe das Hilft etwas weiter.
Natürlich alle Angaben ohne Gewähr. Bin auch nur ein einfacher Mechatronik-Student und kein Experte im bereich Computer Vision.
 
ClashHexmen schrieb:
Der Aufwand des Projekts hängt wohl stark von der Kenntniss des Programmierers ab. Jemand der sich gut mit OpenCV auskennt dürfte das aber ziemlich schnell erledigt haben. Die benötigten Funktionen scheinen alle da zu sein.

OpenCV stellt nur Grundfunktionalitäten zur Verfügung. OpenCV hat zwar Object Detection, also generell ein Objekt zu erkennen, hier wird aber Object Recognition benötigt, also ein Objekt identfizieren zu können. Und das ist verdammt viel Arbeit. Vor allem weil die Lego-Steine sich alle sehr ähnlich sein, da kann bei einem schlechten Winkel (weit außen im Bild) schon eventuell nicht mehr klar gesagt werden ob es sich um einen 1x1 oder 1x2 Stein handelt.

Das ganze wird unter Garantie sehr sehr teuer werden. Bilderkennung ist immernoch ein hochkomplexes Thema.
 
Macht nicht dieser "cascade classifier" in OpenCV genau das? In den Beispielen die ich gefunden habe erkennt der ein bestimmtes Objekt unter vielen (Eine Verpackung in einem Mülleimer voller Verpackungen oder eine Banane in verschiedenen Bildern mit noch anderen Objekten). Dazu wurde dieser classifier eben vorab mit Bildern der Verpackung bzw der Banane trainiert.
 
Ach stimmt, den gabs in OpenCV ja auch noch. Ja der kann das Lösen, wenn man eben ein paar Hundert Bilder pro Lego-Baustein hat um somit diesen die Form lernen zu lassen. Es kann funktionieren, aber höchstwahrscheinlich wird dann da auch noch viel Feintuning benötigt um wirklich gut die Lego-Bausteine zu erkennen. Denn das Problem an den Lego-Bausteinen ist ja, dass die sich alle sehr ähnlich sehen.
Die OpenCV-Bibliothek eignet sich immer als Grundbasis, es muss dann für Object Detection aber noch wirklich viel selsbt programmiert werden um irgendwann auf Erkennungsraten von >80% zu erkennen, und das kann je nach Anwendungszweck auch noch zu schlecht sein...
 
Ich glaube LEGO war nur ein Beispiel um den Anwendungszweck zu erklären. Was nachher wirklich erkannt werden soll wurde nicht explizit genannt. Aber wenn das Problem ähnlich komplex ist wie ein 100 Teile LEGO-Set mit kleinsten Bauteilen dann wird es sicherlich unmöglich.
 
Ich danke euch allen für eure Meinungen. Das hilft mir schon ein ganzes Stücken weiter. Es kann tatsächlich auch schon helfen, wenn das Programm sagen kann was für ein teil es ist unabhängig von der Farbe. Denn wenn es davon nur zum Beispiel zwei Teile in unterschiedlichen Farben gibt, dauert es nicht lange herauszufinden, welches Teil fehlt.
 
Mach dir mal um das Drumrum gedanken:
Wer löst das Bild aus? Drückt ein Anwender einen Button?
Wie siehts mit der Kamera und Beleuchtung aus - sind die fix montiert? Gibt es fremdlicht durch zB Fenster? Weil dann sind morgens eingelernte Bilder schon Nachmittags nicht mehr viel wert.
Sind die Teile symmetrisch genug? Legosteine sehen von der Seite bzw von oben oder schräg stark unterschiedlich aus.
Was genau soll die Maschine machen wenn sie im besten Fall genau sagen kann, welches Teil fehlt. Dieses auf dem Bildschirm irgendwie darstellen? Ein elektrisches Signal OK/NotOK schalten?
Wie verhindert ihr Verdeckung der Objekte? Ein verdeckter "Haufen" ist kaum automatisch auswertbar.
 
Meine Überlegungen gehen bisher in die Richtung, dass es eine feste Station gibt, an der die Auslösung eines Bildes durch eine Person durchgeführt wird. An dieser Station wird die Cam und die richtige Beleuchtung fixiert. Wenn unterschiedliche Lichtverhältnisse solch einen starken Einfluss auf das Lernen des Programms haben, besteht die Möglichkeit einen Platz zu finden, an dem es keine starke Beeinträchtigung durch Fenster gibt. Gut wäre es, wenn das Programm direkt angeben kann, welches Teil bzw. welche Form fehlt. Hier muss es nicht zwingend eine Unterscheidung der Farbe geben. Eine Anzeige mit Ok/Nicht Ok wäre in unserem Fall nicht ausreichend. Die Station sollte groß genug sein, um ein Set so auszubreiten, dass es keine Überlappung der Teile gibt.
 
Zurück
Oben