Reverse OCR(reverseocr.tumblr.com) |
Reverse OCR(reverseocr.tumblr.com) |
Is human handwriting anything more then repeated patterns with lines and shapes on a 2d plane?
A computer program designed by humans to assist with human constructs can infer meaning from what appears to be mostly noise to humans. It hits us hard because communication through complex language is the defining trait of our species. It manages to do what we do, and many people are intrigued by the results.
Are we just observing the results of our actions or did we just take one more small step towards the singularity?
The author published an open source library -- RNNLIB [1] used for his neural network research but is the actual code for this hand writing demo published somewhere?
It's a rather cool attempt to draw the Mona Lisa using random, semi-transparent polygons
Edit: Roger Alsing's implementation was a single entity population (mutated then reverted if the mutation was no good). I copied this approach in my first implementation, but found that much better results could be achieved with a breeding population of genes.
Ohhh, interesting, thanks for posting this! I just started playing around with this myself a few days ago in Javascript (it has no UI so no link yet, but I uploaded some samples [0]), and it also uses the original simple approach. I wondered about an "actual" gene pool and cross-breeding, but shyed away from the additional effort for uncertain benefit... so this helps, greatly :)
One thing I intend to try is to get the fittest (in terms of likeness to target image), and then calculate the fitness of the other genomes by taking the difference (in terms of variables that determine the shapes) to that "champion". I see you take the two most fittest as is, maybe this could be useful for picking the second one?
Also, when the Mona Lisa thing was posted on HN, someone suggested marking areas of the target image as "more important", to maybe make facial features etc. more recognizable. I'll also see if making such a mask automatically, e.g. influenced by contrast, helps any.
Or the message itself could also be encrypted with a more secure system, but then physically presented in an open area so that somebody with a tuned recognizer can get the encrypted data to later decrypt digitally.
Take handwriting, the more illegible the better. Then use a genetic algorithm where the fitness function is trying to find as small a perturbation as possible to the input such that the output is recognized as the letters you want.
No. It couldn't be used to tech an OCR. Well, technically, it could, but all the OCR will learn is how to read text from this bot, not how to read text written by people.
If you averaged over all those sets, would the resulting blobby heatmap resemble the original word in a legible form? Or something else?
The demo is nice, though.
> Type over this text to prove that you are a computer.
> Human detected. Shoo, shoo!
To be really really useful, the OCR would need to consider at least all characters in the Unicode Basic Multilingual Plane. And then it needs to be able to reject an image as containing any word, and then it needs to solve the halting problem.
Unless you're concerned about the rights of colour-blind computers for some reason.
Yep, we take the two most fittest unchanged, and breed the rest randomly along a non-uniform distribution tending towards the top.
> Also, when the Mona Lisa thing was posted on HN, someone suggested marking areas of the target image as "more important", to maybe make facial features etc. more recognizable.
This is a really good idea and would definitely make a difference. In my penguin example, with too few polys, sometimes we reach a local maxima before the eyes (small details) look any good. I combatted this somewhat by encouraging new polys to be (a) small and (b) regular. But I like the idea of a more guided approach.
There's an awesome javascript example you might find helpful: http://alteredqualia.com/visualization/evolve/
Edit: Your images look amazing. How do you make the vector shapes?
Thanks! I just use what the HTML canvas has to offer: circles, n-gons, and n-gons made of bezier curves. Those can get drawn both filled and as outline, which in turn aren't drawn with plain colors, but gradients made of 3 HSLA colors (alpha ranges from 0.05 to 0.85, to make sure everything matters at least a bit and doesn't just get covered up or disappear), with the position of the middle color stop, as well as the coordinates that define the gradient direction, being variable.
The linewidth is variable, and it can also use dashed lines with a randomized pattern, which looks funky but I haven't gotten a good result with it yet. Another thing I'll do is add allowing picking a random compositing mode (and in the spirit of the expedition, do that for both fill and outline), but then it will be too unpredictable to look like being made of shapes, I expect.
The background also has a gradient consisting of no less than 6 colors, with 4 variable color stops.. what can I say, I like enums and copy and paste haha. Though of course adding more degrees of freedom nilly-willy might not be the best idea.. I have to improve the whole evolution/mutation stuff a lot first, and then I intend to throw just about anything at it I can find, at least as an option. Right now I added words, though that doesn't seem very promising. But having one basic common function to setup fill and outline gradients for any and all shapes I might come up with makes experimenting with this a breeze.
I kind of feel I should be doing this with WebGL, but then I wouldn't have all those convenient drawing functions.. but still, whenever WebGL 2.0 comes (which will make a lot of compute-ish things a lot easier AFAIK), I want to do at least a polgon/circle/bitmaps thing with it, because I feel a speedup factor of a gazillion might just make up for that :)
There was that Russian Spy who was transmitting data for years on her Facebook account through steganography pictures on her Facebook account.
http://www.technologyreview.com/view/419833/russian-spies-us...
The FBI didn't know about it until after she was caught. So believe it or not, Steganography _works_. If you're trying to hide the fact that you're a spy, encrypting all of your messages over TOR is a bad idea.
On the other hand, if you pretend to be a normal person and embed secret messages in your Facebook posts, you can be a spy for years and not get caught.
I think one of the reasons stego works is because of the sheer amount of data being generated and shared in the modern world.
It's kind of a blessing and a curse for spy agencies. On the one hand, they love to collect data, and the more the better, since with more data to analyze, they can potentially learn more things. But the more data there is, the more computing power they have to throw at it to make sense of it.
So it's really not surprising that data can be hidden from spy agencies (possibly by relatively primitive means even), because they probably don't have the computing power (vast as their computing power is) to effectively run every possible detection algorithm and all their highly sophisticated (and probably computationally expensive) steganalysis software on so much data.
Videos, since they are so huge compared to other media files like text or audio, have always seemed like an ideal medium for stego to me. Of course, it's more difficult to preserve one's hidden data on sites like youtube that re-compress the videos that get uploaded to them, but any site that hosts original videos unmolested should be ripe for stego.
Right, but that means it inherits all the problems of security by obscurity, like it breaking as soon as the public knows the technique, which they do now.
My other point was that this seems to be equivalent to traditional stego solutions but with a key size equal to the algorithm size.
(And I'm not sure why merely asking about they key size problem and obscurity problem hurt the discussion enough to get hammered so hard...)
I never really understood why is it so.
Encrypted data must be indistinguishible from random, thus, if you replace any random projection of a file with your data, the result should be completely unrecognizable. It shouldn't really matter if your algorithms are public.
Is the problem that it's hard to get random projections from modern data? If so, why not use older formats?
From what I understand, ideally stego would be used in conjunction with encryption.
First, you would encrypt your message, then you would use stego to hide it.
If the stego is good, it would be a computationally intractable problem[2] for your adversary to determine whether there was indeed a message hidden within the data they were analyzing, with greater than 50% accuracy.
That said, I'm not sure how practical using an application like this would be for stego. It does not "whiten" the data it tries to hide, so unless the data's already whitened, it could potentially stand out like a sore thumb when subjected to steganalysis. And how would you propose actually using this?
This does present some intriguing possibilities, however, like maybe having Alice and Bob share a tweaked version of an OCR library and having Alice generate random images until her encrypted message has been "encoded" in such a way as to be recognizable by the tweaked OCR library that she shares with Bob. The tweaking of the library's character recognition parameters could be a sort of pre-shared key, and would not be available to Eve (the adversary).
[1] - this post comes from a hobbyist, not from any kind of security researcher, steganalyst, cryptoanalyst, etc. So please take what I say with a grain of salt and please correct me if I'm wrong.
[2] - "computationally intractable" being different for different adversaries, of course, which is one reason you need a good threat model.
It was the first link on Google that seemed to mention the FBI / Russian Spy case. So take it as "proof the thing happened", but ignore the article.
A tremendous caveat is that when we find ourselves shipping around lots of meaningless random bits, we often quickly reach for lossy compression that doesn't faithfully reproduce those bits, and that can break the scheme.