How to begin with augmented reality?
I'm currently an undergrad in computer science and I'll be entering my final year next year. Augmented reality is something I find to be a really interesting topic, but I have no idea where to start learning about it.
Where do you start learning about this topic and what libraries are available?
Being a quite popular buzz word, augmented reality can be build with some distinct algorithms which can be learnt separately. Usually it covers:
- planar object detection (can be a marker or previously trained object). SURF/SIFT/FAST descriptors, RANSAC for homography matrix calculation
- store trained objects in DB (KD-trees)
- camera position estimation
- augmenting 3D model with custom objects (OpenGL)
To dive into this subject I would recommend this steps:
- All of this is already implemented in OpevCV, you can start playing with its examples.
- To understand what's happening under the hood, take probably the best book on this topic: "Multiple View Geometry in Computer Vision" http://www.robots.ox.ac.uk/~vgg/hzbook/ .
- If you are going to play with AR on mobile phones take a look on works of scientific labs like http://mi.eng.cam.ac.uk/~sjt59/hips.html (FAST) and http://www.robots.ox.ac.uk/~gk/PTAM/ (PTAM).
If you're comfortable with Objective-C, downloading and playing with ARKit would be great place to start. It's based on magnetometer/accelerometer readings rather than pattern recognition.
If pattern recognition is what you're interested in, then start with artoolkit instead. But that library is a bit more intense, naturally.
Take a look at this augmented reality framework comparison table to select a suitable AR framework for your work.
qualcomm's vuforia AR api is a great place to start since it is free and it has all the AR features we can think of.
And also this book gave me a huge help to start building AR apps. Developing AR Games for iOS and Android by Dominic Cushnan, Hassan EL Habbak
Ben Newhouse, the man behind Yelp's augmented reality Monocle feature, gave a talk at Stanford about the process he went through when making it. It is available for free on iTunes U, at this location: https://podcasts.apple.com/us/podcast/iphone-application-development-winter-2010/id384233225
(The link won't work in Chrome, but it does in Safari. If it doesn't work, just search "Yelp Monocle" in iTune's search box, and download the iTunes U lecture.)
The lecture is about programming for the iPhone, but most of it is translatable to other areas. It is packed with valuable information, and has proved extremely useful for me in seeing all the components of what i want to make.
The Pragmatic Programmer AR book is pretty good, lots of code samples and exercises that get you involved, instead of just reading about it. It is a little dated, but it should be a pretty good starting point.
This was extremely helpful to me because of the step by step tutorials and sample code: http://dev.metaio.com/sdk/getting-started/
It takes you from setting up your phone/ dev account through to tracking configurations and 3D content.
I have spent a bit of time looking for AR code for the iPhone. If you want to do AR and locations then download this project
It based on ARKit mentioned above but improved and actually compiles. The orginal AR kit does not support device rotation. Someone else added it but there actual code never worked and so a 3rd person took it and fixed it.
I am currently added more features to this code.
augmented reality is combination of 2 skills: ability to code on smartphones + using all the input sources that the handset can provide to provide interesting applications. Computer vision is a major aspect, since the camera can be used in very many interesting ways. But you must know that knowing any one aspect of it is not good enough. for example if you use comp vis, alone to detect where you are based on the camera input of a shopping mall store it is not going to be easy at all. but if you couple up your gps location etc, the problem reduces to a very managable level. So the important thing is being able to couple ideas from different aspects and knowing a little bit about both aspects. Take a smartphone programming class and a computer vision class. that should get you started.
If you're an undergrad, you start by asking faculty about it (or grad students, if you're in a place with them). Even if they don't know much about it, they'll know where to find out.