-         
Seite 9 von 10 ErsteErste ... 78910 LetzteLetzte
Ergebnis 81 bis 90 von 91

Thema: Vision-Erkennung bei Bestückungsautomaten

  1. #81
    Erfahrener Benutzer Begeisterter Techniker Avatar von Slowly
    Registriert seit
    08.05.2004
    Ort
    24558
    Alter
    52
    Beiträge
    271
    Anzeige

    Brauchst Du so etwas hier ?
    Klicke auf die Grafik für eine größere Ansicht

Name:	01022015837.jpg
Hits:	15
Größe:	51,8 KB
ID:	29733
    Oder sowas?
    Klicke auf die Grafik für eine größere Ansicht

Name:	01022015838.jpg
Hits:	12
Größe:	65,8 KB
ID:	29734

  2. #82
    Erfahrener Benutzer Robotik Einstein Avatar von 021aet04
    Registriert seit
    17.01.2005
    Ort
    Niklasdorf
    Alter
    32
    Beiträge
    4.905
    Danke für das Angebot, brauche es aber nicht. So ähnliche IR Module habe ich Zuhause, Kameras habe ich auch, sind aber normale Webcams. Die reichen finden den Anfang. Muss aber wie gesagt noch einiges fertig machen.

    Werde es aber weiterhin interresiert mitverfolgen.

    MfG Hannes

  3. #83
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    Finde ich wirklich schön, dass da noch Leute mitlesen!

    Zwischenstand heute:

    OpenCV läuft nun mit dem VisualStudio und ich konnte ein paar Tests machen. als Ausgangsbild habe ich die vorhandenen Bilder genutzt. Das Farbbild wird in ein Graustufenbild gewandelt welches dann auf zwei Farben umgesetzt wird. Dazu nutze ich momentan einen festgelegten Threshold der dann im fertigen Programm irgendwann in der Kalibrierung automatisch ermittelt werden soll. auf das Bild wende ich dann die Kantendetektion an, die mir über die Matrix eine halbwegs gerade Linie zieht. Resultat:

    Graustufen: http://placerbot.org/OpenCV_test/L64...front_grey.jpg
    Graustufen mit Sobelfilter (Nicht verwendet, nur zur Anschauung): http://placerbot.org/OpenCV_test/L64...grey_sobel.jpg
    Schwarzweiß mit Threshold 120/255 : http://placerbot.org/OpenCV_test/L64...blackWhite.jpg
    Sobel über SW Bild: http://placerbot.org/OpenCV_test/L64...hite_sobel.jpg

    Wenn man den Chip richtig beleuchtet und das Lineal wegnimmt (ohne das stand der Chip leider nicht - die Nozzle wird schon alleine aufgrund der Schärfentiefe nicht mehr zu sehen sein) dann lässt sich da einiges machen. Ich muss sagen dass ich sehr zufrieden mit dem Ergebnis der Spielerei bin. Hätte mit diesem schlechten Ausgangsbild nicht annähernd so gute Ergebnisse erwartet.

    Für die Erkennung muss man sich dann noch die Region of Interest (ROI) heraussuchen und eine Beschreibungsdatei plus zugehöriger Datenstruktur ausdenken. Dann kann es an die Centroid Detection und den Algorithmus zur Kantendetektion gehen. Vielleicht hat OpenCV da auch etwas in Petto das ganz gut funktioniert. Das würde es um einiges einfacher machen! Später ist erstmal der Blitz dran

    Code (Schlimm, ich weiß - War aber sehr auf Ergebnisse erpicht!):
    Code:
        // Matrices to store the image file    
        Mat original, greyScale, blackWhite, sobelImg, blackWhiteSobel;
    
    
        // Params to save the images as jpeg
        vector<int> jpegParams;
        jpegParams.push_back(IMWRITE_JPEG_QUALITY);
        jpegParams.push_back(100);
        string fileName = "examples/L6470_light_front.jpg";
    
    
        // Read the input file
        original = imread(fileName);
        cvtColor(original, greyScale, COLOR_RGB2GRAY);
    
    
        //Save greyScale image
        imwrite("output_grey.jpg",greyScale,jpegParams);
    
    
        blackWhite = greyScale > THRESHOLD;
        namedWindow("Converted to BW image", WINDOW_AUTOSIZE);
        imshow("Converted to BW image", blackWhite);
        imwrite("output_blackWhite.jpg", blackWhite, jpegParams);
    
    
        Sobel(blackWhite, blackWhiteSobel, blackWhite.depth(), DERIVATIVE, DERIVATIVE, SOBELSIZE, 1, 0);
        namedWindow("Sobel applied to BW image", WINDOW_AUTOSIZE);
        imshow("Sobel applied to BW image", blackWhiteSobel);
        imwrite("output_blackWhite_sobel.jpg", blackWhiteSobel, jpegParams);
    
    
        
        Sobel(greyScale, sobelImg, greyScale.depth(), DERIVATIVE, DERIVATIVE, SOBELSIZE, 1, 0);
        imwrite("output_grey_sobel.jpg", sobelImg,jpegParams);
    
    
    
    
        waitKey(0);
    
    
        return 0;
    Geändert von einballimwas (01.02.2015 um 14:46 Uhr) Grund: Code eingefügt, zusätzliche Erklärungen

  4. #84
    Benutzer Stammmitglied
    Registriert seit
    09.03.2012
    Ort
    AN
    Alter
    46
    Beiträge
    46
    Wow, das kann sich doch sehen lassen. Ich würde gerne mithelfen, aber dazu brauche ich auch eine Kamera, welche dazu geeignet ist. Meine USB-Mikroskop-Kamera wäre von der Qualität her schon recht gut, aber wie triggere ich da das Bild? Die Windows-Software nutzt mir da ja nichts und eine API gibt es dafür anscheinend keine.

    @Slowly
    Was ist da für ein Objektiv drauf? Eignet sich die Kamera zur Bauteil-Erkennung?
    Was hat die für Anschlüsse?
    ...und das wichtigste: Was verlangst du dafür?

  5. #85
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    Habe meine Bestrebungen jetzt auf Matlab verlegt. Da geht das ganze einiges schneller... Habe ein bisschen mit der Hough Transformation gebastelt um den Winkel des Bauteils auszumachen. Das funktioniert schonmal ganz gut. Jetzt muss noch der Support Code drumrum geschrieben werden und dann geht es an die Boundaries der Bauteile. Wenn das steht, dann kommt noch ein Templatematching davor um zu erkennen ob es sich auch um das richtige Bauteil handelt. Dann ist die Phase abgeschlossen und der Demonstrator kann um Schrittmotoren zur Korrektur erweitert werden!



    Stay tuned for more! Das wird noch was

  6. #86
    Benutzer Stammmitglied
    Registriert seit
    09.03.2012
    Ort
    AN
    Alter
    46
    Beiträge
    46
    Erst mal Glückwunsch zur ersten Lagevermessung.
    Du solltest dich allerdings besser auf die Beinenden konzentrieren (Alle Beinenden erkennen, Mittelwert errechnen).
    Das hat mehrere Vorteile:
    1.) Auch Bauteile ohne Wärmeableitfläche können erkannt werden.
    2.) Fehlende oder stark verbogene Beine werden erkannt --> Ausschuss
    3.) Nicht der Gehäusekörper muss exakt ausgerichtet sein, sondern die Anschlüsse. Spätestens wenn du mal offene Spulen bestückst wirst du das zu schätzen wissen, denn da ist der Körper manchmal übest schief, aber wenn die Beine vermessen werden sitzt diese später trotzdem richtig auf den Pads.

    Aber soweit schon mal ein großes Lob. Die Kamera macht gestochen scharfe Bilder, damit lässt sich definitiv eine gute Bauteillage-Erkennung aufbauen.

  7. #87
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    07.05.2007
    Beiträge
    170
    Moinmoin!

    Hätte nicht gedacht, dass du noch mitliest

    Die Bilder sind leider von meinem Bruder auf einer 7D mit Makroobjektiv gemacht worden. Ich selbst sitze hier in Rumänien, bin krank und habe nur die Kamera, das Objektiv, aber keine Chips zum testen...

    Das ist der erste Test, den ich gemacht habe. Wir wollten drei Dinge wissen: Ist das das richtige Bauteil, wie krumm ist es und wie weit ab vom Zentrum ist es?

    Um mal zu testen habe ich die Hough Transformation über das gesamte Bild laufen lassen was natürlich viel zu lange dauert (mehr als eine Sekunde auf einem i7). Das meinte ich mit Supportcode: Zuerst sollte passend zum Bauteil eine Region of Interest festgelegt werden, die durch das Template definiert wird. In dieser schaut man dann nach Beinchen und nach dem Winkel. Dann muss eine Bounding Box um das ganze Bauteil gezeichnet werden, damit die Größe und die Position vom Zentrum ermittelt werden kann. Wenn das erfolgreich war, dann können Korrekturwerte errechnet werden und anhand derer geschaut werden ob das Bauteil vollständig ist. Hier würde ich das Template (Schwarzweiß bild) entsprechend rotieren und dann schauen wie viel Deckung mit dem originalbild vorhanden ist und wenn ein Beinchen fehlt eben Alarm schlagen.

    Es wird noch einiges an Wasser die Bega runterfließen bis das produktionsreif ist. Bis Dezember will ich aber auf eine halbwegs zuverlässige Bauteileerkennung und Positionskorrektur blicken können! Ich arbeite am Wochenende dran weiter

  8. #88
    Benutzer Stammmitglied
    Registriert seit
    09.03.2012
    Ort
    AN
    Alter
    46
    Beiträge
    46
    Vergleichst du ganze Bilder? Das ist viel zu kompliziert. In den professionellen Maschinen werden "Shapes" angelegt. Es wird also lediglich das Bauteil beschrieben.

    Beispiel SO-8:
    Erst gibt man die Maße des Körpers ohne Beine an, dann die Beinbreite und die Anzahl der Beine je Seite (4 oben, 4 unten, 0 links, 0 rechts) und die Gesamtmaße (aus denen dann die Beinlänge errechnet wird).
    Diese "Kontur" wurd nun auf einem Schwarz-Weiß-Bild gesucht. Der älteste Bestückautomet, den wir noch im Einsatz haben ist eine Panasonic MSF. Diese arbeitet mit einem Pentium 233 (also einem historischen Prozessor ), und hat 10 Bestückköpfe pro Portal. Wenn die nun an jedem Bestückkopf ein Bauteil hat "huscht" der Kopft einmal über die Kamere (dauert etwa eine Sekunde) und alle Bauteile sind vermessen. OK, das wird nicht der Pentium übernehmen, sondern eine Extra-Karte. Dennoch wird auch die Rechenleistung dieser Video-Karte begrenzt sein, wenn man bedenkt wann dieses Modell gebaut wurde (>10 Jahre).
    Mit einem i7 sollten selbst komplexe Bauteile in einem "kleinen" Sekundenbruchteil ausgewertet werden können.

    Was ich mal versuchen würde:
    Je nach Bauteil würde ich schon mal due Auflösung anpassen. Bei einem 0805´er Widerstand braucht man keine HD-Kamera. Da wäre eine Auflösung von 320x240 mehr als ausreichend. Du solltest also erstmal Shapes anlegen, anhand der Größe und der Details die Auflösung und den Auszuwertenden Bildbereich bestimmen.
    Weitere Beispiele:
    -Brückengleichrichter --> Großes Bauteil, aber nur 4 (große) Anschlüsse --> Wenn das Bauteil nun 3x3 cm groß ist wertet man 50% je Seite (also 100% insgesamt) mehr aus, da es ja auch außermittig an der Pipette hängen kann. Somit reicht ein Bildinhalt von 6x6 cm aus. Das ist schon recht viel, aber diesen kann man in einer sehr groben Auflösung auswerten.
    -Mini BGA --> Kleines Bauteil, aber viele kleine Anschlüsse --> Wenn der Mini BGA z.B. 8x8 mm groß ist reicht ein Bildinhalt von 16x16 mm aus. Dieer muss jedoch in einer hohen Auflösung vorliegen, um die einzelnen Balls noch gescheit zu erkennen. Es reicht nicht aus wenn man jeden Ball als ein Pixel sieht, denn dann erkennt man nicht wenn ein Ball beschädigt ist und man würde eine "Polungsecke" als einen Ball interpretieren.
    -QFP 240 --> Großes Bauteil, viele Beine, kleine Beinabstände --> Hier würde man einen recht größen Bildinhalt brauchen und zudem noch eine hohe Auflösung. Man kann aber etwas tricksen. Wenn man erst mit einer kleinen Auflösung die Lage des Bauteils ermittelt kann an danach nochmal hochauflösend die 4 Bereiche ansehen, in denen sich die Beine befinden. Gerade bei Feinpitch-QFPs ist es wichtig dass man sich die Beine genau ansieht, da diese oft schon in der Verpackung leicht verbogen sind (dünne Beine verbiegen ja auch viel schneller). Damit man später nicht mühselig reparieren muss wäre es besser QFPs mit verbogenen Beinen gleich auszusortieren. Den "Ausschuss" kann man dann immer noch von Hand bearbeiten (z.B. Beine richten) und danach wieder zum bestücken in die Maschine geben. Ein Bein an einem QFP zu richten ist definitiv einfacher als dieses später bei einem bestückten und gelöteten QFP auf der LP zu reparieren.

    Das sollte reichen mit den Beispielen. Wenn man also die Auflösung und den Bildbereich anpasst und ggf. nur bestimmte Bereiche hochauflösend anschaut kann man sicher enorm viel Rechenleistung (und somit Zeit) einsparen.

    Zum Thema mitlesen...
    Ja, ich lese noch mit, aber selber aktiv werden kann ich nicht mehr, da ich im Januar noch mal die Schulbank drücken werde (eigentlich jetzt schon ...Vorbereitung). Ich versuche per Fernlehrgang meinen Elektrotechniker zu machen. Da ich schon seit über 20 Jahren aus der Schule raus bin wird das alles andere als einfach. Somit kann ich mir in dieser Zeit keine Hobbys mehr leisten und werde mich auch an diesem Projekt nicht beteiligen können.


    Edit:
    Zur Shape-Erzeugung...
    Bei Panasonic werden die Shapes in verschiedene Klassen unterteilt. Je nach Klasse wird dann (wie oben beim SO-8 beschrieben) nur die Anzahl der Beine eingegeben und die Länge anhand der Differenz von der Gesamtkänge zur Körperlänge errechnet. Es gibt aber auch unsymetrische Bauteile (z.B, DPAK). Hier muss man natürlich die Länge des Beins mit angeben. Da die Beine auch in den Körper hereinragen können (wie z.B. beim DPAK) werden diese von außen nach innen vermessen.
    Eigentlich würde es ausreichen wenn man "immer" so vorgeht (mit Ausnahme der BGAs). Beinlänge mit angeben und von außen nach innen messen funktioniert auch bei symetrischen Bauteilen (wie z.B. SO-8 ) und selbst bei Chip-Bauteilen (z.B, 0805C, 1206R, usw.).
    Geändert von Holle (05.11.2015 um 07:08 Uhr)

  9. #89
    Erfahrener Benutzer Begeisterter Techniker Avatar von engineer
    Registriert seit
    24.01.2005
    Ort
    Raum Frankfurt
    Beiträge
    268
    Interessante Geschichte. Ich bin auch in die Thematik involviert und prozessiere Kamerabilder mit FPGAs. Ist da eine Vorverarbeitung drin?

  10. #90
    Neuer Benutzer Öfters hier
    Registriert seit
    18.06.2013
    Ort
    Berlin
    Alter
    54
    Beiträge
    11
    VisionSysteme breiten sich zur Zeit in allen Bereichen aus, gerade in der Fertigung und in der Mikroelektronik kommt die Produktion ohne
    Kamera und Bildauswertung nicht mehr aus. Hier gibt es für Schüler und Studenten kostenlos eine Software mit der man sogar die Bilder einer
    WebCam in Echtzeit verarbeiten lassen kann.



    Grüße
    K aus B.

Seite 9 von 10 ErsteErste ... 78910 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •