Orestis Lykouropoulos, Charley Ren, Pat Xu, David Bain, Jon Kramer
- Overview
- Mockups
- Unity Scene
- Architecture
- Setup
- Deployment
- Docs and Poster
- The Team
- Acknowledgements
We are building an augmented reality climbing game platform, with a focus on releasing the platform as a developer-friendly development kit. Components include
- hold recognition via OpenCV, and
- body (skeleton) detection via Microsoft Kinect
to allow developers to build 2D, interactive climbing games via Unity (e.g. these are some games that inspired our work 1, 2, 3).
This is an example of what our project can do. David is activating and deactivating holds, each of which have an associated music track.
A couple short videos of our Music Game in action at end-of-term demos.
Some basic mockups for how we envision the project. See a simple game UI displayed on the wall. Then, grab a hold to select an option.
Learn more about our ClimbAR Unity Project here. This discusses how we incorporate OpenCV and the Kinect into a Unity game!
- OpenCV
- read about specifics with the OpenCV wrapper here
- Unity – connecting OpenCV and Kinect
- OpenCV exists in C++ but not in C#, so we build it as a dll
- a Unity C# script imports the dll so now we can now use OpenCV in Unity! while there is an OpenCV asset on the Unity asset store, but it costs $95 so we opted to write our own wrapper
- we use the Kinect SDK to access live color images, skeleton and give this data to OpenCV to do classification on each game startup
- OpenCV Hold Recognition Classifier
- start with ~500 positive & negative images focusing on climbing holds and train an OpenCV custom object detection classifier (Haar classifier) to detect climbing holds
- we have to define a bounding box for our custom object in each of our images. this took a while until David smartened up and chose to make the bounding box the entire image by making each image a close-up of the climbing hold.
- we store all of our images on a Google Drive
- start with ~500 positive & negative images focusing on climbing holds and train an OpenCV custom object detection classifier (Haar classifier) to detect climbing holds
- Kinect
- using the official Microsoft Kinect SDK to get live color images (for OpenCV) and body skeleton (e.g. for a game). may also use it for depth/infrared map, etc.
- Windows only, currently
- follow the guide above to build OpenCV
- find our Visual Studio project for the OpenCV wrapper in
OpenCVUnity
- find our Visual Studio project for the OpenCV wrapper in
- download Unity and the Kinect SDK
- find the Unity project in
climbARUnity
- find the Unity project in
If you want to actually train your own classifier, here's what we did – YMMV.
- OpenCV Python
-
Install with Homebrew
brew tap homebrew/science
brew install opencv3
-
Set system paths
export DYLD_FALLBACK_LIBRARY_PATH=/usr/local/Cellar/opencv3/3.1.0_1/lib:$DYLD_FALLBACK_LIBRARY_PATH
export PYTHONPATH=/usr/local/Cellar/opencv3/3.1.0_3/lib/python2.7/site-packages:$PYTHONPATH
- if this doesn't work then your opencv version might be slightly different. search around for the directory and it should work
export PATH=/usr/local/Cellar/opencv3/3.1.0_3/bin:$PATH
- check by opening up
python
on cmd line and then trying to import –import cv2
-
Training
- followed this tutorial
opencv_createsamples --vec classifier/position_single -info info.dat -bg bg.dat
- use the
-img
and-num
flag to train off one image. this is what we did when only had 7 images and had to generate training images from a single image
- use the
opencv_createsamples -vec classifier/position_single -info info.dat -bg bg.dat
opencv_traincascade -data train_cascade/ -vec classifier/position_single -bg bg.dat -numPos 50 -numNeg 3
-
Classifying
- Classification is done in
KinectClassify
. The classifier used can be changed by updating theclassifierPath
inKinectClassify
. We trained two classifiers, one for the classroom setting and one for the Dartmouth climbing gym, but any cascade classifier can be used if a new classifier is created for a specific environment.
- Classification is done in
-
- hook up to a projector and run the Unity project!
- the setup scenes will check if the Kinect is connected and will also run some alignment preprocessing on the Kinect image
- Project Proposal
- User Personas
- Mockups and Data Model
- User Testing Plan
- Testing Analysis
- End of Term Demo Poster
- End of Term Debrief
Who made this wonderful, open-source piece of art? Look no further.
Left to Right: Orestis, Charley, Pat, David, Jon