UPDATE: When I made this, I think I was a little in-over-my-head. All the individual pieces got too complicated (server, db, app, ML algo, etc) because I basically David Hasselhoff'd the project management (i.e. that there was none). I was too excited about making it that I thought project management would slow me down, so I just went straight to coding. I paid no heed to scope or resources.
I'm rebooting this project (DrawingGuide 2.0) and forcing myself to be a little more rigid with splitting stories into tasks and expanding the scope little by little (i.e. with a Lean Startup / MVP mentality).
The beginnings of my ambition to use computer vision (and, later, machine learning) to teach myself how to draw.
A more detailed write up about this project can be found here:
From talking to the "learning to draw" community as well as the "tried to draw and gave up" community, I realized that, also having tried to draw myself, that the most prominent problem is proportions (i.e. the nose is too big, that doesn't even look like a face..).
After reading Scott H Young's blog post on his 30 day drawing project,
I learned that, in order to speed up the trial/error iteration process, he superimposed his attempts of drawing his targets over the targets themselves with GIMP to see exactly where he messed up. I realized that (a) this is a very useful tool that is (b) very cumbersome to do every time and is (c) very much automateable.
So, I decided to make an app to do it. There will be several components:
- A React Native App on the phone for the interface
- A python (probably Flask) REST API server hosted somewhere that does the image processing
- A comparison algorithm
*that finds the optimal fit for the superimposition (which can be found here: https://github.com/joshualmitchell/DrawingGuide/blob/master/Description.pdf)
- A superimposition algorithm that takes the comparison algorithm's instructions and creates an image with the two superimposed
- A database (probably either SQLite or MySQL) that collects a whole bunch of information on all of this
- An AI Guide that uses the information from the database to create a prescribed "Learning Plan" that identifies where you're having trouble and generates images for you to draw specifically touching on what you need to improve on
So far, I have a prototype of the comparison algorithm. I need to build the rest.
* I wrote the comparison algorithm from scratch, but unfortunately I learned there was an extremely better way to do so: with PyTorch (since it's just minimizing a cost function with gradient descent).