Mustererkennung mit der Pi NoIR Camera V2

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo, ich bin neu hier und auch noch nicht ganz vertraut mit dem Raspberry Pi. Nun habe ich ziemlich viele Fragezeichen im Kopf und hoffe das ich hier einige Tipps bekomme wie ich mein Projekt lösen kann. Ich habe eine Praxisaufgabe von meinem Professor erhalten, welche ich für meine Abschlussarbeit erarbeiten soll. Es geht um folgendes: Ich soll eine Applikation für Schraubenkopferkennung mit Hilfe vom Raspberry Pi und dem Camera Modul erstellen. Das Raspberry Pi soll ein Bild einer Schraubenkopf aufnehmen und dieses Bild weiterhin verarbeiten. Ist das möglich mit dem Raspberry Pi?

    Hier die Verarbeitungsfolge:

    1. Bildaufnahme durch die Pi NoIR Camera V2 (Dateieingabe)
    2. Bild zuschneiden (Schraubenkopf fokussieren)
    3. Bild Verpixeln (den zugeschnitten Schraubenkopf Verpixeln)
    4. Merkmalsvektoren aus Grauwerten berechen (Die Pixeln in Vektoren ausgeben)
    5. Merkmalsvekter einer Schraube zuweisen (Die Vektoren zu dem genormten Schraubekopf zuordnen)

    9484b4-1476966447.jpg

    Als Bild füge ich die Abfolge der Schritte hinzu. Ich hoffe das ihr einige Tipps für mich habt. Wie ich mehrere Programme miteinander Verknüpfen kann, damit das Raspberry automatisch nach der Bildaufnahme , das Bild zuschneidet, danach verpixelt und so weiter.

    Einmal editiert, zuletzt von Drizzy134679 (20. Oktober 2016 um 14:24)

  • Hallo Drizzy,

    herzlich Willkommen in unserem Forum!


    Als Bild füge ich die Abfolge der Schritte hinzu. Ich hoffe das ihr einige Tipps für mich habt. Wie ich mehrere Programme miteinander Verknüpfen kann, damit das Raspberry automatisch nach der Bildaufnahme , das Bild zuschneidet, danach verpixelt und so weiter.

    Ehrlich gesagt, kann ich mir nicht vorstellen, dass eine adäquate Lösung darin bestehen kann, mehrere Programme aufzurufen, die in geschickter Folge aufgerufen, eine Musterekennung durchführen und letztlich die Aussage erfolgt "Schraube mit dem und dem Kopf".

    Vermutlich dient die Aufnahme der Kamera als Grundlage, ein eigenes Programm zu entwickeln, dass die restlichen von Dir aufgeführten Schritte durchführt - und als erstes eine Aufnahme der Schraube durchführt.

    Das heißt, dass Du Dir Gedanken machen solltest, in welcher Programmiersprache Du dies alles umsetzen möchtest. In welcher Programmiersprache hast Du denn entsprechende Kenntnisse?

    Ich habe mal etwas Ähnliches für Widerstände programmiert. Das Programm erkennt die Form, die Position der Linien und untersucht den Farbcode. Wobei die zweifelsfreie Farberkennung alles andere als trivial war. Bei der Gelegenheit habe ich dann noch grundlegende Fehler in den Farbmodellen aufgedeckt und in einer eigenen Bibliothek beseitigt. Und ganz besondere Herausforderungen stellen dann so Farben wie gold und silber, die aus Farbpigmenten UND reflektierenden Partikeln bestehen. Vor diesem Problem wirst Du bei metallischen Oberflächen auch stehen. Hier werden nahe beieinanderliegenden Pixel so unterschiedlich reflektieren, dass ein Pixel gleißend hell (= ca. weiß) sein wird, während ein Pixel weiter die Messing-Schraube ungefähr "Gelb" sein wird und bei einer Stahlschraube sich alle Grautöne von fast weiß bis mittelgrau abwechseln werden.


    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

    Einmal editiert, zuletzt von Andreas (20. Oktober 2016 um 15:00)


  • Hallo Andreas, erstmal danke für die schnelle Antwort. Ich habe leider nur bedingt kenntnisse in den Programmiersprachen, C, Assembler und VB. mit Python und co habe ich noch nie mit gearbeitet.

  • Hallo Drizzy,


    Hallo Andreas, erstmal danke für die schnelle Antwort. Ich habe leider nur bedingt kenntnisse in den Programmiersprachen, C, Assembler und VB. mit Python und co habe ich noch nie mit gearbeitet.

    Mit Assembler wirst Du auf die Schnelle nicht glücklich werden.
    C ist eine Allzweckwaffe unter Linux.

    Ich werfe dann noch mal Lazarus/FPC und Icon hinein - beides Programmiersprachen, mit der sich Dein Vorhaben auch erfolgreich umsetzen lässt.

    Beste Grüße

    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Ich wuerde die Wahl der Programmiersprache vor allem davon abhaengig machen, welche Unterstuetzung es fuer diese Art von Problemen gibt. Und da computer vision ueblicherweise mit der OpenCV-Bibliothek betrieben wird, sollte man zu einer greifen, die das unterstuetzt. Das sind Python, C und C++.

    Es gibt einen recht netten Einfuehrungskurs in Python, OpenCV und den PI auf http://www.pyimagesearch.com/ , der dir gegebenenfalls den Start erleichtert. Natuerlich kann man das auch in C machen. Die OpenCV-Dokumentation selbst hat auch einige nette Beispiele: http://docs.opencv.org/2.4/doc/tutorials/tutorials.html

    Allerdings erklaeren die weniger, warum man etwas wie macht.

    Fuer dein Problem koennten verschiedene Techniken erfolgsversprechend sein - simples TemplateMatching (allerdings mit rotierten Templates, weil deine Schrauben ja beliebige Lagen haben), Hugh-Lines, Hugh-Circles, SIFT und RANSAC, und ggf. auch Haar-Classifier.

    Um das besser zu beurteilen waere es gut, wenn du Testdaten erzeugst, die man dann begutachten kann. Das sollte fuer die Entwicklung eh geschehen.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!