Zeichenauswertung

Modelle zum Nachbauen oder wo gibt es etwas interessantes oder Projekte?

Moderator: Moderatoren

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Zeichenauswertung

Beitragvon Peter28 » 20. Feb 2017 12:26

Hallo,
ich habe:
einen Scanner gebaut, der Zahlen und Zeichen mit dem Farbsensor erfaßt und 1 zu 1 auf dem Display darstellt. Die Koordinaten der gescannten Punkte könnten auch in ein Array geschrieben werden. "Melodie" - Dateien für die Zahlen 1- 20 habe ich erstellt.
Was möchte ich:
Meine Enkel (oder ich) schreiben 2 kleine (vom Wert her) Zahlen mit plus, minus oder mal sauber auf ein Blatt Papier und das "doofe" Lego sagt das Ergebnis. :prima:
Was suche ich:
Eine Möglichkeit, den gezeichneten Zahlen den konkreten Wert zuzuordnen und das Rechenzeichen zu erkennen. (hört sich doch recht einfach an) :lol:
Was weiß ich:
Habe mal gesehen, wie jemand ein Sudoku eingelesen hat. Die Sache müßte also funktionieren. Programmtechnisch arbeite ich mit grafischer Software bzw. EV3-Basic. Falls es dazu in anderen Sprachen etwas gibt, könnte ich es vielleicht umsetzen. Mir geht es nicht so sehr um ein fertiges Programm, sondern vielmehr um's Prinzip, wie man soetwas mit relativ einfachen Mittel realisieren kann - also den Fadenzipfel, an dem ich den Pullover auftrudeln kann.
Wer weiß etwas ?

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5398
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Zeichenauswertung

Beitragvon HaWe » 20. Feb 2017 14:15

hallo,
ja, ich weiß wie es geht und gehen könnte.

1.) mit deinen Mitteln machbar ist sicher Fuzzy Logic:
a) du erstellst Muster-Bitmap-Daten für jede Zahl und jedes Zeichen im 6x7 bis 6x9 Raster-Format
(ungenutzte Zeilen ggf. für Unterlängen, bei reinen Ziffern sicher nicht nötig)

Code: Alles auswählen

  **
 *  *
*    *
*    *
*    *
 *  *
  **

   *
  **
 * *
   *
   *
   *
   *

 ****
*   *
    *
   *
  *
 *
*****

b) du scannst ein geschriebenes Zeichen ein und normierst es nach Breite und Höhe ebenfalls auf 6x7 bis 6x9
c) du legst eindeutige s/w, also 1/0-Werte für jedes Pixel fest
d) du errechnest die Abweichungen pixelweise für jedes Muster (linear oder Summe der Quadratischen Abweichungen)
e) das Muster mit den geringsten Abweichungen ist das gesuchte Muster.
f) Optimierung: Einlesen der Werte wie oben, aber in 4 Graustufen mit entsprechender Gewichtung für die Abweichungs-Summen
Dieses Verfahren ist z.B. im Buch "Thomas Tilli, Mustererkennung mit Fuzzy-Logik (Franzis)" gut erklärt.

2.) ein 2-schichtiges Neuronales Netz mit Anlernen verschiedener handgeschriebener Zeichen,
ist aber mit X3 so gut wie unmöglich und mit EV3Basic extrem aufwändig.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 20. Feb 2017 16:50

Danke, das hilft mir schon weiter, war der berühmte Faden zum Aufwickeln. Ich glaube, durch die Fuzzy-Logik werde ich mich wohl nicht durcharbeiten. Wenn ich die Zeichen irgendwie nach dem scannen in ein definiertes Raster bekomme ( 6 x 9 ), kann ich das ja mit den Zahlen 0 - 9 vergleichen. Gibt es bei den einzelnen Punkten einen Treffer ist das z.B. 3 Punkte wert, wenn darunter, drüber oder r/l einen. Wer die meisten Punkte hat, bekommt den Zuschlag. Frei nach dem Motto: Probieren geht über studieren.

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 22. Feb 2017 17:43

Hallo HaWe,
habe jetzt mal ohne Fuzzy-Logik-Geschütz in VBA programmiert. Müßte sich fast 1:1 in EV3-Basic umsetzen lassen. Habe in Anlehnung an Dein Bild eine Textdatei als Vorlage, die als Raster für die Zahlen 0 - 9 dient. Erste Versuche mit unsauberen Zahlen in einem 6x9 Raster als Vorlage ergaben 100% Treffsicherheit, um welche Zahl es sich handelt. Wenn ich es jetzt noch schaffe eingescannte Zahlen auf ein 6x9-Raster zu reduzieren und die Helligkeit auf 0 oder 1 zu selektieren, kann der Brick dann auch mit relativ "einfachen " Mitteln Zahlen lesen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5398
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Zeichenauswertung

Beitragvon HaWe » 22. Feb 2017 19:02

klasse!
du schreibst: sogar ohne Fuzzy Logic - wie machst du den Mustervergleich dann genau?
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 22. Feb 2017 19:27

Kurzfassung:
habe ein Feld(6x9) mit Ziffer, die annähernd (z.B. gescannt) wie eine Vorlagezahlen aussieht. Die stehen in einem Feld (11x 879). Jetzt vergleiche ich die zu erkennende Zahl immer stückchenweise mit den Vorlagezahlen. Hat die zu erkennende Zahl bei Feld(x,y) eine 1, wird bei der Vorlage eine Zahl nach der anderen abgefragt, ob an der selben Stelle auch eine 1 steht. Wenn ja, wird ein Zähler auf Zähler+3 gesetzt. Außerdem werden bei der Vorlage die 8 Felder drum herum abgefragt. Wenn dort eine 1 steht (das ist dann die Ungenauigkeit) wird der Zähler um 1 erhöht. Auf diese Weise werden alle Vorlagezahlen von 0 bis 9 abgeklappert und für jede wird ein Zählerwert geliefert. Die Ziffer, für die die meisten Pünktchen herauskommen bekommt den Zuschlag. Habe es mit einer Reihe von Zahlen, die doch rechtstark von den Vorlagen abwichen probiert und es waren alles Volltreffer.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5398
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Zeichenauswertung

Beitragvon HaWe » 22. Feb 2017 19:35

ja, das ist nichts anderes als Fuzzy Logic, nur nicht mit dem von mir oben skizzierten, sondern mit deinem ganz eigenen Algorithmus 8-)

"Klassische Logik" wäre: Punkt für Punkt zu vergleichen (bitweises "AND"), und wenn alles übereinstimmt, ist es TRUE , ansonsten FALSE.

Fuzzy Logic verwendet Punktesysteme für eine Art "Wahrheitskorridor" oder "Vertrauensbereich", und nicht unbedingt absolute Zahlenwerte zählen hier für eine Bewertung, sondern (auch) die relativen Ergebnisse im Vergleich zu den anderen Kandidaten. Dabei ist es grundsätzlich unwichtig, ob du "Pluspunkte" für Treffer oder "Minuspunkte" für die Fehlerbereiche vergibst und dann den Kandidaten mit der höchsten Plus- oder der geringsten Minuspunktezahl verwendest.

So gesehen, hast du Fuzzy Logic für dich ganz neu erfunden, ohne es vorher gewusst zu haben! Nicht schlecht!
8-)
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 22. Feb 2017 20:35

Die eigentliche Auswertung sind nur 20 Zeilen Code und davon 75% for-next-Schleifen. Aber die haben mich bestimmt mit testen und so an die 5 Stunde Gehirnschmalz gekostet. Rentner haben zwar niemals Zeit, aber ich hab sie mir trotzdem genommen. Was jetzt noch etwas schwierig wird, eine auf Papier geschriebene Zahl zu separieren (es sollen ja nach Möglichkeit mehrere sein), die Außengrenzen festzulegen, der Sache das Raster zu verpassen und den Helligkeitswert für jeden Rasterpunkt festzulegen. Z.Z. schreibe ich ja nur einen Pkt. auf das EV3-Display, wenn das reflektierte Licht eine Schwelle unterschreitet. Teile die Motordrehung so, das das gesammte Display den Hub des Scanners erfaßt. Sollte wohl das Display ganz außen vor lassen, die Helligkeit aller 2° - 5° Umdrehung in ein Array schreiben und die Summe für jeden der 6 x 9 Rasterpunkte ermitteln. Dann die Schwelle für 0 oder 1 festlegen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5398
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Zeichenauswertung

Beitragvon HaWe » 22. Feb 2017 20:50

ja, das mit den 0/1 Schwellwerten ist das nächste Problem. Du würdest es etwas vereinfachen, wenn du eben doch Grauwertstufen verwendest (es müssen ja für den Anfang nur 4 sein), und dann vergibst du deine Bewertungs-Punkte graduell für Graustufen.
d.h. es sind jeweils 25%-Schwärzungsgrade, und statt 0 oder 1 als Zellwert hättest du jetzt 0,1,2,3 oder 1,2,3,4 in deinem 6x8 Raster.
Auch das ist eine Fuzzy-Logic-Methode.
Auch kannst du erst den Scan mit weit mehr Messpunkten durchführen (z.B. 30x40 mit zügigem drüberweg-ziehen des Lichtsensors, je nach Dicke der gemalten Linie, um sie nicht zu verpassen) und dann im nächsten Schritt auf 6x8 oder was auch immer herunterskalieren und interpolieren.
Das wird z.B. dazu führen, dass ein Messpunkt zwischen zwei Messzellen nicht unbedingt auf die eine oder andere festgelegt werden kann, sondern mit 50% Grauwert auf die eine und mit 50% auf die andere. Oder 25% auf die eine und 75% auf die andere, je nach Gewichtung und Lage der Messzellgrenzen
Unterm Strich wirst du damit aber deutlich bessere Musterkennungs-Trefferresultate erziehlen, selbst bei recht verschwommenen Rohdaten.
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 22. Feb 2017 22:31

Ich dachte ehr daran, relativ eng den Reflexionswert aller Pixel, die sich in einem Rastercarray (eins von 6x9, welches vielleicht aus 10 x10 Meßpunkten - Pixel - besteht) befinden zu addieren. Angenommen Grundreflexion ist 50, welche mit 40, 35 und evtl . 30. Das wäre praktisch das erfassen (die Summe) aller Helligkeitswerte. Ist der Rasterpkt. komplett sauber wäre das 10x10x50 = 5000. Alles was z.B. < 2000 ist (müßte empirisch ermittelt werden) ist schwarz, also 1. Mal drüber schlafen. Vielleicht liegt die Lösung unterm Kopfkissen.

Benutzeravatar
HaWe
Administrator
Administrator
Beiträge: 5398
Registriert: 11. Jan 2006 21:01
Wohnort: ein kleiner Planet in der Nähe von Beteigeuze

Re: Zeichenauswertung

Beitragvon HaWe » 23. Feb 2017 10:09

ich bin sicher, du findest eine praktikable Lösung, v.a. weiß ich ja gar nicht genau genug, wie dein jetziger Scanner tatsächlich arbeitet, um über das Ergebnis des Roh-Scans und damit dann auch über dessen mögliche Weiterverarbeitung etwas vorschlagen zu können. Auf jeden Fall klingt es schon jetzt, als seist du auf dem richtigen Weg! :prima:
Gruß,
HaWe
±·≠≈²³αβγδε∂ζλμνπξφωΔΦ≡ΠΣΨΩ∫√∀∃∈∉∧∨¬⊂⊄∩∪∅∞®
NXT NXC SCHACHROBOTER: https://www.youtube.com/watch?v=Cv-yzuebC7E

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 23. Feb 2017 16:49

Ist eigendlich nur wie eine Laufkatze in einer Werkhalle. Fährt hin und her und nach jedem h. u. h. wird die Laufkatze um ein paar Milimeter zu mir verschoben. Dadurch bewegt sich der Lichtsensor Zeile für Zeile ca. 5mm über dem Papier. Je nach dem, wie oft ich beim h.u.h. (x-Richtung) die Helligkeit messe und wie groß der Vorschub (y-Richtung) ist, kann ich eine relativ feine Rasterung erreichen. Weiß aber jetzt nicht, ob das Auslesen des Lichtsensors versagt, wenn die Abtastgeschwindigkeit zu hoch ist.
Bin jetzt dabei, VBA in EV3-Basic umzusetzen. Hört sich leicht an, aber... Da ich damit lange nichts gemacht habe und mit Arrays noch nie, ist das Arbeiten mit diesen natürlich erst mal nach dem Motto: Versuch und Irrtum.

Peter28
Schreibt viel
Schreibt viel
Beiträge: 185
Registriert: 2. Nov 2013 21:44
Wohnort: Schmallenberg

Re: Zeichenauswertung

Beitragvon Peter28 » 20. Mär 2017 20:14

Hallo,
habe seit langer Zeit mal wieder in EV3-Basic programmiert. Habe einen Scanner
gebaut, der handschriftliche Zahlen einlesen soll. Danach sollen diese abgeglichen und mit Tondateien genannt werden. Solange ich mit dem Basic auf dem Desktop bleibe ist alles gut. Sowie ich EV3 einbinde wird dieser beim Programmstart nicht gefunden. BT - Verbindung zum PC besteht. Alte Programme starten auch nicht mehr. Kann es an Win10 liegen. Weiß mir nicht mehr zu helfen. Hat jemand eine Idee woran es liegen könnte?
Im Voraus vielen Dank
Peter


Zurück zu „Projekte, Showcase, Bauanleitungen“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste

Lego Mindstorms EV3, NXT und RCX Forum : Haftungsauschluss