Hallo, ich habe mir eine Maschine gebaut, welche bedrahtete Widerstände je nach Wert in verschiedene Fächer einsortiert. Die Messung erfolgt elektrisch. Im Rahmen einer kleinen Projektarbeit möchte ich meine Maschine zusätzlich mit einer Bildverarbeitungslösung ausrüsten, mit welcher man die Farbringe der Widerstände entschlüsseln kann. Die Widerstände liegen an einer definierten Position (Aussparung in welche der Widerstand genau reinpasst). Der R ist also immer an genau der gleichen Stelle im Bildfeld der Kamera. Ich habe leider Null Erfahrung mit Bildverarbeitung. Also wirklich Null. Habe aber grundlegende Programmierkenntnisse in C, C++, Assembler, Arduino und fange gerade an Java zu lernen. Ich habe aber keine Schmerzen damit, mich z.B. soweit wie notwendig in Python einzuarbeiten. Als Hardware kommt z.B. ein älterer Laptop oder ein Pi in Frage. Kamera/Optik habe ich noch keine. Sollte auch möglichst günstig (max. 100€) sein. Kann man hier evtl. sogar eine billige Webcam verwenden? Meine Frage ist nun, wie ich solch eine Bilderkennung möglichst einfach realisieren kann. Habe gehört, dass OpenCV sehr verbreitet ist. Wäre OpenCV mit Kanonen auf Spatzen geschossen für diese Anwendung? Gibt es eine einfachere Lösung? Habe schonmal ein paar Tutorials zu OpenCV überflogen, kann aber noch nicht einschätzen wie aufwändig die Einarbeitung ist. Bin fast vollkommen frei, was die Wahl des Systems betrifft. Es sollte halt nur möglichst Freeware oder kostengünstig sein. Achja, hat jemand Erfahrung mit dem Bildverarbeitungs-PlugIn von MATLAB? Wäre das eine sinnvolle Option? (Als Student kann ich MATLAB kostenlos nutzen ..) Ich würde mich über jeden Tipp und jede Einschätzung sehr freuen :-) Viele Grüße Raphael
:
Verschoben durch Moderator
https://hackaday.com/2015/05/14/reading-resistors-with-opencv/ https://pub.tik.ee.ethz.ch/students/2014-HS/GA-2014-02.pdf http://armageddon421.de/?p=279 ...
Raphael Z. schrieb: > Im Rahmen einer kleinen Projektarbeit möchte ich meine Maschine > zusätzlich mit einer Bildverarbeitungslösung ausrüsten, mit > welcher man die Farbringe der Widerstände entschlüsseln kann. Wichtig ist da auch die Art der Beleuchtung. LEDs sind da eher nicht geeignet.
Der "optische" Teil sollte eigentlich - nach einiger Einarbeitung - kein Problem sein. Die Segmentierung sollte vor allem dadurch, dass eine Halterung besteht machbar sein. Aber auch hier droht ein Pferdefuß: Wird nämlich der Widerstand anders herum eingelegt so droht Ungemach. Also wo fängt nun der Code an. Nur im "Bilderbuch" ist der Streifen, der die Toleranz angibt, breit. Der "Messtechnische" aber schon. Jeder Hersteller hat eigene Vorstellungen davon was eine bestimmte Farbe ist. Rot, Orange oder ein etwas dunkleres Gelb? Je nach Lichteinfall: Ist es nun weiß oder silbern? Abhängig vom Alter ändern sich die Farben auch. Last but not least: Tierschützer kümmern sich gerne um aussterbende Arten. Aber außer für eine reine Spielerei, wird sich der Aufwand für bedrahtete Widerstände nicht lohnen
Harald W. schrieb: > Wichtig ist da auch die Art der Beleuchtung. LEDs sind da eher > nicht geeignet. Im Gegenteil. Wenn mehrere Bilder mit mehreren Beleuctungsfarben gemacht werden, läßt sich der Kontrast und die massiv erhöhen und die Entscheidungsschwellen weitaus grober einstellen.
@ Harald W: Ich wollte es evtl. mit kreisförmig angeordneten weißen LED's und großen Diffusor/Milchglas davor probieren, um möglichst homogenes Licht zu bekommen. Falls das Spektrum zu ungünstig ist vllt. doch lieber eine runde Neonröhre ... ebenfalls mit weißen Milchglas davor. @ Amateur: Ja die Widerstände sind sicherlich eine aussterbende Art. In diesem Fall werden die Bauteile im Rahmen von Laborveranstaltungen eingesetzt... also auf Steckbrettern montiert. Und da die lieben Studenten zu faul sind die Bauteile wieder richtig einzusortieren muss das irgendjemand machen. Deshalb habe ich den Roboter gebaut ;-) Aus Prestigegründen soll die Maschine aber noch mit Bildverarbeitung ausgestattet werden (und auch damit ich noch bisschen mehr lerne dabei). Da für die Aufgabe nur relativ wenig Zeit eingeplant ist, hoffe ich, dass es eine Lösung gibt, bei der ich mich nicht erst Monate lang einarbeiten muss ;-)
Sebastian R. schrieb: > https://pub.tik.ee.ethz.ch/students/2014-HS/GA-2014-02.pdf Hier ist die Auswertung und das Fazit interessant: Das größte Problem stellt die korrekte Farberkennung dar. Kein Wunder, selbst ein Mensch kann die gelben, braunen und roten Ringe nur mit viel Übung unterscheiden. Folglich habe ich die blöden Ringe schon vor 30 Jahren nicht auswendig gelernt, sondern ein billiges Multimeter benutzt ;-)
>Da für die Aufgabe nur relativ wenig Zeit eingeplant ist, hoffe ich, >dass es eine Lösung gibt, bei der ich mich nicht erst Monate lang >einarbeiten muss ;-) Bildverarbeitung ist ein relativ komplexes Thema. Die OpenCV ist ein recht umfangreiches Trumm. Also nichts, was man mal zwischen Frühstück und Mittag machen kann. Leider!
Walter T. schrieb: >> Wichtig ist da auch die Art der Beleuchtung. LEDs sind da eher >> nicht geeignet. > > Im Gegenteil. Wenn mehrere Bilder mit mehreren Beleuctungsfarben gemacht > werden, läßt sich der Kontrast und die massiv erhöhen und die > Entscheidungsschwellen weitaus grober einstellen. Dann braucht man aber mehr LEDs als RGB.
Raphael Z. schrieb: > @ Harald W: Ich wollte es evtl. mit kreisförmig angeordneten weißen > LED's und großen Diffusor/Milchglas davor probieren, um möglichst > homogenes Licht zu bekommen. Falls das Spektrum zu ungünstig ist vllt. > doch lieber eine runde Neonröhre ... ebenfalls mit weißen Milchglas > davor. Weiße LEDs sind schon ok. Ihr Spektrum hat zwar meist eine Delle im blau-grünen Bereich, dieser Bereich ist aber für die Erkennung der Farbcodes ohnehin nicht relevant. Ganz schlecht für diesen Zweck ist meiner Erfahrung nach Glühlampenlicht wegen des kaum vorhandenen Blauanteils: Ich habe eine Serie von Widerständen, bei denen im Glühlampenlicht die violetten Ringe praktisch nicht von den braunen zu unterscheiden sind. Selbst bei einem 470Ω-Widerstand, wo ein violetter und ein brauner Ring direkt nebeneinander liegen, fällt die Unterscheidung sehr schwer. Daran ändert sich auch nicht viel, wenn man ein Bild mit einer Digitalkamera aufnimmt und nachträglich den Farbkontrast erhöht. Mit Sonnen-, LED- oder ESL-Licht mit ≥4000K macht die Unterscheidung überhaupt keine Probleme (egal ob live oder im Kamerabild), und das trotz des gegenüber der Glühlampe schlechteren Farbwiedergabeindexes Ra (so viel zur Aussagekraft des Ra, der IMHO u.a. genau solche Effekte berücksichtigen sollte). Zum Thema OpenCV: Das ist ein mächtiges Werkzeug, das es auf jeden Fall wert ist, einmal ausprobiert zu werden. Der Einstieg geht wahrscheinlich am schnellsten mit Python (sofern man dieses schon einigermaßen beherrscht). Die Bibliothek kann auch sehr gut zusammen mit NumPy (dem Numerik-Paket für Python) verwendet werden, da beide dasselbe interne Datenformat für Matrizen (d.h. auch für Bilddaten) verwenden. Da in deinem Fall die Position und Orientierung des Widerstands im Bild auf Grund der verwendeten Halterung vorab bekannt ist, beschränkt sich die Auswertung primär auf die Farberkennung. Da diese aber ziemlich anwendungsspezifisch ist, bietet die OpenCV diesbezüglich nicht arg viel Unterstützung, so dass du nicht umhin kommen wirst, dafür selber ein paar geeignete Heuristiken zu implementieren. Insofern lohnt sich eine intensive Einarbeitung in die OpenCV wahrscheinlich nur, wenn du diese künftig auch für andere Anwendungen einsetzen möchtest.
Markus schrieb: > selbst ein Mensch > kann die gelben, braunen und roten Ringe nur mit viel Übung > unterscheiden. Ach, das lernt man sehr schnell. Der Mensch kann auch leicht die Richtung erkennen. Z.B. br,br,br,rt,rt = 11,1k / 2% ist Unsinn, ein E192 Widerstand wird keine 2% haben. Der Widestand muß also andersum gelesen werden, d.h. 2,21k / 1%. Maschinell kann es schwer werden, die Richtung zu erkennen. Der Toleranzring ist manchmal etwas dicker oder hat einen größeren Abstand oder sitzt auf der Kappe. Jeder Hersteller kocht da sein eigenes Süppchen. Markus schrieb: > sondern ein billiges Multimeter benutzt ;-) Wenn der Widerstand eh in eine Halterung vor die Kamera geklemmt werden muß, kann man ihn natürlich auch einfach ausmessen.
Peter D. schrieb: > Der Mensch kann auch leicht die Richtung erkennen. > Z.B. br,br,br,rt,rt = 11,1k / 2% ist Unsinn, ein E192 Widerstand wird > keine 2% haben. Ich kann nicht alle E-Reihen auswendig. Ein Computer würde sich beim Plausibilitätscheck leichter tun...
Hallo "Hier ist die Auswertung und das Fazit interessant: Das größte Problem stellt die korrekte Farberkennung dar. Kein Wunder, selbst ein Mensch kann die gelben, braunen und roten Ringe nur mit viel Übung unterscheiden." Denn kann ich nur zustimmen: Es gibt vorbildliche Widerstandhersteller und Reihen da kann übertrieben gesagt auch ein Farbenblinder die Werte ablesen (5% Reihe 4 Farbringe , helle Farbe des Widerstandskörpers) vor allem wenn er die entsprechende E Reihe quasi auswendig kennt. Aber schon bei 5 (6) Farbringen, dunkler Widerstandskörperfarbe(Gerne ausgerechnet ein "schmutziges" dunkles Blau, Braun oder Rot ) wird es wie schon richtig erkannt schwierig bis teilweise unmöglich - besonders (weil man als Praktiker halt auf die typischen Werte trainiert ist und oft gar nicht mehr bewusst dekodiert sondern automatisch als "Gesamtbild" abliest, bei Braun Schwarz Rot Gold, wird wohl kein Praktiker wirklich noch dekodieren) wenn man es dann mit der E48 oder noch höheren E-Reihe zu tun hat und dann ausgerechnet doch mal der 0,18Ohm oder 15,8 GOhm Widerstand ist. Und gerade bei den Widerständen der hohen E-Reihen wird gerne auch noch der TK mit einkodiert und bei den dann notwendigen 6 Farbringen ist es oft auch nicht mehr klar erkennbar wie herum man nun richtig ablesen muss - da beide Leserichtungen sinnvolle Werte ergeben. Jemand
Peter D. schrieb: > Maschinell kann es schwer werden, die Richtung zu erkennen. Normalerweise sollte es ausreichen, beide Richtungen auszuwerten und dann die Werte auf Plausibilität zu überprüfen.
Harald W. schrieb: > Normalerweise sollte es ausreichen, beide Richtungen auszuwerten > und dann die Werte auf Plausibilität zu überprüfen. Die (relativ wenigen) verbleibenden Mehrdeutigkeiten sind hier aufgelistet:
1 | E48 (2%, roter Toleranzring): |
2 | |
3 | 2,05 kΩ (ro sw gn br ro) <-> 215 Ω (ro br gn sw ro) |
4 | |
5 | E96 (1%, brauner Toleranzring): |
6 | |
7 | 1,00 kΩ (br sw sw br br) <-> 110 Ω (br br sw sw br) |
8 | 100 kΩ (br sw sw or br) <-> 130 Ω (br or sw sw br) |
9 | 1,00 MΩ (br sw sw ge br) <-> 140 Ω (br ge sw sw br) |
10 | 10,0 MΩ (br sw sw gn br) <-> 150 Ω (br gn sw sw br) |
11 | 110 kΩ (br br sw or br) <-> 1,30 kΩ (br or sw br br) |
12 | 1,10 MΩ (br br sw ge br) <-> 1,40 kΩ (br ge sw br br) |
13 | 11,0 MΩ (br br sw gn br) <-> 1,50 kΩ (br gn sw br br) |
14 | 1,30 MΩ (br or sw ge br) <-> 140 kΩ (br ge sw or br) |
15 | 13,0 MΩ (br or sw gn br) <-> 150 kΩ (br gn sw or br) |
16 | 14,0 MΩ (br ge sw gn br) <-> 1,50 MΩ (br gn sw ge br) |
17 | 113 kΩ (br br or or br) <-> 1,33 kΩ (br or or br br) |
18 | 1,05 kΩ (br sw gn br br) <-> 115 Ω (br br gn sw br) |
19 | 10,7 kΩ (br sw vi ro br) <-> 127 Ω (br ro vi sw br) |
20 | 107 kΩ (br sw vi or br) <-> 137 Ω (br or vi sw br) |
21 | 127 kΩ (br ro vi or br) <-> 13,7 kΩ (br or vi ro br) |
Da sollte man versuchen, zusätzlich die Abstände zwischen den Ringen zu berücksichtigen. Oder der Automat leitet in Zweifelsfällen wie diesen eine elektrische Messung ein, die ja sowieso schon implementiert ist.
Wenn die Erkennung funktioniert, hätte ich eine praktische Anwendung dafür: Ich habe eine große Tüte mit aus den Bändern gefallenen 1% 0,6W-Widerständen. Da ich gefühlt maximal 5 Stück im Jahr verbrauche, wäre es sinnvoller, alle wegzuwerfen und die benötigten Werte jedesmal zu bestellen, selbst bei 5 Euro Versandkosten. Die Kompromißlösung wäre: Ich werfe bei Bedarf eine große Portion aus dem Sack auf den Tisch und unter die Kamera. Wenn die Bildauswertung den vorher eingegebenen Wert erkennt, leuchtet sie mit einem Fadenkreuz drauf. Oder fährt einen kleinen Greifer aus so einem Teddybärautomaten vom Rummel drüber. Oder plottet mit einem Filamentaufsatz einen Kunststoffgriff zum Hochheben dran. :) Mist, das ist eine patentfähige Idee, die ich hier so einfach ausplaudere. Ich fürchte aber, das wird schon vor ein paar Jahrzehnten irgendwo im Fertigungsbereich umgesetzt worden sein.
:
Bearbeitet durch User
Vielen Dank für die zahlreichen Beiträge, @ Markus: Über die korrekte Farberkennung habe ich mir auch schon Sorgen gemacht. Bei diesem Projekt ist es allerdings so, dass alle Widerstände vom gleichen Hersteller sind … daher müssten die Farben relativ gleichbleibend sein. @Amateur und Yalu: Mhm also ist OpenCV also schon eine aufwändige Geschichte? Als Bastler ist es natürlich schon immer interessant etwas dazu zu lernen … mir fällt das ein oder andere Projekt ein, wofür ich OpenCV auch verwenden könnte. Allerdings würde es mich nun schon abschrecken falls der Aufwand sehr groß ist. Gibt es irgendwo ein gutes Tutorial oder Buch für OpenCV? Und kennt jemand Alternativen zu OpenCV die einfacher und schneller umzusetzen wären für die Farbringdechiffrierung? Falls es ein empfehlenswertes "abgespektes" Tool gibt, wäre das eventuell auch eine Option für mich. Danke für die Tipps zur Beleuchtung. Ich habe einige Beleuchtungsvarianten daheim … werde hier dann mal rumprobieren. Das mit der Leserichtung würde ich auch so handhaben wie es @wilhelms und @Yalu beschreiben. @Wollvieh: Falls ich die Farbringerkennung so gut hinbekomme dass es funktioniert, stelle ich dir den Code gerne zur Verfügung, damit du die richtigen Widerstände detektieren kannst ;-)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.