Hi. My name is Alex Wiltschko.

This is my internet log.



27 May, 2011

If you've got a Mac, you can try out the little optic flow app I wrote

Image

(this link might not last more than a month, it’s hosted via dropbox)

27 May, 2011

The neuroscience mug design is now a mug

Image

I like it when ideas become real things. I like that a lot.

27 May, 2011

To-do Lists

I have under a month and a half left before I start full-time in my thesis lab. I see this time right now as incredibly valuable; it’s a period where I have an unusually large amount of time to learn whatever I want and make whatever I want, every day. I do have obligations for school, but I can make significant progress on those items with about 20 hours a week. 
So, things to learn about — 

* Kerr shutters for fast beam-blocking. I don’t know how much it costs to make one of these, but I need to know. I think you can build a two-photon microscope for under $10K, and I think the ingredients include: a Kerr shutter, a DMD, a little knowledge of Fourier and holographic optics, and some smart software. My next abode has to have a basement so I can at least give building this an honest shot. Maybe I should have been an engineer? Nope! Science rules!
* Compressive sensing. It’s kind of a faddish field, but it makes interesting promises. I don’t need to be an expert, but I’d like to be conversant enough to see where it would be applicable. If you have a hammer, everything looks like a nail. What if you don’t have a hammer? I don’t want to be nail-blind. 
* Adaptive Appearance Models, or face recognition and gaze direction processing in general. Why? It’s neat. 
* OpenGL Shader Language. I trained myself on the “old” style of OpenGL (called the "fixed-function pipeline”) a couple years ago, because shaders weren’t available on the iPhone when I was first starting out. Now that devices that lack support for shaders are in the severe minority, it’s time to transition to this way more powerful technique. I’ll be using it to add antialiasing to my iPhone apps (so they look slightly less crappy), and also do some real-time terrain generation (super-secret app idea).
* The internals of libcinder. Cinder is, in my opinion, the most powerful and flexible library for graphics and audio coding on any platform. It also has, like any open-source library,  limitations that make certain projects infeasible or simply really inconvenient. However, I’ve contributed to the project in the past, and need to start up on that again. If the tools don’t suit you, reshape the tools. 
* The olfactory tubercle, and subcortical olfactory structures in general. It’s what my PhD is all about, and I’m woefully behind on my reading. 
* The chemistry of fragrance. Because perfume is wonderful, and why not learn how it’s made? 

27 May, 2011

Colored Optic Flow

(download)

 

 

I’ve got every algorithm implemented that I feel is worth the time at this point, and I've made my selections. 

I think, stylistically, the Horn-Schunck (HS) algorithm is the coolest (this video right here). The Lucas-Kanade (LK) algorithm, however, when set up properly, gives what look like the more precise results (which I’ll show in another video later this week). So, I'll use HS for artsy-fartsy electro pop shows, and I'll use LK at work, for SCIENCE.

Music: “Near Dark” by Burial.

 

EDIT: I've posted the code, for those interested, on the cinder forums.

 

23 May, 2011

Optic Flow with OpenCV

A labmate is working on how the brain processes movement via the visual system, and was working on ways to calculate "optic flow", or calculating how fast things are moving, in what direction, in particular regions of video stream. I figured that was good enough reason to learn about different methods of calculating optic flow, so I whipped up this little video (accompanied by the first track of Moby's new album! Turns out, that's the only track I like off the whole thing...). 

(download)

So, what are you seeing in the video? White is movement, black is stillness. Specifically, the luminosity is the square of left-right and up-down components of movement (so, technically, I do have information about direction of movement, but I don't use it here).

I'm using the Horn & Schnunck algorithm for computing optic flow, and the various weird changes of the feel of the images that occurs throughout the movie is me tinkering with some of the parameters of the algorithm. Specifically, I modulate the degree of blurring of the input image, before optic flow calculation, and then I also change the size of the Lagrangian multiplier of the HS algorithm. The blur, well, blurs the image, and the Lagrangian term affects how "noisy" the image looks, and how sensitive the algorithm is to small movements near the noise floor. There's always going to be "fake" movement, as a result of compression artifacts in the video stream, and the blurrier the image and the smaller the Lagrangian, the less sensitive the output is to that. However, the bigger the blur and larger the Lagrangian, the less sensitive the output is to actual movement.

Neat! This is pretty fun stuff, and once you start to wrap your head around how OpenCV wants you to think, not too terribly difficult (I do have the Cinder library to thank for making a lot of the bookkeeping much simpler, though).

On another note, I've just picked up and hooked up a Microsoft Kinect, but haven't yet begun doing anything super rad with it, besides getting raw depth-field shown on my screens. I'd like to do limb-angle tracking with people bodies, and then little mice bodies, but that'll have to proceed as free time allows.

 

Oh! If you're interested in the code, do get in touch with me (I'm not terribly hard to track down), and I'll hook you up, straight up. It's comfortably under 250 lines, but it does depend on a lot of other libraries.

22 May, 2011

Custom Bound Obsession

In an impromptu Hi-Rise Café discussion with Vaughn T, it was revealed that we are both notebook nerds, and share, among other things, a seething rage for imperfection and laziness with regards to all things printed and/or bound. One thing more surprising than this shared emotional orientation is that he is a former printer and binder. A multi-talented continental gentleman, without a doubt. He uses this printing skill set for good, and not for evil. Whereas I get generally peeved and stomp around trashing my mediocre notebook collection, he has contracted several companies in East Asia to make him his own custom notebook line.

Reactions — 

1) RAD. Rad rad rad.
2) That is so damned rad.
3) I want one. Or ten.

We talked a little bit longer, and developed some ideas that should come to fruition over the next couple months (Vaughn is a doer, and he does he he says he'll do).

1) Have dots, instead of grids or lines, as guides on the pages. These dots would be a little off-blue, so they wouldn't be picked up by photocopiers, and could easily be removed in image software. You'd be able to write and draw with precision, but the guides would be invisible when you wanted them to be.

2) User paper that doesn't suck. Enough of this 50lb paper maché humbledy-mumbledy. Get some real stiff stock in there. Paper you can write on, paper that makes you feel like what you're writing is important and will last.

3) Add unique identifiers for each notebook and each page, on every notebook and page. Of course, each page would have a pagenumber, but each page would also have a bit.ly-style alphanumeric code, uniquely identifying the notebook. This way, if you were to scan in or snap a picture of any notebook page, OCR software would be able to automatically index the notebook ID and page where you wrote or drew something.

4) Develop software to make searching through it all super easy. Of course, some software that would be able to take images of a page in this notebook, and OCR the text, vectorize the line-drawings, and store everything nicely. I'm all over this like hipsters on fixies.

5) Use proper binding, so the notebook actually lasts. Enough of this Moleskine bullshit. They use terrible, brittle glue, the pockets in the back torque the spine terribly if you put more than a receipt in it, and the whole thing usually falls apart after a month in a back pants pocket. Miquelrius knows how to bind a notebook, and he'll likely follow in their footsteps.

6) None of the extraneous crap. No bookmark thread, no elastic band to hold it shut, no shitty pocket, no faux-leather cover. The essentials.

 

Maybe we'll get the new laser etching shop in Central square (by the good folks from seriousbusiness) to mark 'em up with some cool designs, or something of the like.

17 May, 2011

Virtual Reality (for a mouse, eventually)

(download)
For my new lab engagement, I've been tasked with making mice play video games (I've got other jobs, but I'm working on this one sparsely for now).

After a couple days of intense searching for an appropriate 3D library, I settled on Panda3D. It's an open-source game library, written in C++ but with a full suite of Python bindings (I love Python bindings!), which means you can quickly write code that runs quickly. What were the other alternatives that I nixxed?

- Quake. The engine is open-source now, and there's a level editor called Quark that lets you build arbitrary maps. Other folks have done mouse VR, and this is the engine that they used. I recently emailed an author on a published mouse VR study, and he said, essentially, if he were to do it all again, he wouldn't use this engine. That's reason enough for me.

- Unity3D. I used to work a little at NoiseBridge in San Francisco, and there was a hacker or two there making first-person games with Unity, aiming to deploy them on the PC, PS3, Xbox and iPhone. They ranted and raved about how great Unity3D was, about how easy it was to create complex interactions, about how great the engine looked, etc. It is a great platform, but I'll eventually need to integrate the rendering code into some low-level code talking with hardware outside of the computer. In order to do this, you need what Unity calls its "plug-in" functionality, which basically means the ability to call out to arbitrary system C code. This plug-in functionality only comes with the non-free pro version of the app. And by non-free, I mean $1500. Don't need all that power. Next.

- Minecraft. I'd get style points, that's for sure, and my project would be the envy of all the Macbook Air-toting, plaid-wearing hipster coders. But, the modding environment just isn't ready. There's planned support, but I don't want to base an entire project around a hack.

There were a couple other engines I briefly considered, but I stumbled randomly across Panda3D, and it seemed relatively complete. Disney had been using it for "VR Rides" for some time, it's actively maintained by Carnegie-Mellon, the last major release was in February of this year, and the example code is really extensive. That's all I need. When things are a little more complete, I'll post the code.

14 May, 2011

Rooftop Dance Party

Impromptu (and probably illegal) rooftop dance party.

@cosmc led in with a hip-hop heavy dance set
plastic color // math magic subsequently destroyed it
@cosmc stepped back in and rocked it with a healthy dose of electronica until it shut down.

Videos forthcoming. 

Img_5163_2

Img_5164_2

Img_5167_2

Img_5168_2

Img_5174_2

Img_5179_2

Img_5181_2

Img_5184_2

Img_5186_2

Img_5187_2

Img_5190_2

Img_5206_2

Img_5210_2

Img_5225_2

Img_5230_2

Img_5255_2

Img_5264_2

Img_5267_2

Img_5280_2

Img_5282_2

Img_5293_2

Img_5296_2

Img_5300_2

Img_5315_2

Img_5320_2

Img_5335_2

Img_5343_2

Img_5356_2

Img_5366_2

Img_5396_2

Img_5399_2

Img_5405_2

13 May, 2011

Eye Tracking! A first attempt.

(download)

 

So, as a previous tweet has promised, I’ve started working on some gaze tracking software. Look above for my first attempt!
The road up to even getting the necessary software working has been arduous, but I have something simple (and very rough) to show. 

Getting OpenCV installed on the Mac is an ordeal, and I have a thing or two to say about that in the future. Expect a blog post.

I’m writing it up using the Python bindings to OpenCV, which greatly simplifies the prototyping process. Although there are some existing libraries that would make some of the coding process easier (one called SimpleCV, being worked on by my good friend Kat Scott), it is thus far incomplete, and (at least in my experience) presumes a coding style that expects that you only use SimpleCV, and will never have to dip into the grittier OpenCV primitives should SimpleCV fail you. I’m sure that when SimpleCV is more thoroughly documented and covers more of the API, that it will be wonderful. For now, however, the pain of inevitably cross-converting data structures between SimpleCV and OpenCV creates more clutter than it saves. 

SimpleCV devs — if you have suggestions for best practices, let me know! I'm open to any suggestions that simplify my workflow.

The next steps — 
* More fluid eye tracking. Basically, seed the next frame’s eye tracking guess with the last frame’s solution. This should produce much smoother estimates.
* Actually tracking pupil position within the eye. This will be the variable I’ll use to directly map to screen position (the ultimate goal is to use your eyes as a cursor, especially useful for handicapped folks). 
* Make a model of face-to-screen distance. This will be necessary to be able to translate eye angle to screen position reliably when the head is moving slightly.
* Better training of the eye detector. My eyebrows are apparently quite eye-like in the algorithm’s current iteration. I mean, they’re bushy, but jeez. Way to make a guy feel self-conscious.

12 May, 2011

Events that have transpired lately

All true things — 

Aesop Rock rocked.
A spilled smoothie was spotted.
I like my running shoes again.
Voltage Café introduced a drink called the “Dude” that tastes like a white russian but will mess you up with caffeine.
I got a lot of fragrance samples, mostly 1.5 mL or so (I am freaking out about Invasion Barbare right now), but the one called “Excretions Magnifique” comes with a picture of a dick, and kind of smells like man spunk. It is fascinating, and I mean that with zero sarcasm. 

Img_0097
Img_0093
Img_0095
Img_0099
Img_0105

Search it. Browse it. Subscribe it. Get caught up in it.


Get the RSS feed! Go ahead.