A break from regularly scheduled programming.
I got to thinking about handwriting while on a walk yesterday. Like so many things we do, it’s beautiful how we seamlessly coordinate half a dozen joints to externalize our memory.
I also find it interesting how most people have an identifiable scrawl. Mine is pure slop, but I suspect I could pick it out of a lineup. I bet this is true for most folks.
This got me wondering how hard it would be to generate a unique “hand” for a computer. My initial thought was to model the major joints and try to actuate these joints to generate letters. I’m not sure if this is already a Reinforcement Learning benchmark, but it’s closely related to a number of physics-based robotics tasks that are RL benchmarks.
After some toying around, I decided to go even simpler. You can see my proof of concept below:
You can click the “rewrite” button to regenerate the letters.
Further extensions I might explore:
- Correlated errors - When I write an “E”, first I write an “L” and then add the middle and top horizontal bar. I suspect the errors for the horizontal bars are correlated (i.e. they might slant upward or they might slant downward, but they will probably all slant in the same direction).
Scale error by distance - I suspect error increases the further you move your pen (a corollary of Fitts’s Law). Thus long strokes (or long moves that don’t generate lines) should be noisier than short strokes.
- Scale error by direction - Suppose you’re moving the pen vertically. I suspect your going to get more error in the vertical direction than you are in the horizontal direction. I believe this generalizes to any axis of motion.
Finally, if you happen to be Drake and you need a new album cover, let me know and I’ll definitely flesh out the text generation engine!