Posts tagged with “fx”
Have you seen Terminator Salvation yet? There's a bunch of cool visual effects developed by Imaginary Forces, it shows the world as seen by machines. There's a lot of object tracking going on there, I was thinking whether I could recreate the whole thing just in pure AS3. And, well, here's the result (which I am actually very proud of) ;-)
Click image to activate, wait for the video to buffer (1.6MB) press EDIT button to play with the filters (in full screen mode). Enable your webcam (if you have one) and play about with sliders and checkboxes – try if your face can be tracked too – but then watch for evil Terminators – they'll come and get you! ;-) Btw. you can turn histograms for every filter - thanks to Quasimondo for the code.
This is a part of the whole video filter framework I am developing just now, the inspiration came from Joa Ebert's Image Processing library (as far as I know, he's cooking a complete rewrite). The full source code (including Pixel Bender kernels and examples) will be soon released on Google Code and will feature face/eye tracking/gestures and few other things (surprise!) A lot of people are very sceptic about the whole eye tracking idea, they don't believe it's precise enough to make any use of it – I will prove that it is, and it works! (just watch closely how it tracks my eyeballs on the video!)
My approach is to make everything as much simple as I can. If something cannot be achieved using this rule, I either abandon the idea completely or look for a simpler solution.
The face tracking is actually relatively simple, I will briefly describe each step:
- Brightness/Contrast (HBSC filter) - initial adjustment of the input (will be replaced with auto levels)
- Motion Capture - works the same way as the "movement watchdog" that's implemented in brains of almost all animals (including humans) in order to survive – it finds the rectangle area of the all the differences between two frames. This step could be much more complicated (i.e. I might use face detection or Eugene's motion tracker once he decides to release the source) but simple motion capturing is good enough for Machine Vision experiment here.
- Shape Depth Detector – finds centres of colour local maximums, play with the levels slider carefully to get more details – it works by posterising the image then does a very fast blob detection on every result colour – thanks to Kynd and Kampei Baba for sharing this technique.
Color Grading – identical to Photoshop's Gradient Map – uses
paletteMapto remap the colors.
- Machine Vision – the final and the most complicated filter – utilises Delaunay triangulation and Voronoï diagram by Nicoptere – it's fast enough to process it realtime (thanks for sharing!). Then it plots the points and lines and applies my spotlight effect class (another blog post on that subject coming soon) to achieve the final look. Btw. I've found another very cool experiment using Delaunay for face triangulation by Neuro Productions.
Feel free to leave any comments questions and suggestions, I am really interested what you think. You can also follow my blog updates on Twitter or RSS. It's getting very late now, so I better go.
UPDATE: I am giving up, it's just too hard to track human's head, I gonna do next experiments with chickens:
If you liked this experiment, make sure you see the new version.
Actually, it turned out to be much simpler than I had initially thought!
Click image to activate, hold your head still and blink your eyes. Hit space to toggle motion areas visibility.
In case it's not working, move your head closer/further away from the camera.
The SWF has 2.5 kilobytes, no heavy calculations are needed to detect eyes blinking. Here's how it works:
- Detect all motion areas (hit space to see them)
- Apply blur filter to get rid of the noise
- Apply threshold to get 1 bit image
- Use blob detection algorithm to find blobs
- Reject all blobs that are either too big or too small
- Draw bounding boxes around blobs that meet the size criteria
Currently, the code is a mess (or I would rather call it experimental state) so no source codes yet.
But I am planning to improve this a lot, i.e. make it possible to track the head movement and position and maybe even eyes. There is also an AIR app stopping your eyes drying coming out soon, meanwhile make sure you'll read a few tips on that very subject.10:15 PM | posts | 2 Comments | Tags: as3, tracking, experimental, fx
I had a quick poke into FontStruct last nite, some useful features had been recently added to that awesome online block font editor. I found one of my previously designed fonts called RUdigit?, it's pretty (experi)mental (check the pixel size, otherwise you won't get the idea).
That reminded me of an old Flash AS1 experiment of mine, where I tried to use predefined character set to display various shades of grey. We used to do it a lot in the C64 demoscene days – nostalgia had kicked in and I quickly mocked up an AS3 version of that old triple sinus plasma code.
Click the face above to launch, hit SPACE to randomise the plasma periods. And now get ready for the trick: try selecting the pattern as you would do with normal text.
No Pixel Bender here, just pure
TextField™. It's pretty slow I must say but I didn't spend a second to optimise it. Maybe drawing a single character onto a
bitmapData or using
copyPixels would work faster? I might look into that again, most likely when the C64 nostalgia takes me over again sometime.
If you are new to this technique, have a sniff into the source. TTF font included. Enjoy.06:30 PM | posts | 1 Comment | Tags: source, as3, demoscene, fx, textfield