6 ms·
Show HN: ASCII Art with Overstrike
- clusmore 8y agoThis is awesome. You might want to add "Printed" to the front of your title, because I've seen quite a few ASCII art projects before and almost skipped over this, but the fact that it's printed is quite novel to me at least.
- kcmastrpc 8y agoSweet!
- 333c 8y agoThe "sub-character pixels" are such a clever idea! Nice work.
- dukoid 8y agoShameless plug: Done here for displaying images in modern terminals: https://github.com/stefanhaustein/TerminalImageViewer https://github.com/stefanhaustein/TerminalImageViewer I was wondering if I should try this for a more complete set of unicode characters (opposed to just block graphics), but I'd need find a good way to match slightly off positioning. Perhaps just register the same character multiple times, shifted by one px in each direction?
- inguz 8y agoNice!
- nebgnahz 8y agoRelated and fun: https://www.cse.cuhk.edu.hk/~ttwong/papers/asciiart/asciiart.html https://www.cse.cuhk.edu.hk/~ttwong/papers/asciiart/asciiart...
- inguz 8y agoVery very cool. I love their approach of looking for similarity metrics that are less sensitive to local misalignment, and this is something I'me very interested in exploring in the future. I'm not completely convinced by their distinction between "tone-based" and "structure-based", though. When they talk about structure, it seems to primarily mean 'edges'. Instead maybe a more useful distinction would be between "local optimization" (at the level of a single printed character), and optimizing "globally" or over a wider area of the image, and so allowing an iterative optimizer to find a really compact representation.
- inguz 8y agoA little more digging turned up a recent paper that uses Histogram of Oriented Gradients (HOG) along with neural-network training: http://www.jsoftware.us/vol13/355-SE3002.pdf http://www.jsoftware.us/vol13/355-SE3002.pdf
- newsch 8y agoWow, those are some impressive results! I've been wanting to do some ascii art on a dot-matrix printer for a little while now, and I was thinking of something similar to your "sub-pixel rendering" but had no idea how to research/implement it. I look forward to reading through your code and references more, and I really appreciate the history that you've written up here.
- symisc_devel 8y agohttps://art.pixlab.io https://art.pixlab.io does something similar using ML oriented approach (decision tree).
- inguz 8y agoVery interesting - thanks for the link. (This is exactly what I hoped HN would show me!) Several interesting things there. The use of Structured Similarity Index (SSIM) is probably better/faster than the Histogram of Oriented Gradients (HOG) that my project uses. And then, at runtime, I'm still doing a brute-force match (which is really slow) -- clearly there are big performance gains to be made by training a classifier. Their results are really good!
- inguz 8y agoAfter some more investigation... their paper is interesting. But: it's $25 to download their model file, and the trainer code and training dataset aren't published. Oh well.
- cryptonector 8y agoOverstrike makes ASCII the first multi-byte encoding of an internationalized character set (for the Latin family of scripts anyways). I'm not kidding. The ASCII character set was actually designed to permit overstriking to yield a variety of characters such as, e.g., á. But of course, this follows from the fact that the typefaces used in typewriters were so designed. Historically that is how people wrote characters like á and ç back in the age of typewriters. This is also why Spanish rules made accents on capital letters optional: it wasn't easy to typeset those on typewriters. The way to encode á, then, was: a BS ' (a, backspace, apostrophe). Do I have sources for this? I've lost track of them, and I'm not going to look just now...
- inguz 8y agoThere's a text-printer 'Cedilla' (https://www.irif.fr/~jch/software/cedilla/ https://www.irif.fr/~jch/software/cedilla/) that uses this composition across large parts of Unicode - to quite good effect it seems. The Teletype doesn't do backspace (!) but can do carriage-return... so e.g. to print "Björk" , the text is: BJORK(CR)(space)(space)(quote). I have a Teensy microcontroller that already handles some ANSI-escape characters, and implements the 'backspace' ^[[D this way (https://github.com/hughpyle/ASR33/blob/master/firmware/ansi_escape.cpp https://github.com/hughpyle/ASR33/blob/master/firmware/ansi_...). Next on the backlog is "bold", using a similar strategy. Fun times :)
- terramex 8y agoYou chose some great albums covers to showcase your project!
- inguz 8y agoThanks :)