Hallo zusammen!,
Ich habe folgendes Problem:
Auf einem Förderband/Sortieranlage sollen zwei Bauteile unterschieden
werden. Quadrat und Kreis. Je nachdem was erfasst wird, werden die Teile
unterschiedlich einsortiert.
Ich weis es gibt auch einfachere Wege, aber ich will damit auch etwas
programmieren (C) lernen.
Also ich habe mir da zwei Varianten überlegt:
1. Eine Webcam die ein Bild erfasst und mit den zwei Vergleichsbildern
abgleicht.
2. Eine Webcam, die ein schwarz/weiß Bild erfasst. Allerdings wird hier
die Anzahl schwarzer Pixel ermittelt, und mit den zwei Mustern
verglichen.
Variante zwei erachte ich persönlich für einfacher...was meint ihr?
Optimal wäre eine Anbindung über Ethernet an WinCC. Eine Ausgabe als
Binäres Signal über den Com-Port reicht auch bzw über andere Binäre
Ausgänge.
Als Plattform möchte ich einen Rasberry verwenden, oder einen von diesen
Mini-Computern.
Nun weis ich aber nicht so recht wo ich anfangen soll.
Wäre über ein paar Denkanstöße dankbar. Eine fertige Lösung möchte ich
nicht einsetzen...ich wills ja auch verstehen.
Keine Sorge, es ist ein privates Projekt. Schönen Abend noch!
Andreas Z. schrieb:> Ich weis es gibt auch einfachere Wege, aber ich will damit auch etwas> programmieren (C) lernen.
Wenn du das Rastpberry PI nehmen willst nimm einfacher Python... (oder
etwas ähnliches, C ist da nicht besonders gut geeignet, ausser du hast
wirklich Ressourcen Knappheit, klingt aber nicht gerade so...)
>> Also ich habe mir da zwei Varianten überlegt:>> 1. Eine Webcam die ein Bild erfasst und mit den zwei Vergleichsbildern> abgleicht.
Vergiss es. Was machst du wenn das Rechteck um 45° gedreht ist?
Dann noch verschoben etc.
> 2. Eine Webcam, die ein schwarz/weiß Bild erfasst.
Schon besser, wobei die Webcam warscheinlich eine Farbaufnahme macht, du
machst dann eine Schwarzweiss Aufnahme draus.
Dazu berechnest du (wenn ich es richtig in Erinnerung habe) ein
Histogramm und musst irgendwo einen Schnitt machen, wenn die Beleuchtung
einigermassen passt funktioniert das zuverlässig.
Allerdings wird hier
> die Anzahl schwarzer Pixel ermittelt, und mit den zwei Mustern> verglichen.
Finde ich nur teilweise gut. Berechne den Umfang und die Fläche.
Der Umfang kann z.B. auch in Anzahl Pixel sein, es muss nicht in mm, cm
oder ähnliches sein.
Das Verhältnis zwischen Fläche und Umfang ist für Kreis / Rechteck
eindeutig, die Erkennung über diese Methode funktioniert zuverlässig,
aber nur solange sich Figuren eindeutig unterscheiden.
Grundsätzlich für so Erkennungen immer S/W Bilder verwenden (alles
andere machts nur komplizierter). Danach ist der Kreativität freien lauf
gelassen;-)
Es gibt kein richtig / falsch, nur funktioniert oder funktioniert nicht.
mfg Andreas
Vergiss Pixy. Nicht daß das was geworben wird nicht funktionieren kann,
sondern die HW hat einfach zuwenig Speicher um selbst was einfach zu
programmieren, wenn es überhaupt damit realisierbar ist.
Weiters brauchst du eine Kamera mit CCD Sensor, bzw global shutter.
Ansonsten wird das mit dem Laufband nicht, da du verzerrungen hast.
Früher hat man die Philips SPC900NC/00 gerne dafür benutzt, auch wegen
der geringen Verzerrung und diversen Einstellmöglichkeiten der Firmware.
Derzeit gibt es wenig Alternativen, ich selbst musste 100 Stück
bestellen,
mit 3 Monaten Wartezeit, dafür aber um ca 7€ das Stück. Und nein, ich
gebe
die nicht weiter da ich sie selbst für Projekte sowie für das Lager
brauche.
Vielleicht geht ein CMOS Sensor auch mit genügend Licht, dann könnte es
klappen. Ich würde einfach mal eine günstige Webcam nehmen und
austesten,
bzw eine die du bereits hast.
Im OpenCV einfach Threshold machen, vielleicht vorher Hintergrund
wegrechnen und dann Blob erkennen und anhand deren
Größe/Aussehen/Gewicht kann man die Entscheidung machen. Eventuell kann
man noch Hough erkennung machen, sollte ersteres nicht genügen. Sift,
Surf usw sind alle Patentiert und somit nicht frei einsetzbar.
Beim RPI kann man mittels HDMI/Composite das Videobild in Echtzeit
ansehen, und mittels OpenCV mit 5-11 fps die Berechnung machen, mit
Hough wird es 2-7 fps. Sowie Overlay auf dem Display zeichnen, recht
nett.
Wenn du Hilfe brauchst, melde dich, ich möchte aber reale Bilder haben,
am besten über Webcam aufgenommen und keinesfalls Jpeg, bmp funktioniert
gut. Dies mit Webcam, ansonten wenn Hochauflösend geht auch Jpeg.
Ev. Dorgem als Programm um die Schnappschüsse zu machen.
>Ich weis es gibt auch einfachere Wege, aber ich will damit auch etwas>programmieren (C) lernen.
Blödsinn, mit solchen feuchten Träumen und gnadenloser
Selbstüberschätzung der eigenen Fähigkeiten kannst du
das gleich wieder vergessen.
Andreas Z. schrieb:> Ich habe folgendes Problem:
Deine Probleme möchte ich haben...
> Auf einem Förderband/Sortieranlage sollen zwei Bauteile unterschieden> werden. Quadrat und Kreis. Je nachdem was erfasst wird, werden die Teile> unterschiedlich einsortiert.>> Ich weis es gibt auch einfachere Wege, aber ich will damit auch etwas> programmieren (C) lernen.
Zum einen: C ist Dreck. War immer Dreck. Wird immer Dreck bleiben. Und
letztlich ist die verwendete Sprache zur Lösung des Problems völlig
irrelevant. Es KANN notfalls sogar C sein. Z.B. wenn es nötig ist, weil
z.B. der Kameratreiber nur über eine C-Header als Interface verfügt.
(dann sollte man den Zulieferer wechseln)
> Also ich habe mir da zwei Varianten überlegt:>> 1. Eine Webcam die ein Bild erfasst und mit den zwei Vergleichsbildern> abgleicht.
Schwachsinn. Erstens bewegen sich Bänder normalerweise nicht
synchronisiert zur Kamera, weswegen ein einfacher Vergleich nicht
reicht, sondern zuvor erstmal herauszubekommen ist, welcher Teilbereich
der Aufnahme überhaupt mit dem Master zu vergleichen ist.
Zweitens genügt danach dann der Vergleich mit einem Vergleichsbild.
Wobei natürlich wegen der Rotationssymmetrie der Kreis das
Vergleichsbild sein sollte.
> 2. Eine Webcam, die ein schwarz/weiß Bild erfasst. Allerdings wird hier> die Anzahl schwarzer Pixel ermittelt, und mit den zwei Mustern> verglichen.
Das könnte durchaus funktionieren, wenn man die "edge conditions"
ausschließt, also nicht vollständig im Bild erscheinende Objekte. Und
natürlich muß gewährleistet sein, daß niemals mehr als ein Objekt im
Bild erscheint.