Autor Beitrag
luckyluke84
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Di 06.11.07 18:40 
ScreenWriting

Schreib eine Zahl mit der Maus auf eine Fläche und
das Programm erkennt es. Bei mir klappt es, ich
würd gerne wissen, ob es bei euch auch klappt.
(Hinweise im Programm beachten !)

Ladet dazu mein Demoprogramm im Anhang runter: (Größe: 0,4 MB)

Update 06. April 08
* nochmals komplett überarbeitet, damit das Programm bald auch Buchstaben erkennen kann
* erstes Beispielprogramm (Alpha-Version)

Update 02. Jan 08
Folgendes wurde verbessert:
* bessere Zahlenerkennung
* bereits Geschriebenes verschwindet nicht mehr einfach so
* kleinere Demodatei
Ich habe die eine oder andere Idee umgesetzt ohne etwas zu löschen, was nicht mehr benötigt wird.
Deshalb gibts den Quellcode erst später.
Vorsicht: Manchmal stürzt das Programm ohne Grund ab.... den Fehler konnte ich bis jetzt noch nicht finden

Gebt mir euer Feedback!


Update 12. Nov 07
Ich habe bereits mit der Beschriftung und Erklärung der Unit begonnen, sowie die Erkennungsraten
verbessert. Mein Programm erkennt bereits (93%) meiner geschriebenen Zahlen. Testet mein Demo-
programm und schaut ob ihr mit/ohne Übung auch so eine rel. hohe Erkennung erreicht. Anbei dem
Demoprogamm ist eine Bild-Datei, die zeigt welche Schreibweisen mein Programm alles "unterstützt".


Update 8. Nov 07
Ich hab wieder ein paar neue Ideen gehabt die ich natürlich gleich
umsetzen musste. Ein paar Sachen funktionieren schlechter, viele
aber besser. Schaut euch die Demo an.
Der Source-Code ist ab sofort erhältlich, leider schreibe ich mit
Lazarus, daher weiß ich nicht wieviele Ihn angucken können.
Für alle die selber ein wenig rumspielen wollen gibts die
Unit + kleines Tutorial.


Gebt mir ein wenig Feedback:
- Welche eurer Zahlen erkennt das Programm nicht?
- Werden bestimme Zahlen immer falsch erkannt?
Einloggen, um Attachments anzusehen!


Zuletzt bearbeitet von luckyluke84 am So 06.04.08 17:47, insgesamt 8-mal bearbeitet
gehstock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Di 06.11.07 18:56 
Nur die 4 Zickt etwas rum ansonsten klappt es prima
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 06.11.07 19:02 
Er erkennt: 0 2 3 6 7 8
Mit viel Anstrengung: 1 5
Geht einfach nicht: 4 9
Mitmischer 1703
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 754
Erhaltene Danke: 19

Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
BeitragVerfasst: Di 06.11.07 19:08 
Bei mir klappt die vier :nixweiss:

_________________
Die Lösung ist nicht siebzehn.
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Di 06.11.07 19:11 
user profile iconYogu hat folgendes geschrieben:
Er erkennt: 0 2 3 6 7 8
Mit viel Anstrengung: 1 5
Geht einfach nicht: 4 9



Hi Yogu, kannst du mir mal einen ScreenShot zeigen/schicken, in dem du die Zahlen geschrieben hast,
die nicht oder nur schwer erkannt werden?
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Di 06.11.07 19:26 
Bei der Eins darf man keinen Schlenker einbauen, das habe ich wohl gemacht. Bei der Vier muss man den richtigen Winkel treffen. Die 5 und 9 hab ich als Anhang eingefügt. Diese zwei Zahlen krieg ich einfach nicht hin.
Einloggen, um Attachments anzusehen!
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 480

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: Di 06.11.07 19:27 
Hi,

Generell eine tolle Idee, und oft funktioniert das auch. Manchmal aber auch nicht, wie im Anhang recht klar zu sehen ;-)
Einloggen, um Attachments anzusehen!
_________________
We are, we were and will not be.
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Di 06.11.07 19:31 
user profile iconYogu hat folgendes geschrieben:
Bei der Eins darf man keinen Schlenker einbauen, das habe ich wohl gemacht. Bei der Vier muss man den richtigen Winkel treffen. Die 5 und 9 hab ich als Anhang eingefügt. Diese zwei Zahlen krieg ich einfach nicht hin.


Deine Neun wird mein Programm nicht erkennen... du schreibst sie eben nicht wie in der Schule..
Ist aber kein Problem, ich kann die Schreibweise hinzufügen.
Bei der 5 bin ich mir nicht ganz sicher... du scheinst zwischendurch abzusetzen.
Die 5 wird eigentlich immer erkannt wenn man entweder rechts oben mit einem waagerechten Strich
anfängt, odeer wenn man mit einen vertikalen Strich anfängt und den waagerechten nach einmal
absetzen zieht.

Probiers mal.
Tilman
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 1405
Erhaltene Danke: 51

Win 7, Android
Turbo Delphi, Eclipse
BeitragVerfasst: Di 06.11.07 19:44 
Also ich hab das Programm mal mit einem selbstgeschriebenen Spezial-Tool getestet, und praktisch alle Zahlen werden gut erkannt wenn sie aus geraden linien bestehen (hatte ich aber auch erwartet ;-))
Einloggen, um Attachments anzusehen!
_________________
Bringe einen Menschen zum grübeln, dann kannst du heimlich seinen Reis essen.
(Koreanisches Sprichwort)
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Di 06.11.07 19:57 
user profile iconTilman hat folgendes geschrieben:
Also ich hab das Programm mal mit einem selbstgeschriebenen Spezial-Tool getestet, und praktisch alle Zahlen werden gut erkannt wenn sie aus geraden linien bestehen (hatte ich aber auch erwartet ;-))


Cool... aber ich bin genauso gut wie dein Spezial Tool. Das liegt wahrscheinlich daran, dass
ich solange rumprobiert habe bis das Programm meine Schrift erkennt.
Einloggen, um Attachments anzusehen!
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: Di 06.11.07 20:11 
Eigentlich ist die Erkennung gar nicht so schlecht. Ich versuch mich grad selber daran, so ein OCR Programm zu schreiben.
Und "Screenwriting" ist laut Wikipedia was anderes. ;)
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Di 06.11.07 20:19 
user profile iconChryzler hat folgendes geschrieben:
Eigentlich ist die Erkennung gar nicht so schlecht. Ich versuch mich grad selber daran, so ein OCR Programm zu schreiben.
Und "Screenwriting" ist laut Wikipedia was anderes. ;)



Du hast ja so recht ;-) Ich habs von "auf dem Bildschirm schreiben" abgeleitet.
Das Programm "merkt" sich die Bewegungen der Maus und guckt zu welcher Zahl es
passt.

Vorerst werd ich das Programm/ die Unit nicht umbenennen. Bin aber offen für
eine bessere Bezeichnung.
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Mi 07.11.07 16:03 
Mich würde der Quellcode interessieren, wird es vielleicht eine Open-Source-Version geben?
gehstock
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19
Erhaltene Danke: 2



BeitragVerfasst: Mi 07.11.07 16:14 
wer sagt das man nicht absetzen darf
Einloggen, um Attachments anzusehen!
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Mi 07.11.07 17:31 
user profile iconchrisdrury hat folgendes geschrieben:
Mich würde der Quellcode interessieren, wird es vielleicht eine Open-Source-Version geben?


1.) Den Quellcode gibts für alle denen es interessiert. Noch ein wenig Gedult, er wird
gerade überarbeitet.


2.) Man sollte eigentlich nicht absetzen dürfen... Wenn's doch geht muss ich irgendwo ein Fehler gemacht
haben. Die 8 wird vielleicht erkannt... bei manchen anderen klappt das evtl. nicht.
GTA-Place
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
EE-Regisseur
Beiträge: 5248
Erhaltene Danke: 2

WIN XP, IE 7, FF 2.0
Delphi 7, Lazarus
BeitragVerfasst: Mi 07.11.07 18:11 
Ich hab Probleme bei 2, 4, 7 und 9.

_________________
"Wer Ego-Shooter Killerspiele nennt, muss konsequenterweise jeden Horrorstreifen als Killerfilm bezeichnen." (Zeit.de)
Sinspin
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1336
Erhaltene Danke: 119

Win 10
RIO, CE, Lazarus
BeitragVerfasst: Mi 07.11.07 18:56 
Also, schreibe ich ne Zahl schön leserlich wird mir gesagt das ich doch bitte nicht rumkritzeln soll!
Für ne 5 wird mir 4 gesagt (wenn ich glück habe), für nahezu jede andere Zahl wird mir gesagt das diese nicht erkannt wird.
Die Dialoge kommen wann sie wollen und, falls sie das Bild überdecken löschen sie den vorhanden Inhalt so das ich nicht weiter malen kann da ich nicht mehr sehe wo ich abgesetzt habe.
Im übrigen analysiert eine Schrifterkennung nicht die Bewegung des Stifts sondern eigentlich erst das vollständige gekrakel. Und, selbst wenn, hat es nix dagegen wenn man zwischendurch mal absetzt.
Ich habe schon ettliche OCR Projekte gesehen die einfach wieder eingestellt wurden weil es wohl doch mehr Aufwand gemacht hat als sich die Entwickler anfangs gedacht haben.

Ich kann nur alle bewundern die weiter machen und zu einem Ergebnis kommen!

Ich habe sowas mal für Verkehrsschilder ausprobieren können. Allerdings hatte ich dafür ein Leistungsstarkes Programm für neuronale Netze zur Verfügung. Den SOM Simulator von David Sommer Diplomarbeit David Sommer.

Wie das ganze laufen muss ist mir im großen und ganzen bekannt.
Hat man als Wissensbasis gut trainierte neuronale Netze, dürfte man recht gute Ergenisse erzielen. Wobei die eigentliche Erkennung von so vielen Faktoren abhängt, das man selbst mit einer guten Wissensbasis über die möglichen Formen der zu erwartenden Zeichen noch einiges zu tun hat um erstmal brauchbare Bildschnipsel zu erhalten die man den Netzen vorsetzen kann.

_________________
Wir zerstören die Natur und Wälder der Erde. Wir töten wilde Tiere für Trophäen. Wir produzieren Lebewesen als Massenware um sie nach wenigen Monaten zu töten. Warum sollte unser aller Mutter, die Natur, nicht die gleichen Rechte haben?
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Do 08.11.07 09:31 
user profile iconluckyluke84 hat folgendes geschrieben:

1.) Den Quellcode gibts für alle denen es interessiert. Noch ein wenig Gedult, er wird
gerade überarbeitet.


2.) Man sollte eigentlich nicht absetzen dürfen... Wenn's doch geht muss ich irgendwo ein Fehler gemacht
haben. Die 8 wird vielleicht erkannt... bei manchen anderen klappt das evtl. nicht.


Na da warte ich doch gern... :wink:
luckyluke84 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 54

WinXP
Lazarus
BeitragVerfasst: Fr 09.11.07 01:03 
Titel: kleines Tutorial
1.) Globale Variablen festlegen und Unit einbinden

Kopiert die Datei "screenwriting.pas" in eurer Verzeichnis und bindet sie folgendermaßen ein.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
uses screenwriting;

var
  Form1: TForm1; 
  MyWriting : TScreenWriting; 
  MausGedrueckt : Boolean;      // Wichtig für das Schreiben



2.) Jetzt benutzen wir ein paar Ereignisse des Formulars "Form1"

ausblenden volle Höhe Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
procedure TForm1.FormCreate(Sender: TObject);
begin
   MyWriting := TScreenWriting.Create;
   Panel1.Canvas.Pen.Width := 4;   // Geschmackssache wie breit der Stift malen soll
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
  MyWriting.Free;
end;

procedure TForm1.MouseDown(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Mausgedrueckt := True;
  Panel1.Canvas.PenPos := Point(x,y);
end;

procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
begin
  If Mausgedrueckt then
    begin
      MyWriting.AddPoint(Point(x,y));   // hier übergeben wir die Mauskoordinaten
      Panel1.Canvas.LineTo(x,y);        // hiermit zeichnen wir eine Linie
    end;
end;

procedure TForm1.Panel1MouseUp(Sender: TOBject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  Mausgedrueckt := False;

  // IdentifyNumber ist eine Funktion, die WAHR zurückgibt wenn "eine" Zahl erkannt wurde
  // ist ein Fehler aufgetreten oder wurden 2 Zahlen erkannt, wird ein FALSE zurückgegeben
  if NOT MyWriting.IdentifyNumber then    
     begin
        // Fehler
        showmessage('Bitte schreiben Sie deutlicher!' + chr(13) + chr(13) +   // chr(13) ist ein Absatz im Text
                   MyWriting.ErrorMessage);
     end;
end;


3.) Zu guter letzt fehlt noch eine Schaltfläche, die euer Ergebnis ausgibt

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
procedure TForm1.Button1Click(Sender: TObject);
begin
   ShowMessage('Deine Zahl lautet: ' + MyWriting.Text);   // Ausgabe der Zahl
   // eine Zahl kann auch mehrere Ziffern enthalten z.B.  12644

   MyWriting.New;   // Löscht die Zahl, sodass nun eine neue Zahl eingegeben werden kann
   Form1.Canvas.Clear;  // ein Versuch die Leinwand zu löschen... (klappt nicht immer bei mir??)
end;




4.) Viel Spaß beim rumprobieren.... eine bessere Erkennung ist in Arbeit. Solltet ihr
bei meinen Quellcode/Prinzip wirklich durchgucken, lass ich mir gerne helfen.
Denkt dran, das ist mein erstes "Programm"... es kann nur besser werden!

Moderiert von user profile iconmatze: Delphi-Tags hinzugefügt
chrisdrury
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 184

WinXP
D5 Prof
BeitragVerfasst: Fr 09.11.07 10:07 
Alles klar, danke schön!! :wink: :lol: