I plan on implementing SVG output pretty soon. It won't be hard I just haven't done it yet.
For the Twitter bot, I'm planning on adding another mode where it posts a GIF showing the iterative progression of drawing an image.
Let me know if you have any questions or if you have ideas for other features!
EDIT: Now I checked better your implementation and is very different, and indeed, can be made a lot faster. What I (and others before me) do is to have a fixed set of polygons and move, rotate, change color in order to find the best arrangement. In your case instead you add shapes incrementally in order to lower the error.
Will share another time, thanks again for the post.
The word "giclee" does not even appear in the description, but "inkjet" does. It's still an ordinary injet printer. It's bigger and more accurate than most. I've never seen them put in rooms so small that they'd "fill the room", I've usually seen them in rooms with several printers.
Then it isn't ordinary.
Although I remember growing up with one print that deliberately had a fold in it, made by the artist as part of the art.
There is a portion of the art market that caters for interior design. A client might say something like, "I want a dozen in this colour, style with an ocean breeze feel." As soul destroying as this may be to an artist, some clients want their art by the numbers, colours and feel.
... Then just come up with some fake name and portfolio website because I have a feeling that people will want to pay less for automatically generated art even if in a blind test they would like it more than a "real" one ;)
One of the key features of golang is concurrency. Your code is single-threaded, even though hill-climbing and annealing (and also all kinds of image operations) could be highly parallelized. Maybe that's something rewarding to look into at some point?
If you ever find the time, can you outline your strategy for your choosing a convergence algorithm? How did your experiments go for choosing the parameters (you called them maxAge, maxTemp, etc.) for those? Why did you currently end up choosing hill climbing over annealing, here: https://github.com/fogleman/primitive/blob/master/primitive/...
This is very cool. Thanks.
As far as other ideas, morphing from one photo to the next one. Making changes (morphing shapes, changing colors, adding / removing shapes) would look interesting.
Surely in using 'short' exclusively metaphorically, its metaphoric effect is lost entirely?
Similarly, the mosaic effect that they use on TV to hide faces sometimes leaves them still recognizable if I take my glasses off, even if they're completely unrecognizable when seen clearly.
I wonder if this effect works for people who aren't short-sighted? Like, maybe short-sighted peoples' visual systems develop to use more focus-invariant features.
(personally, since my eyesight without glasses or contacts is pretty bad, no more than 15 mins until I get annoyed with the difficulty spotting small objects and go for my glasses :p gonna laser those puppies one day, maybe. it's amazing living in an age where they can actually fix this sort of thing, shame if I didn't take advantage of it)
I'd be interested what the latest Neural Networks have to say about input like this.
I doubt it; they could just run it through a blur filter and then apply normal CV to it.
Jürgen Schmidhuber has done extensive study of so-called
low complexity art, see
I'm loving their twitter, too: https://twitter.com/PrimitivePic
Here it is, with the bash scripts:
upd: used a better video example and cleaned up the scripts.
Real-time graphics rendering is another story altogether, I don't see any trivial ways of applying this sort of thing for typical graphics pipeline.
A few years ago, there was an HN post about a similar algorithm: https://news.ycombinator.com/item?id=4912964
Inspired by this, I wrote my own implementation in Perl: http://qumsieh.github.io/blog/2012/12/14/Evolutionary-Image-...
Pretty cool effect.
It employs hill climbing and supports different kinds of shapes.
Edit: the "inspiration" for this is the same thing as Altered Qualia, Roger Johansson's post about genetic image evolution https://rogeralsing.com/2008/12/07/genetic-programming-evolu...
It uses TensorFlow to create come cool pictures.
"Android" Java https://github.com/jankovicsandras/imagetracerandroid
The position, shape, orientation and color of the primitives should provide a rather synthetic representation of the starting image.
You could make an image quiz out of this.
Or perhaps CAPTCHA?
Great to see the author is using this instead of the GA / evolutionary algorithm code it was inspired by.
You can see it in the results too, they are gorgeous! Annealing (and, apparently hill-climbing too) are just faster to converge, allowing to tweak better optimizations for the hyperparameters.
GAs are an attractive idea because, well, if you look around, evolution gives rise to such clever solutions and beautiful shapes. But people tend to forget natural evolution took billions of years, especially (sort of) the big leaps in complexity. Annealing is almost always a better solution, with the possible exception if your problem space is biologically inspired and you come up with a sensible crossover operation. If the crossover operation (or without one) doesn't have the right properties, a GA is basically equivalent to annealing (except in parallel), but much harder to tweak for fast convergence.
Please implement that svg output feature. If you need any help, you can find my contact details in my profile.
Some truly fascinating results to be had, depending on what you throw at it ..
Drawing a target image using a voronoi diagram.
I think if you could limit the internal angles of the triangles (as in, closer to equilateral) then you would get more aesthetically pleasing results.
- given an image, find similar images
- given image, find all images which it is a subset of
"Reconstruct a scene that is as similar as possible to a photograph" https://news.ycombinator.com/item?id=12371975
His results speak for themselves!