Call For Testers: Graffiti2x : F200 Handwriting Recognition.


TrevorBradley

Active Member
Joined
Nov 6, 2007
Messages
732
Manjuu's comment in my last post got me thinking. It really should be possible to do handwriting recognition for the gp2x... Might be impossible or close to it, but it's worth a try.

So I decided to plug away at it and here's what I came up with after a few hours...

Graffiti2x Test 1

Graffiti2.png


This uses a variant of Palm graffiti to record letters drawn on the F200 screen. All I'm doing is looking at relative position from the last position: Up (U), Down (D), Left (L) or Right ®, and forms a sequence of movements. C is "LDR". F is "LD". Most of my work has been figuring out all the bizarre variants letters can take.

Right now the application only draws single letters, but of course this is only a test. Once I have a good library of handwriting codes I'll move on to actual document creation and editing. Watch the bottom of the screen for codes and recognized letters.

There are a few differences from Palm Graffiti. I've changed P (too much like D) and Q (too much like G). I've changed X to be Palm's alternate X to get a single motion. There's a background image to help you remember graffiti (or learn it if you never had a palm!)

There are a few button controls: Left and Right change the sensitivity. A higher number will include more of the green and red dots but have more noise and errors. Up and down change the min_distance... the distance between dots before they're counted. You may need to adjust these to match your writing speed...

My wife just came home and tried it out and had a lot of difficulty... I write faster than her... Either try practicing writing faster, or adjusting with up/down to see if it makes a difference.

I've only done the letters and a few special characters.. no numbers yet. E and G are frequently confused with each other...

I know I'm changing my mind if this is a drawing application, a handwriting application or a graffiti application.. I think I want to develop the variant that will actually work and that people will enjoy... :)

Anyways I'd like some feedback. Please remember it's a work in progress and that those codes are biased towards my handwriting style. Please let me know if you're left or right handed.

(and again, if you're having issues, try writing faster, or increasing the "m" value with the up and down keys)
 
Last edited by a moderator:
Wow, 2 weeks ago I had a lot of idle time at work and was considering all the various ways one could implement this. There isn't much open source stuff to base your work on, and I am curious how this will turn out, can't wait to try it later on this weekend or tonight!
 
Senor Quack said:
Wow, 2 weeks ago I had a lot of idle time at work and was considering all the various ways one could implement this. There isn't much open source stuff to base your work on, and I am curious how this will turn out, can't wait to try it later on this weekend or tonight!
I'm writing this pretty much from scratch, using some code I wrote a month ago to filter out touchpad noise.

I really wasn't sure how well the UP/DOWN/LEFT/RIGHT would work for graffiti... At first I tried a system with 8 directions (including the diagonals) but it got too unwieldy. The four directional stuff works pretty well.

However with only four directions diagonals can't really be done... I'm going to have to code in an exception for "Enter" (down and to the left) or choose another symbol.

I was thinking of pattern matching and doing "best fits", but a giant "if/then" statement appears to be working without fps issues. (Fenix doesn't have hashtables, maybe I should move to SDL and something a little more robust)

When you try it out you'll see how simple it really is.
 
Last edited by a moderator:
hi, i've just done some tests, i've done each character 5 times and checked them off here:

Key is: Correctly identified/ Unidentified / Incorrectly Identified
A 410
B 320
C 500
D 410
E 410
F 500
G 410
H 212 ( identified as k twice )
I 500
J 500
K 410
L 500
M 410
N 500
O 401 ( identified as u once )
P 500
Q 221 ( identified as w once )
R 221 ( identified as k once )
S 500
T 410
U 410
V 221 ( identified as q once )
W 500
X 131 ( identified as u once )
Y 500 ( i gave myself a few practices at this because the twirly end wasn't obvious for me and i found myself forgetting, once i got it it was perfect )
Z 500


You havnt implemented the numbers but i did them anyway cause i'm an idiot:
0 005 - same as O
1 005 - same as I
2 023 - identified as Z and A
3 050
4 005 - same as L
5 002 - identified as S
6 005 - identified as O or U
7 050
8 050
9 050

Space 401 - identified as Z once(RLR) where i guess the touchscreen stumbled
Return 014 - identified as I or F

Shift/Capslock - 500

Backspace 500

I'm impressed though, I see what you mean about the faster speed - definitely needs it.

Good luck with this!

Edit: i'm right handed btw :)
 
bencoder said:
hi, i've just done some tests, i've done each character 5 times and checked them off here:

...

I'm impressed though, I see what you mean about the faster speed - definitely needs it.

Good luck with this!
That's about in line with my tests, though I'm impressed you managed 4/5 on E and G.

What I'm really going to need here is the code (that DULR thing) for the mistyped letters.. if I punch those in we have a larger library to pull from and less errors. I know there's some noise, and that can be adjusted by tuning m and s. What I really need to figure out is if someone is semi-consistently getting a code I don't because our hands are different sizes, left handedness vs righthandedness, etc

Quick question... would it be easier to hold the gp2x sideways for this? that would make the screen a bit more "palm shaped"... Maybe I'll make it an option.

Thanks for testing this out, it lets me know I'm on the right track!
 
Last edited by a moderator:
Trevor Bradley said:
What I'm really going to need here is the code (that DULR thing) for the mistyped letters..
Ah sorry, I thought of that about half way through but didn't want to go back and do it all again :p

Perhaps you could let the user define how they do each one.. It would require a large rewrite, because it wouldn't really work as a big if statement, but might actually be less work on you in the end...

Or perhaps you could use what you've got as the defaults - but then if one is undetected, notify the user and allow them to choose which letter they meant, and add the RULDL/whatever code to the database under that letter. - so it can be used straight away, but trained up for the particular user's style.
 
Last edited by a moderator:
bencoder said:
Trevor Bradley said:
What I'm really going to need here is the code (that DULR thing) for the mistyped letters..
Ah sorry, I thought of that about half way through but didn't want to go back and do it all again :p

Perhaps you could let the user define how they do each one.. It would require a large rewrite, because it wouldn't really work as a big if statement, but might actually be less work on you in the end...

Or perhaps you could use what you've got as the defaults - but then if one is undetected, notify the user and allow them to choose which letter they meant, and add the RULDL/whatever code to the database under that letter. - so it can be used straight away, but trained up for the particular user's style.


Fenix isn't much for hashtables or databases.. but I might be able to store the letters in a large array...

I like the user defined idea though... I'll think about it.

Likely though I just need to be very clever about how the data comes back.. E for instance should ONLY be LDRLDR... I have to tune the system to ignore small variances...
 
Last edited by a moderator:
:gp2x B) UPDATE!!!! Radically improved handwriting recognition! Write an actual sentence! Numbers! Caps! Backspace! Free ponies!

Graffiti2x-test4
**EDIT: Change link to "Test 4"** -> New background graphic, changes to the letter g and number 0.

I realized that "m" didn't do a thing in the last update. "m" now means something different, the number of points in a direction before the console recognizes a change. It cuts out a ton of noise and gets rid of a lot of the crazy long codes (LURDRDRDRDR, etc).

Try leaving s (sensitivity) set at 10 and m (min_count) set at 2. If you write slowly, increase m to three or four using the up down keys.

To write a number use the right side of the screen, to write a letter, use the left side of the screen (like a real palm). You only need to start the letter/number on that side (first dot), once you start it can draw your letter all over the screen if you wish.

Space, Caps, and backspace now work.

At the bottom of the screen, there are three rows of text. The first is your written message. The second is your code with the deciphered letter. And the last is the raw code with UDLR for each point. The "m" setting filters this out.. So two "R"'s in a row is an actual R, and repeated characters aren't shown in the final code.

Press the "B" button to delete your message and start again. Sorry, Enter or Caps Lock doesn't work yet.

I'd really appreciate more testing. I've redone all the codes as best I can and I think this will work much better, particularly for slightly slower writers (I wouldn't recommend switching to m=1 for faster writers, that's pretty much the last version and the codes will be a mess). If you consistently draw a letter with a UDLR code that my system is rejecting, let me know and I'll add it in.

Again, this is a work in progress... If I feel comfortable with the codes I'll move to more traditional word processor.

I'm planning on allowing the gp2x to he held at a 90 degree angle (90 degrees right for right handers, 90 degrees left for left handers). That battery bulge is a great place to hold the console with one hand, and it's not like we're using the buttons that much... :) Other than MAME has anyone else developed code for the gp2x with the intention of holding it sideways?

EDIT: I just added Test 4 with a new background graphic... "G" was giving me horrible problems (it looks way too much like "E") and I realized a lower case g was just fine. You can still draw the upper case G if you like but expect occasional glitches. I also changed zero so that it's more clear it's supposed to go straight up, rather than left again on the upswing (which looks too much like a 6)
 
trevor, this last one is really great, congrats man

i was craping in my pants a few minutes ago so i quickly uploaded the app to my sd card and i rush to the toilet :lol:

but once there, i realize i forgot the pen

so i started to test it using my finger nail (i cut my nails yesterday, so it wasnt an ideal replacement)

and im amazed, i think it recognize what i was trying to write like 90% of the times, and when it doesnt, only took me one or two more tries

i cannot give you a list because of the situation and also i wasnt using the proper tool, but perhapps tomorrow i do a correct test

again, congrats man, you are going to the right place with this one and youre making this player more usefull, a working pad is one of the things it was really lacking

i think youre gonna end up making THE text application for it :)
 
I tested it with 10 tries for each using the default settings (s=10, m=2), and here is my result:

A
T RURRRRDDDDDD

B
R DDDDDUUUUURRRDDDLLURRRRDD
? DDDDUUUUUURRRDDDLRRRRDDDDLLL
R DDDDDDUUUUURRRDDLLRRRRDDDDDL
? DDDDUUUUUURRRRDLLLRDRDDDLL
? DDDDDDDDUUUUURDLLLLRRRDDDDLLL
R DDDDDUUUUUUUUURRRDDLURRRDDDL

C
L DDDDDDDDDRRRR

D
H DDDDDUUUUUURRRDDDDDL

E
? LDDDDDRRRRLLLLDDDDRRR
Q LLLDDRRRRLDLDDDRRR
? DDRRRRLLLLLDDRRR
? LDDDRRRULLLDDDDRR
? LDDRRRRULLLLDDRRR
? ULLLLLDDDRRRLLLLDDR

F
I LDD

G
? LDDDDDDRRRUUULLLURRR
O LLLLDDDDDRRRUULULRU
E LLLLLDDDDDDRRRULLRLRR

H

I
- D
- D

J
I DDDDL
I DDDDL

K
? DLLLLLUURRRDDD
? DLLLLLUURRRDD
? LLLUUURRRDDR
? DLLLLLUURRRDDD

L
space DRRRRRR

M

N
? UURRDDDDRRRU

O
U DDDDDDRRRRUUUU
U LDDDRRRRUUUUUU
U DDDDRRRRRRUUUUU

P
A UUURRRDDDL
? RRRDDDLLL
A UURRRDDDDL

Q
? LLDDRRRRUUUUDDDDDDR
? ULLDDDRRUUUUDDDDDDR
? LLDDDRURUUUDDDDDRR
? ULLLDDDDRRRUUUDDDDDDRRRRUU

R
? DDDDUUURURDLLDRRR
? DDDUUURRDLLLDDDRR
? DDDRDUUUURRDDDLDDRRR
? DDDUUURRDDDLLLRDDRR

S

T

U
? DRRRRUUU
? DRRRRUUU
? DRRRRRUUUUU

V

W
? DRRUUUUUDDDDRRUUU
U DDDDDDRRUUUUDDDDRLRU

X

Y
? DDDRRRUUUDLLLUURR
? DDRRRUUUUUDDDDDDLLLUUUR
? DDDDDDRRUUUUDDDDDLLLUU

Z
2 RRDLLLLDDRRR
2 RRRDLLLLDRR

0
# LLLLLDDDDRUUUUU

1
- -

2
1 URDDDDDDR
4 URDDDDDLRRR
4 URDDDDDDDRR

3
5 URDLLURRRDDDDLLL
# URDDDLLURRRDDLL

4

5
4 LDDDRRRRRDL

6
# LLLDDDDRRRRUULLLLDD

7

8
# LDDRRDRDLLLLUUURU
# LDDDRRRRDLLLLUUU
# LLLDRDDDDLLLUUUUU
# LDRRDDDDLLLUUUUU
# LDDDDRRRRDDDDLLLLUUUU

9
# ULLLDDRUUUD
# UULLLLDDDRRRUDDDDD
# ULLLDDDRUUUDD

space
- R

caps
- -
- U
? DRRLUUUUU

backspace
- L
- L
- L
- -
- L

The total number of correct tries is 311 out of 390, which is around 80% accuracy.

A lot of the mistakes were actually because of how I write. I start off kind of fast and then slow down, which the program has a hard time reading and would miss or fail to register enough points at the start causing the letter to be incorrect or incomplete. This is evident on characters that are just line strokes (i.e. I, 1, space, caps, backspace). If I slowed down a bit and made sure a few points were registered at the start, the accuracy would then significantly increase.

Another reason for the errors was that the program seems to sometimes discard correct points at the start or end of a stroke, and combine that with my writing style, which would result into a lot of missing or discarded points.

It seems the stray points aren't that problematic compared in the Writer test app. It's the opposite this time, with missing/discarded points as the main culprit.

So far, the app is already very impressive, and I do hope it would improve and eventually mature to a real app. :)

EDIT: Whoops... I didn't notice that a Test 4 was released. This test was done using Test 3. :p
 
Manjuu said:
I tested it with 10 tries for each using the default settings (s=10, m=2), and here is my result:

A
T RURRRRDDDDDD

B
R DDDDDUUUUURRRDDDLLURRRRDD
? DDDDUUUUUURRRDDDLRRRRDDDDLLL
R DDDDDDUUUUURRRDDLLRRRRDDDDDL
? DDDDUUUUUURRRRDLLLRDRDDDLL
? DDDDDDDDUUUUURDLLLLRRRDDDDLLL
R DDDDDUUUUUUUUURRRDDLURRRDDDL

C
L DDDDDDDDDRRRR

D
H DDDDDUUUUUURRRDDDDDL

E
? LDDDDDRRRRLLLLDDDDRRR
Q LLLDDRRRRLDLDDDRRR
? DDRRRRLLLLLDDRRR
? LDDDRRRULLLDDDDRR
? LDDRRRRULLLLDDRRR
? ULLLLLDDDRRRLLLLDDR

F
I LDD

G
? LDDDDDDRRRUUULLLURRR
O LLLLDDDDDRRRUULULRU
E LLLLLDDDDDDRRRULLRLRR

H

I
- D
- D

J
I DDDDL
I DDDDL

K
? DLLLLLUURRRDDD
? DLLLLLUURRRDD
? LLLUUURRRDDR
? DLLLLLUURRRDDD

L
space DRRRRRR

M

N
? UURRDDDDRRRU

O
U DDDDDDRRRRUUUU
U LDDDRRRRUUUUUU
U DDDDRRRRRRUUUUU

P
A UUURRRDDDL
? RRRDDDLLL
A UURRRDDDDL

Q
? LLDDRRRRUUUUDDDDDDR
? ULLDDDRRUUUUDDDDDDR
? LLDDDRURUUUDDDDDRR
? ULLLDDDDRRRUUUDDDDDDRRRRUU

R
? DDDDUUURURDLLDRRR
? DDDUUURRDLLLDDDRR
? DDDRDUUUURRDDDLDDRRR
? DDDUUURRDDDLLLRDDRR

S

T

U
? DRRRRUUU
? DRRRRUUU
? DRRRRRUUUUU

V

W
? DRRUUUUUDDDDRRUUU
U DDDDDDRRUUUUDDDDRLRU

X

Y
? DDDRRRUUUDLLLUURR
? DDRRRUUUUUDDDDDDLLLUUUR
? DDDDDDRRUUUUDDDDDLLLUU

Z
2 RRDLLLLDDRRR
2 RRRDLLLLDRR

0
# LLLLLDDDDRUUUUU

1
- -

2
1 URDDDDDDR
4 URDDDDDLRRR
4 URDDDDDDDRR

3
5 URDLLURRRDDDDLLL
# URDDDLLURRRDDLL

4

5
4 LDDDRRRRRDL

6
# LLLDDDDRRRRUULLLLDD

7

8
# LDDRRDRDLLLLUUURU
# LDDDRRRRDLLLLUUU
# LLLDRDDDDLLLUUUUU
# LDRRDDDDLLLUUUUU
# LDDDDRRRRDDDDLLLLUUUU

9
# ULLLDDRUUUD
# UULLLLDDDRRRUDDDDD
# ULLLDDDRUUUDD

space
- R

caps
- -
- U
? DRRLUUUUU

backspace
- L
- L
- L
- -
- L

The total number of correct tries is 311 out of 390, which is around 80% accuracy.

A lot of the mistakes were actually because of how I write. I start off kind of fast and then slow down, which the program has a hard time reading and would miss or fail to register enough points at the start causing the letter to be incorrect or incomplete. This is evident on characters that are just line strokes (i.e. I, 1, space, caps, backspace). If I slowed down a bit and made sure a few points were registered at the start, the accuracy would then significantly increase.

Another reason for the errors was that the program seems to sometimes discard correct points at the start or end of a stroke, and combine that with my writing style, which would result into a lot of missing or discarded points.

It seems the stray points aren't that problematic compared in the Writer test app. It's the opposite this time, with missing/discarded points as the main culprit.

So far, the app is already very impressive, and I do hope it would improve and eventually mature to a real app. :)

EDIT: Whoops... I didn't notice that a Test 4 was released. This test was done using Test 3. :p
Test 3/4 are identical.. just the background graphic.

The long codes are the source material... the line above gives the short code. From Test1 where fast strokes were best, Test 3/4 are best for slow writing.

I had my wife test the different letters. One major thing that came up was that the initial stroke was frequently left off, say the downstroke of the B or D, exactly as you describe. Test 5 (unreleased) fixes this somewhat by ignoring the mincount for the first character... It's a trade off... higher rate of error for that one character, to compensate for the fact that the human hand writes that first stroke really fast. That would have caught maybe 20% of the misses below.

What I really need to do is crank the FPS. That will help me get more data points. in those short strokes.

Thanks for the encouragement everyone. I'm going to give some thought as to where to take this next.
 
Last edited by a moderator:
A
T RURRRRDDDDDD

Upstroke too fast... might get fixed by FPS

B
R DDDDDUUUUURRRDDDLLURRRRDD
R DDDDDDUUUUURRRDDLLRRRRDDDDDL
R DDDDDUUUUUUUUURRRDDLURRRDDDL

You need that last leftstroke or else it's an R. Again, more FPS might help or my lastest fix.

? DDDDUUUUUURRRDDDLRRRRDDDDLLL
? DDDDUUUUUURRRRDLLLRDRDDDLL
? DDDDDDDDUUUUURDLLLLRRRDDDDLLL

DURDRDL... added
DURLDL... added
DULRDL... added, though fps would help here.

C
L DDDDDDDDDRRRR

No leftstroke, though more fps or my latest fix might help

D
H DDDDDUUUUUURRRDDDDDL

More fps or my latest fix might help.

E
? LDDDDDRRRRLLLLDDDDRRR

latest fix might help

Q LLLDDRRRRLDLDDDRRR

LDRDR... missing that leftstroke... more fps might help here.

? DDRRRRLLLLLDDRRR

missing points...

? LDDDRRRULLLDDDDRR
? LDDRRRRULLLLDDRRR

latest fix might help here

? ULLLLLDDDRRRLLLLDDR

latest fix/fps might help here

F
I LDD

latest fix will help here.

G
? LDDDDDDRRRUUULLLURRR

latest fix might help... but what's with that leftstroke?

LDRU*L*R

I'll add it... it's a very curly G (my wifes writing was much curlier than mine, I noticed this too)

O LLLLDDDDDRRRUULULRU

Right stroke is critical... more fps might fix.

E LLLLLDDDDDDRRRULLRLRR

This is the dreaded E/G problem... try signing with a lowercase g (as in the new graphic)

H

I
- D
- D

Latest fix should really help this.

J
I DDDDL
I DDDDL

More FPS will help, latest fix might help.

K
? DLLLLLUURRRDDD

LURD should already be in there...

? DLLLLLUURRRDD

DLURD

? LLLUUURRRDDR

LURD Again...
? DLLLLLUURRRDDD

DLURD AGAIN...

Hmm.. I must have added DLURD on my own since last night. Adding LURD....

L
space DRRRRRR

Latest fix should help.

M

My wife could get a bad M either. I seem to get them a lot... ;)

N
? UURRDDDDRRRU

Hmm.. FPS will help... Maybe latest fix? Missing that last U...

O
U DDDDDDRRRRUUUU
U LDDDRRRRUUUUUU
U DDDDRRRRRRUUUUU

That initial left stroke is critical! Latest fix should help.

P
A UUURRRDDDL
A UURRRDDDDL

need that last L... more fps.

? RRRDDDLLL

Need that upstroke... latest fix might help.

Q
? LLDDRRRRUUUUDDDDDDR
? ULLDDDRRUUUUDDDDDDR
? LLDDDRURUUUDDDDDRR
? ULLLDDDDRRRUUUDDDDDDRRRRUU

LDRUD... ok, sure, maybe no tail
LDRUDR... added last night
LDRUDRU.. Really? Interesting. That's one funky q. Adding.

ULDRUD
ULDRUDR
ULDRUDRU

I'll add the u versions too.. another curly q.

R
? DDDDUUURURDLLDRRR
? DDDUUURRDLLLDDDRR
? DDDRDUUUURRDDDLDDRRR
? DDDUUURRDDDLLLRDDRR

DULR
DURLDR
DURDR
DURDLDR

Adding all of these.. Diagonals are hard.. doesn't know to do RD or DR... all up to personal writing style.

S

My wife had very curly S's that were being missed... these are now added in.

T

U
? DRRRRUUU
? DRRRRUUU
? DRRRRRUUUUU

Latest fix should help this.

V

W
? DRRUUUUUDDDDRRUUU

Latest fix should help this.

U DDDDDDRRUUUUDDDDRLRU

Hmm.. FPS might help this... Might have been a lot of noise.

X

Really? I get a lot of x errors...

Y
? DDDRRRUUUDLLLUURR
? DDRRRUUUUUDDDDDDLLLUUUR
? DDDDDDRRUUUUDDDDDLLLUU

DRULUR
DRUDLU
DRUDLU again

adding them all.

Z
2 RRDLLLLDDRRR
2 RRRDLLLLDRR

RLR
RLR... these are correct. Write on the left hand side for letters! :)

0
# LLLLLDDDDRUUUUU

More fps might fix this.

1
- -

Latest fix should help.

2
1 URDDDDDDR
4 URDDDDDLRRR
4 URDDDDDDDRR

Hmm, need more FPS, but I've added all the 2 codes as starting with U as well... for curly 2s

3
5 URDLLURRRDDDDLLL
# URDDDLLURRRDDLL

Need more fps, latest fix might help, but adding all the U versions in for curly 3's.

4

5
4 LDDDRRRRRDL

Need more fps, latest fix should help.

6
# LLLDDDDRRRRUULLLLDD

Wow, a super curly 6! I'll add LDRULD... in fact, adding a bunch of codes that end in D.

7

8
# LDDRRDRDLLLLUUURU
# LDDDRRRRDLLLLUUU
# LLLDRDDDDLLLUUUUU
# LDRRDDDDLLLUUUUU
# LDDDDRRRRDDDDLLLLUUUU

8's a bit of a mess. Latest fix should help some of these, though more fps will solve it.

9
# ULLLDDRUUUD
# UULLLLDDDRRRUDDDDD
# ULLLDDDRUUUDD

Curly 9's... I'll prefix my existing codes with U. Latest fix might help a bit here.

space
- R

Latest fix will help

caps
- -
- U

latest fix will help.

? DRRLUUUUU

Looks like a cat jumped on you while you were writing... :) Or maybe you held down the pen too long.

backspace
- L
- L
- L
- -
- L

Latest fix should fix this.
 
Graffiti2x Test 6

Much better initial stroke recognition (This is my "quick fix" above)
New codes from manjuu (THANK YOU FOR TESTING!)
New codes from my wife (formally a tester at a computer game company... :)
Curlier letters should now work.
"Wrong" sound when a code isn't recognized (helps for testing, if it's annoying turn the volume down)

I figure this release brings the error rate down from 20% to more like 5%.

My quick fix isn't the one I thought it would be. The system now still rejects single letters at the start of the long code. However, I realized my noise filtering algorithm automatically threw away the first two dots! Now it only throws away the first dot. If I still see codes failing with a single first letter, I may try making an exception to the filter rule, rather than changing the double letter rule.

I still don't have an fps fix, though I know where the flaw is (repeating map placement)... but I've run out of time for today. Might have more time this evening. Right now the system seems to run at 30fps even though I've set it for 60. An FPS fix may open up a whole new can of worms, with new longer codes we didn't need before showing up.
 
Okay. I was already playing around with Test 6, but haven't gotten around to doing a real test. :p

It seems to be better, but indeed needs more points especially at the start and end of a stroke. (The FPS also sometimes dips which causes more points lost.)

Trevor Bradley said:
Z
2 RRDLLLLDDRRR
2 RRRDLLLLDRR

RLR
RLR... these are correct. Write on the left hand side for letters! :)
Yes, I knew they were correct, but the reason for these was because I was writing just slightly to the left from the center and due to the initial stroke having few or some discarded points which caused the program to recognize them as a number.

Trevor Bradley said:
caps
? DRRLUUUUU

Looks like a cat jumped on you while you were writing... :) Or maybe you held down the pen too long.
Yeah, I held it down too long to get additional starting points. :lol:
 
Last edited by a moderator:
Graffiti2x Test 7

No longer draws while you are touching the touchpad, leading to a dramatic FPS increase while taking in touchscreen input. Incredibly increased accuracy... after adding several new codes I put my own accuracy now at above 97%, AND I'm drawing much messier and faster than I used to. I can rattle off "The quick brown fox jumps over the lazy dog" in about 35 seconds with maybe one mistake.. mostly because my graffiti is out of practice...

I've also increased the distance between dots required for motion (5 pixels!), so if you haven't been writing big, you may need to. I had to do this for slow writers who might keep the pen in place for a long time. Let me know if this is an issue.

There are occasional crash bugs, which I believe are related to Fenix issues dealing with strings. Be sure to keep hitting the B button so that the text doesn't get out of hand. I'll be sure to fix this when I get to a proper editor stage...

Let me know how it works... :)

Manjuu said:
Trevor Bradley said:
Z
2 RRDLLLLDDRRR
2 RRRDLLLLDRR

RLR
RLR... these are correct. Write on the left hand side for letters! :)
Yes, I knew they were correct, but the reason for these was because I was writing just slightly to the left from the center and due to the initial stroke having few or some discarded points which caused the program to recognize them as a number.


There's actually a faint line that should be a visual aide as to which side you need to start on.. Let me know if I should change that. (Actually it really blocks the "U" graffiti... I'm thinking of having the graffiti help toggle on and off with one of the L/R trigger buttons...)

At some point I'm going to need to force users to write at the bottom of the screen, so that the upper screen can be used for word selection, cursor placement, etc. I might need to adjust my new "minimum pixels" between points when I do that...
 
Last edited by a moderator:
Not that I'm an F200 owner (so this doesn't apply to me - awesomely cool though it is), but might I suggest, rather than fixing the graffiti zone at the bottom of the screen, you find a way to float a letter-sized window over the rest of the program wherever the user drags it?

Or, alternatively, have two modes that can be toggled with either a button press or by tapping a box in the corner of the screen. If the box is red, then the whole screen is a graff pad. If it's blue, then you're editing the document.

Either way, you'd end up with more screen realestate for both tasks, and therefore, more versatility of use :)
 
Tobriand said:
Not that I'm an F200 owner (so this doesn't apply to me - awesomely cool though it is), but might I suggest, rather than fixing the graffiti zone at the bottom of the screen, you find a way to float a letter-sized window over the rest of the program wherever the user drags it?

Or, alternatively, have two modes that can be toggled with either a button press or by tapping a box in the corner of the screen. If the box is red, then the whole screen is a graff pad. If it's blue, then you're editing the document.

Either way, you'd end up with more screen realestate for both tasks, and therefore, more versatility of use :)
I like writing on the whole screen (or rather the half screen: letters left, numbers right) too much to give it up. And the F200 touchpad is to innaccurate and noisy to use a tiny portion of the screen. I'll probably find some sort of toggle.

I still like the idea of rotating the entire console 90 degrees to make a tall screen though my wife said it feels too top-heavy to hold). But for now I want to focus on the graffiti itself.Once it's very good I'll move on to other things.

Thanks for the suggestions. I'm still thinking about the next step... :)
 
Last edited by a moderator:
Here's my result for Test 7:

B
? DDDDDDDDDUUUUURDDDDLRRRDDDLLLLLLU

G
? ULLLLLLDDDDRRRRRUUUUUDDDDDLLLLLUU

H
S (no data)
V DDDDDDDUUUUURRD

- No data for the S as I accidentally overwritten the data before noticing. <_<
- The second was because it marked all the rest of the points on the last D as unwanted.

P
? LLUUUUUUURRRRRDDDDLLLLLLL

- It picked up unwanted points at the start.

R
? LDDDDDDDDDUUUUUURRRDDLLLLLLRRRRDDRR
? DDDDDDDUUUUUURDDDDLRDDDDRRDR

V
U DDDDDDDDDDRRRUUUUUUUUUR
? DDDDDDDDDUUUUUUUR

- The first one was just me not paying attention. :p

X
U (no data)

- Same reason like before, and I don't know how did this happen.

Y
? DDDDDDRUUUUUDDDDDDDLLUURUU

- It marked all the other points in the first R as unwanted. :(

0
6 LDDDDDDDDRRRRRUUUUULLLL
6 LLLLLLLDLDDDDDRRRRRRUUULLL

- This is just me being stupid; I was trying to write it like the letter O and only realized after.

3
# LURRRRRDDDDDLRRDDDDDDLLLLLLL
# URRRRRDDDDDDLRRRRRDDDDDDDDLLLL

- Those two started with a curly at the beginning.

5
# LLLLLLLRRDDDDRRRRRRRDDDDDDLLLLLLL

8
# LLLLLDDDDDRRRRRDDDDDDLLLLULUUURRRUUUU
# ULLDLDDRRRRDDDDDDLLLLLUUURRUUUU
# ULLLLLLDDDRRRRRRRDDDDLLLUUURRRUUU

9
# (no data)

- Same reason as before.

The total of correct is 370 out of 390, which is around 95%. Definitely an improvement. :)

There were 3 reasons for my mistakes. The first was just me not writing them properly as I was writing them really fast to see if the program could keep up, and I lost focus on strictly following the guide and was rushing (which is also the reason for those mistakes without data). The second reason is because it seems the added FPS (and filter tweak at the start) made it more sensitive causing more stray points (especially at the start and end) to be picked up and some were recognized as valid points. The last reason is that some valid points were flagged as unwanted (some were due to stray points being recognized as valid and invalidating the real points).

The program is now very usable; some more tweaks and it would be good to go. ;)
 
Manjuu, I won't have the time to take a look at these today or tomorrow, but I really appreciate the work you've been doing. The long codes aren't strictly required for me, but they are very helpful in visualizing what you're writing. I've started calling them Manjuu codes in my head.

Thank you to my Big Happy Dango Dango GP2X Family!

We may hit another round with punctuation marks. Have a look here to think ahead:

http://en.wikipedia.org/wiki/Image:palm_Gr...ti_gestures.png

I may need to write some of the codes that are focused on diagonals, or put in exceptions for diagonal motion, or add diagonals to my UDLR codes (though my initial tests showed this to generate too many codes. I'll likely code the system to look for specific diagonal strokes on the side.

Actually... Hmm.. That's it!

There's no reason why I couldn't generate a second code for diagonals.. 1357, completely independent of the current UDLR code, that would be used for enter, punctuation marks, or certain complex characters like x and k. (or g, e, q?)

It shouldn't be a huge addition to the processing time. (I'm stunned that the library lookup for these codes doesn't take a lot of time, but it's only done once per letter, instead of once per frame. I can afford it taking a tenth of a second)

EDIT: Hmm, interesting... It works really well, but since the 1357 is in 90 degree increments just like ULDR, a leftstroke at an angle just below the horizontal, to 45 degrees, would show up as both an enter and a backspace.

Hmm... I could narrow the band, so that the diagonals only registered at 22.5 degrees off each diagonal and threw away letters elsewise. This would be bad for the UDLR but we don't need hyper accuracy for these diagonals...)

EDIT2: actually... there's the solution... Do both ULDR and 12346789 and have two codes... but we only use the diagonal codes where they are needed for high accuracy. We could introduce numbered codes for alternatives if they're needed.
 
Back
Top