Bildererkennungssoftware

targas

Newbie
Registriert
Mai 2019
Beiträge
1
Hallo CB-Community,

ein langjähriger Leser von CB - nur, dass ich meine Accountdaten nicht mehr habe und daher mich neu angemeldet habe.

Eins vorab: Ich bin kein Programmierer und haben maximal html-Grundkenntnisse.

Im Rahmen einer Projektidee stehe ich vor einer Herausforderung.
Mittels einer Kamera soll eine standardisierte, immer gleich große Fläche gescannt werden, auf der jeweils zwei kreisrunde, immer gleichgroße verschiedenfarbige Objekte (rot/gelb) positioniert sind. Die Anordnung und Anzahl der Objekte kann variieren, jedoch befinden sich jene immer auf dieser bestimmten Fläche. Die hieraus gewonnenen Daten sollen anschließend wie im Beispielbild angezeigt werden.
780347



Als Laie würde ich behaupten, dass dies kein großes Hexenwerk ist, jedoch habe ich keine Kenntnisse darüber, welcher Aufwand dahintersteckt, um so etwas zu programmieren. Ich würde mich sehr freuen, wenn jemand von Euch mir folgende Fragen beantworten könnte:
  1. Wo könnte ich mich zunächst in das Thema Bilderkennung einlesen, um besser verstehen zu können, wie die Technik funktioniert und mit welchen Herausforderungen/Hürden man konfrontiert wird?
  2. Gibt es universelle Objekterkennungssoftware, die entsprechend angepasst werden kann?
  3. Kann grob abgeschätzt werden, welcher Aufwand betrieben werden müsste?
  4. Ist spezielle Hardware notwendig? (Bestimmte Kameratypen etc.)
Dass ich die Software selber programmiere, gehe ich mal nicht von aus. Dennoch würde ich gerne im Falle einer Realisierung nicht ganz ohne Vorwissen auf einen Programmierer zugehen wollen.

Vielen Dank und schöne Grüße
targas
 
Zuletzt bearbeitet:
An der Uni hab ich mal mit OpenCV und AForge bezüglich Bilderkennung gearbeitet.
Sind halt nur Frameworks, das Programm "drum rum" muss man selbst schreiben.
Gearbeitet (OpenCV) haben wir damals auf einem Raspberry Pi mit einer 0815 Webcam.

Aber ohne zu wissen, was das für Objekte sind, und warum du die "als Kringel" haben willst ist es schwer was genaueres zu empfehlen.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: targas
targas schrieb:
Wo könnte ich mich zunächst in das Thema Bilderkennung einlesen, um besser verstehen zu können, wie die Technik funktioniert und mit welchen Herausforderungen/Hürden man konfrontiert wird?

Ich kann dir leider nicht sagen wo genau, aber das Stichwort zum Suchen ist: ComputerVision

targas schrieb:
Gibt es universelle Objekterkennungssoftware, die entsprechend angepasst werden kann?

Ich habe nur Erfahrungen zu Convolutional Neural Networks, diese sind aber auf beliebige Datensätze trainierbar. Du hast nur das Problem, dass du genug Trainingsdaten erzeugen müsstest.

targas schrieb:
Kann grob abgeschätzt werden, welcher Aufwand betrieben werden müsste?

Wenn du ein Standard CNN Model nimmst, was dir z.B. die Boundingboxen der Objekte erzeugt, dann steckt der wesentliche Arbeitsaufwand im erzeugen der Trainingsdaten. Wir reden von mehreren hundert Bildern, in denen manuell die Objekte mit einer Bounding Box gekennzeichnet werden müssen. (Wenn eine Bounding Box reicht und du keine Segmentierung haben willst, was deutlich aufwendiger wäre.

targas schrieb:
Ist spezielle Hardware notwendig? (Bestimmte Kameratypen etc.)

Zur Auswertung wirst du mindestens eine vernünftige GPU brauchen und im Falle des Einsatzes eines CNN zum trainieren im besten Fall eine NV GPU ab Mittelklasse mit ordentlich VRAM. Das Training auf CPUs ist durchaus auch möglich, da kannst du dann aber die Kiste so eine Woche rechnen lassen. Ansonsten reden wir vermutlich von Tag-Tagen Trainingszeit.

Hier mal als Beispiel das Framework und Netz (Yolov3) mit dem ich schon Erfahrungen gemacht habe:

https://pjreddie.com/darknet/yolo/

Der Fork hier ist deutlich besser zum Training geeignet als das Original: https://github.com/AlexeyAB

Du würdest das Netz so trainieren, dass du Bilder reinsteckst und die Koordinaten der Boundingboxen raus bekommst inklusive Klassifizierung.

Es gibt sicher auch Möglichkeiten einen eigenen Algorithmus zu dem Problem zu entwerfen, der evtl. auch weniger Rechenleistung braucht, mit so einem CNN hast du allerdings wenig Ärger, außer das die Generierung der Trainingsdaten relativ Aufwendig ist.

Das Darknet Framework kann ich dir auch nur empfehlen, das ist relativ schnell lauffähig zu bekommen.

Mit dem CNN Ansatz darfst du aber keine 100% Detektierung erwarten. Wobei sich da eh die Frage stellt ob dies überhaupt möglich ist. ;)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: targas
CNN ist hier total fehl am Platz.

Template Matching oder Hit-and-Miss.Transformation auf monochromen Bildern dürfte völlig ausreichen. Libraries dazu wurden ja schon genannt.
 
  • Gefällt mir
Reaktionen: Kanibal und targas
new Account() schrieb:
CNN ist hier total fehl am Platz.

Welche bessere Lösung als ein fertiges CNN Model, für welches man effektiv nur Trainingsdaten erzeugen muss, gäbe es denn für die Lösung der gestellten Frage: "Gibt es universelle Objekterkennungssoftware, die entsprechend angepasst werden kann?"

Natürlich sind die Anforderungen an die Hardware und der Lösungsansatz mit einem CNN vollkommen übertrieben für das simple Problem. Aber welche andere Lösung gäbe es denn für "universelle Objekterkennungssoftware"? Ich habe darunter verstanden, man will mit möglichst wenig bis gar kein Programmieren zum Ziel.
 
Welches "ein fertiges CNN Model" meinst Du denn genau?

[edit:] Oder anders gefragt: Welche NN-Architektur ist denn die Beste zur Objekterkennung?
 
Wenn es die beste Architektur gäbe würde keiner mehr an dem Gebiet forschen, oder?
Ich weiß nur, dass es für Segmentierungen effektiv nur eine handvoll Netzmodelle gibt welche dann in komplexeren Netzen wiederverwendet werden, wie z.B. Resnet.

Außerdem wäre die Frage wie das Bild überhaupt ausgewertet werden soll:
Segmentierung, Boundingboxen, Klassifikator, irgendwas anderes?

Wie oben schonmal erwähnt funtioniert Yolov3 relativ gut für Boundingboxen und Klassifikation: https://pjreddie.com/darknet/yolo/
Bis auf ein paar Parameter zum Einstellen (welche in einem Fork auf Github recht gut beschrieben sind), kannst du da einfach Bilder mit Boundingboxen und Klassen reinwerfen und bekommst etwas was erstmal relativ gut funktioniert ohne auch nur groß von Programmierung Ahnung zu haben.

Wie auch zuvor erwähnt liegt dann die Arbeit aber in der Erstellung der Trainingsdaten (Bilder und BB Infos), was ein nicht unerheblicher Aufwand ist.

Wenn du weißt mit welchen Algorithmen du das Bild, möglichst effizient, analysieren kannst, ist es natürlich sinnvoller hier ein eigenes Programm zu schreiben.

Wenn du aber aktuell einen Rechner mit ner dicken GPU rumliegen hast und einen Praktikanten der keine Ahnung von Programmierung hat, aber mal einfach 500 Bilder mit verschiedenen Situationen aufnimmt und zu diesen Boundingboxen einzeichnet, so kann auch ein CNN durchaus zum Ziel führen.

Ohne genauere Angaben zum Usecase ( geplante Plattform, Performance ) ist dies hier doch sowieso nur Spekulation.
 
Zurück
Oben