Hi
I saw the stats for the blog a while ago and it seems that the augmented reality topic is hot! 400 clicks/day, that’s awesome!
So I wanted to share with you my latest development in this field – cross compiling the AR app to the iPhone. A job that proved easier than I originally thought, although it took a while to get it working smoothly.
Basically all I did was take NyARToolkit, compile it for armv6 arch, combine it with Norio Namura’s iPhone camera video feed code, slap on some simple OpenGL ES rendering, and bam – Augmented Reality on the iPhone.
Update: Apple officially supports camera video pixel buffers in iOS 4.x using AVFoundation, here’s sample code from Apple developer.
This is how I did it…
Hi
I have been playing around with NyARToolkit’s CPP implementation in the last week, and I got some nice results. I tried to keep it as “casual” as I could and not get into the crevices of every library, instead, I wanted to get results and fast.
First, NyARToolkit is a derivative of the wonderful ARToolkit by the talented people @ HIT Lab NZ & HIT Lab Uni of Washington. NyARToolkit however was ported to many other different platforms, like Java, C# and even Flash (Papervision3D?), and in the process making it object oriented, instead of ARToolkit procedural approach. NyARToolkit have made a great job, so I decided to build from there.
NyART don’t provide any video capturing, and no 3D rendering in their CPP implementation (they do in the other ports), so I set out to build it on my own. OpenCV is like a second language to me, so I decided to take its video grabbing mechanism wrapper for Win32. For 3D rendering I used the straightforward GLUT library which does an excellent job ridding the programmer from all the Win#@$#@ API mumbo-jumbo-CreateWindowEx crap.
So let’s dive in….
Android And Me
Last week I got a hold of the HTC G1 Android Developer Phone. This (how else) was preceded by a big fight with my cellular operator who insisted that I will take a data plan.
Ok, I said to myself, I bought this phone so that obviously mean I will use cellular internet. “So how much is that data plan?” I asked the representative.
“It’s 1000K” she replied. “1MB?” I asked in wonder. “No, not 1MB – 1000 KB!”
That’s when I understood she has no clue what she’s talking about. Furthermore, this “joke-data plan” was limited to WAP browsing. Oh come on!!!!
And I can’t replace it for a real data plan; I have to add money on top of it!
Well, I do not want to bore you with this specific war, because this is only a prolog for this post, but let’s just say it pays off to be stubborn. I ended up with no obligation to any data plan (which of course I took one, but now I can cancel it any time).
Now that I’ve got THAT over with, I got around to checking out this wonderful phone (and forgive me iPhone fans – I’m not saying this is BETTER than iPhone, only that it’s DIFFERENT).
This is a Java port of Rob Hess’ implementation of SIFT that I did for a project @ work.
However, I couldn’t port the actual extraction of SIFT descriptors from images as it relies very heavily on OpenCV. So actually all that I ported to native Java is the KD-Tree features matching part, and the rest is in JNI calls to Rob’s code.
I wrote this more as a tutorial to Rob’s work, with an easy JNI interface to Java.
You can find the sources here: https://www.morethantechnical.com/extupload/code/JavaSIFT.zip
Here’s how to use it:
More than Technical now on Twitter
For those who wish to follow us on twitter, you may follow our new twit 🙂
www.twitter.com/morethantech
Hi
I recently did a small project combining a Java web service with a OpenCV processing. I tried to transfer the picture from Java environment (as BufferedImage) to OpenCV (IplImage) as seamlessly as possible. This proved a but tricky, especially the Java part where you need to create your own buffer for the image, but it worked out nicely.
Let me show you how I did it
Hi
Just wanted to report on a breakthrough in my iPhone-CV digging. I found a true realtime frame grabber for the iPhone preview frame (15fps of ~400×300 video), and successfully integrated this video feed with a pure C++ implementation of the MeanShift tracking algorithm. The whole setup runs at realtime, under a few constraints of course, and gives nice results.
Update: Apple officially supports camera video pixel buffers in iOS 4.x using AVFoundation, here’s sample code from Apple developer.
So lets dig in…
Tracing wild rays
Hi
I havn’t published in a while. I was back up with work on a project for uni., work and my writing…
But the good thing with keeping busy, is that after a while – you have something to show for! So here’s what i’ve been working on for Comp. Graphics course – A Ray Tracer.
My cellphone's evil plan
Sometimes I think my cellphone holds a grudge for me, and he’s secretly trying to ruin my day. Whenever I forget to lock the keypad and put it back in my pocket it comes to life.
I catch it going online and surfing for hours, my mom calls me and tells me I sent her blank SMSs all night. Last time I caught the bugger enrolling to a dating service! – I shit you not, this phone wants bad things for me.
R.
This is the story of my journey to find a way to run a process (or a program on a remote pc)
This wasn’t an easy thing at all…
Overall, I thought, this should be an easy thing to do.
I found this C# code on a Microsoft forums
object[] theProcessToRun = { "notepad.exe" }; ConnectionOptions theConnection = new ConnectionOptions(); theConnection.Username = "username"; theConnection.Password = "password"; ManagementScope theScope = new ManagementScope("<\\\\" + IP + "\\root\\cimv2", theConnection); ManagementClass theClass = new ManagementClass(theScope, new ManagementPath("Win32_Process"), new ObjectGetOptions()); theClass.InvokeMethod("Create", theProcessToRun);
I tried this code, not after forgetting to disable the firewall on the remote computer – a big downside but I guess if I had gone with it I’d hunt a way to stable port to unblock in the firewall.
Then I found the big downside (which can be an upside to some of you):
The remote process this way will never have a GUI window opened (In this example, a process of notepad will be opened in the background).
This can be a big advantage to system admins which want to run scripts.
Ok, back to the quest.