How to install Kinect in Macbook Air (Mountain Lion)

Requirements

You are going to need Macports. This is quite a useful utility that manages all the terminal-based tools automatically. Go to this link and install the *.dmg package. Just make sure you don't have similar utilities already installed, like Homebrew or Fink, because you might have troubles, such as version mismatches at /usr/bin . Download and Install via Macports:
 sudo port install git-core  
 sudo port install libtool  
 sudo port install libusb +universal  
The "plus universal" parameter is used for x86 (aka 32-bit) libraries.

 

Install OpenKinect

OpenKinect is fuckin great open source project for Kinect owners that want to play, code, create, develop and generally have sex with computer vision research subjects. Createa folder under Documenter or whatever and clone the project from GitHub.
 git clone git://github.com/OpenKinect/libfreenect.git
In case you don't have cmake installed, just do it: Open the GUI version and configure and generate the necessary files for XCode (supposing you have XCode already installed. Don't ya?). Then browse into the build directory and run the libfreenect.xcodeproj. Normally, you gonna see the source code project inside Xcode interface. Then apply any "must-click-to-proceed" messages and press CMD+B (aka Build and Compile). Now go to the blah/bin/Debug folder and there will be these executables: cppview glview record regview glpclview hiview regtest tiltdemo Ok now, plug in your Kinect sensor via USB and have sex with object detection. Also, feel free to make the generally available through the /usr/bin directory. If that's the case go to /blah/bin/Debug folder and copy-paste the files to /usr/bin dir.

sudo cp * /usr/bin/
Now run glview




Ok, now let's make some fun!

Install OpenNI

What's this, you may ask. This is an open source framework – the OpenNI framework – which provides an application programming interface (API) for writing applications utilizing natural interaction. This API covers communication with both low level devices (e.g. vision and audio sensors), as well as high-level middleware solutions (e.g. for visual tracking using computer vision). That has been told, download the latest UNSTABLE source code for Mac/Linux at Select OpenNI Binaries in the first drop down menu Select "Unstable" in the second drop down menu OpenNI Unstable Build for Mac OS X 10.7 (latest version) Click on "Download" Ok, when you download the file, extract it under the base OpenKinect folder (or whatever you want) and run the install script.
sudo ./install.sh

Normally, you gonna see


Installing OpenNI
****************************

copying shared libraries...OK
copying executables...OK
copying include files...OK
creating database directory...OK
registering module 'libnimMockNodes.dylib'...OK
registering module 'libnimCodecs.dylib'...OK
registering module 'libnimRecorder.dylib'...OK
creating java bindings directory...OK
Installing java bindings...OK

*** DONE ***
Okie dokie

Install SensorKinect

Download the latest version of the Unstable SensorKinect https://github.com/avin2/SensorKinect and extract it in your kinect folder. Go to the "bin" folder. Extract the file "SensorKinect093-Bin-MacOSX-v5.1.2.1.tar.bz2" in the same bin folder. Terminal, go to the bin folder and run the command:

sudo ./install.sh

you gonna see:


Installing PrimeSense Sensor
****************************

creating config dir /usr/etc/primesense...OK
copying shared libraries...OK
copying executables...OK
registering module 'libXnDeviceSensorV2KM.dylib' with OpenNI...OK
registering module 'libXnDeviceFile.dylib' with OpenNI...OK
copying server config file...OK
setting uid of server...OK
creating server logs dir...OK

*** DONE ***

Install PrimeSense NITE

Download the latest version of PrimeSense on: Select OpenNI Compliant Middleware Binaries in the first drop down menu Select "Unstable"in the second drop down menu PrimeSense NITE Unstable Build for Mac OS X 10.7 (latest version) Click on "Download".

Extract the tarball and run the installer script.

sudo ./install.sh
Normally you will get:
Installing NITE
***************

Copying shared libraries... OK
Copying includes... OK
Installing java bindings... OK
Installing module 'Features_1_3_0'...
ls: Features_1_3_0/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_3_1'...
ls: Features_1_3_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_4_1'...
ls: Features_1_4_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_4_2'...
ls: Features_1_4_2/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'...
Registering module 'libXnVFeatures_1_5_2.dylib'... OK
Copying XnVSceneServer... OK
Installing module 'Features_1_5_2'
ls: Hands_1_3_0/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_3_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_4_1/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
ls: Hands_1_4_2/Bin/lib*dylib: No such file or directory
Installing module 'Features_1_5_2'
registering module 'libXnVHandGenerator_1_5_2.dylib'...OK
Adding license.. OK

*** DONE ***

Run some example

Copy all the xml files from NITE Data to the SensorKinect Data folder. I prefer the terminal way, you may use drag n drop GUI method.

cp Data/*.xml ../SensorKinect/Data/

Now browse onto the Samples dir ( /NITE/Samples/Bin/x64-Release) and launch the the samples. For example let's run the Sample-SceneAnalysis.



Somehow (magically) the Kinect sensor detected myself (body) as blue, letting the background motion in grey. Let's try another one. Let's try the PointViewer! Clap your hands or make a wave-like gesture and hand tracking is about to begin.

OSCeleton

OSCeleton is a proxy that sends skeleton information collected from the kinect sensor via OSC, making it easier to use input from the device in any language / framework that supports the OSC protocol. So, clone the project hosted at GitHub, but make sure your are in OpenNI directory.
cd OpenNI
git clone https://github.com/Sensebloom/OSCeleton.git
now compile it
make -j4
I use -j4 for my 4 cores and way faster compiling ;) If you have HT enabled, try -j8 (in case of four native cores plus 4 visual threads). If everything worked, you can now test OSCeleton. In the folder "Sensebloom-7307683-OSCeleton" double-click the executable "OSCeleton" or open it in Terminal.Keep a distance of two steps away from Kinect and stay in position of calibration, with both arms raised, as shown below:

Thanks to Alexandra leaving me mess around with her room :PPP

You should see in terminal:

Initializing...
Configured to send OSC messages to 127.0.0.1:7110
Multipliers (x, y, z): 1.000000, 1.000000, 1.000000
Offsets (x, y, z): 0.000000, 0.000000, 0.000000
OSC Message format: Default OSCeleton format
Initialized Kinect, looking for users...

New User 1
Calibration started for user 1
Calibration complete, start tracking user 1

Install Processing and libraries

Go to then drag and drop the application into /Applications dir in order to have it installed. The mac way ;)

Download examples

Go to GitHub and clone the OSceleton examples.
https://github.com/Sensebloom/OSCeleton-examples.git
then go to cd OSCeleton-examples/processing/MotionCapture3D/
cd OSCeleton-examples/processing/MotionCapture3D/
and create a libraries folder
mkdir libraries
Inside that folder extract the two libraries need oscP5 - pbox2d - Ok now run the OSceleton again in order to calibrate yourself (again) and in the same time launch MotionCapture3D.pde with Processing. Click play and voila: Thanks to for the tutorial and ideas.

Πόσο γρήγορος είναι το Linux PC σου;

Audio Encoding

Θα τρέξουμε δύο benchmarks τα οποία θα κάνουν encoding ένα κομμάτι μουσικής WAV σε FLAC (lossless format) και MP3 (με τον LAME encoder). Σκοπός μας είναι να δούμε πόσο γρήγορα το συστημά μας θα εκτελέσει αυτή τη μετατροπή, από μία μορφή ήχου σε μία άλλη.



AI Computing

Εδώ έχουμε να κάνουμε περισσότερο με τον επεξεργαστή και τις δυνατότητές του και machine learning προβλήματα και αλγορίθμους τεχνιτής νοημοσύνης. Τι καλύτερο λοιπόν από μία παρτίδα σκάκι, όπως θα έλεγε και ο καθηγητής Falcon. Για να δούμε λοιπόν, θα νικήσει ο Τζόσουα;


Κάνοντας compile από Source

Άλλο ένα benchmark που είναι CPU intensive - δηλαδή απασχολεί κυρίως τον επεξεργαστή παρά το υπόλοιπο σύστημα. Εδώ θα κάνουμε compile κάποια γνωστά Open Source προγράμματα και θα μετρήσουμε τον χρόνο που χρειάστηκε για την μεταγλώτισή τους. Σίγουρα θα έχει μεγάλο ενδιαφέρον για τους φίλους που χρησιμοποιούν Gentoo. Επίσης, ένα generic τέτοιο benchmark θεωρείται το CompileBench (ακόμα δεν έχει φτάσει στην έκδοση 1.0).


Kernel

Θα τρέξουμε μία σειρά από benchmarks τα οποία σχετίζονται (ή μαλλον θα ήταν καλύτερο να πούμε ότι επηρεάζονται) με τον εκάστωτε Kernel της διανομής μας. Στην ουσία, εδώ περιμένουμε να δούμε μία μεγάλη διαφορά ανάμεσα στους δύο kernels.


Postmark

Πρόκειται για ένα benchmark της εταιρείας NetApp το οποίο σχεδιάστηκε για να εξομοιώνει δικτυακές συνθήκες φόρτου ενός mail server (ή γενικότερα ενός fileserver) που επεξεργεγάζεται ένα τεράστιο αριθμό αρχείων μικρού μεγέθους, όπως για παράδειγμα e-mails, νέα και e-commerce. Όπως συμβαίνει και στα e-mails, άλλωτε γράφετε 1 παράγραφο, και άλλωτε τυγχαίνει να αρκεί μία πρόταση. Συνεπώς το μέγεθος ενός αρχείου e-mail μπορεί να ξεκινάει από 1KB και να φτάνει μέχρι μερικά εκατοντάδες KB, αλλα σαν σύνολο αποτελούν ένα τεράστιο όγκο δεδομένων. Για παράδειγμα, ένας μεταξύ των πολλών mail servers που διαθέτει στην κατοχή της η Google, καλείται να επεξεργαστεί την ημέρα περίπου 1 εκατομ. e-mails, δηλαδή περίπου 41.667 e-mails / ώρα. Καταλαβαίνετε λοιπόν ότι πλέον υπάρχει ανάγκη για τεχνολογίες data mining που αναλαμβάνουν να στήσουν ένα workstation που θα επεξεργάζεται τον συγκεκριμένο τύπο δεδομένων κατά τον βέλτιστιο δυνατό τρόπο.

Τρέχοντας το Postmark μπορούμε να αξιολογήσουμε το κατά πόσο μπορεί ο υπολογιστής μας να βγάλει εις πέρας τα καθήκοντα ενός σημερινού mail server. Πιο συγκεκριμένα, εξετάζουμε την ταχύτητα ανάγνωσης/εγγραφής των αρχείων -- ένας ακόμα τρόπος για να αξιολογήσουμε το file allocation του filesystem (πχ ext4, btrfs, xfs, jfs κ.α.). Για να μπορέσει το Postmark να δημιουργήσει παρόμοιες συνθήκες, φτιάχνει ένα μεγάλο workload από txt αρχεία τυχαίου (αλλά μικρού) μεγέθους, και αρχίζει να κάνει transactions (δημιουργήσει, διαβάσει, γράψει, διαγράψει, ανοίξει, αποθηκεύσει) μεταξύ των αρχείων. Το συγκεκριμένο profile που τρέξαμε εκτελεί 25.000 transactions με workload 500 αρχείων μεγέθους από 5 μέχρι 512 kilobytes.

Το αποτέλεσμα του Postmark θα μας δείξει πόσα transaction μπορεί να βγάλει εις πέρα το filesystem ανά δευτερόλεπτο. Όσο περισσότερα TPS (Transcations per Second) τόσο καλύτερες επιδόσεις.



RAMspeed/SMP

To RAMSpeed, όπως δηλώνει και το όνομά του, είναι ένα benchmark που μετράει την ταχύτητα της μνήμης RAM. To /SMP δηλώνει ότι δεν είναι single-threaded εφαρμογή, πράγμα που σημαίνει ότι εάν έχετε περισσότερους από έναν πυρήνες, τότε το RAMspeed θα τους λάβει υπόψην του και θα τους χρησιμοποιήσει.

Τι σχέση έχει η RAM με τους πυρήνες του επεξεργαστή; Πρακτικά καμία, αλλά αν σκαλίσετε λίγο under the hood, θα δείτε πως οι σύγχρονοι πολυπήρυνοι επεξερξαστές διαθέτουν τον ελεγκτή μνήμης (IMC - Integrated Memory Controller) μέσα τους, και όχι πάνω στην μητρική όπως συνηθιζόταν παλαιότερα (στα τσιπάκια Northbridge/Southbridge). Άρα, αφού πλέον ο επεξεργαστής είναι αυτός που καθορίζει τις RAM και τα κανάλια της (dual channel, triple channel, quad channel), είναι λογικό για το RAMspeed να το λαμβάνει υπόψην του. Συγκεκριμένα, αν και οι παλαιότερες εκδόσεις του προγράμματος είχαν γραφτεί σε C, πλέον υπάρχει αρκετά καλύτερο optimization σε i386 πλατφορμές με κώδικα γραμμένο σε Assembly.

Το αποτελέσμα του RAMspeed θα μας δείξει πόσο γρήγορη είναι η RAM μας. Θα φτιάξει μία array με συγκεκριμένο μέγεθος και θα αρχίζει να γεμίζει kilobytes εκθετικά με δυνάμεις του 2. Όσο πιο γρήγορα, τόσο το καλύτερο. Η μονάδα μέτρησης είναι το MB/s (MB ανά δευτερόλεπτο).


Filesystem benchmark

Ext4, ext3, reseirfs κλπ . Βάλτε πάνω το FS Mark και μετρήστε τις επιδόσεις. Είναι τελείως gtp σε σχέση με τους νέους δίσκους, αλλά είναι ένα (έστω και χάλια) reference.


C-Ray

Το C-Ray αποτελεί έναν απλό raytracer που σχεδιάστηκε για να αξιολογίσει την επίδοση floating-point του επεξεργαστή. Γενικότερα, η μέθοδος της ακτινικής καταγραφής (ray tracing) χρησιμοποιεί την μαθηματική τεχνική προσομοίωσης Monte Carlo για να δώσει ένα στατιστικό αποτέλεσμα των rays που θα αποτελέσουν το μοντέλο του σήματος. Το συγκεκριμένο πρόγραμμα, υπολογίζει 8 rays ανά pixel με σκοπό να κατασκευάσει μία εικόνα ανάλυσης 1600x1200.

Όσο πιο γρήγορα την κατασκευάσει, τόσο καλύτερο επεξεργαστή έχουμε. Άρα εδώ θέλουμε να δούμε όσο το δυνατόν πιο μικρό νούμερο (seconds).



Apache Benchmark

Βλέποντα το όνομα Apache, φαντάζομαι ότι αρκετοί έχετε ήδη καταλάβει περί τίνος πρόκειται. Ο καλύτερος web server του διαδικτύου, Apache, αποτελεί την Νο1 επιλογή για πολλά websites που στήνονται καθημερινά. Συνεπώς, δεν θα μπορούσαμε παρά να μην τρέξουμε ένα benchmark το οποίο θα μας δίνει κάποια στοιχεία για το πόσο καλά αποδίδει ο Apache στο σύστημά μας.

Το σενάριο είναι το εξής: αρχίζει μία "επίθεση" από 700.000 requests προς τον υπολογιστή μας, όπου κάθε 100 requests έρχονται ταυτόχρονα.

Το αποτέλεσμα του Apache Benchmark θα μας δείξει πόσα από αυτά τα requests μπορεί να απαντήσει ο υπολογιστής μας ανα δευτερόλεπτο. Προφανώς, όσο περισσότερα, τόσο το καλύτερο.

Υπαρχουν κι αλλα, όμως προς το παρών θα ψάξω αυτά να δω τι παίζει. Εσείς τι benchmarks χρησιμοποιείτε;

Βρίσκοντας bugs

Ξεκινώντας ως νέο μέλος της BugSquad, το πρώτο και το πιο εύκολο πράγμα που έχετε να κάνετε είναι να ψάξετε και βρείτε καινούρια bugs τα οποία δεν έχει προλάβει να τα δει κάποιος άλλος πριν από εσάς, και να κάνετε την αξιολόγησή σας. Λέγοντας αξιολόγηση εννοώ, πχ

εχουν επαρκείς πληροφορίες για να μπορέσει να τα διορθώσει κάποιος;
πόσο σημαντικό είναι το πρόβλημα, τι προτεραιότητα θα του θέτατε;
έχει ξανα αναφερθεί ως bug;

Ως αρχάριος, το καλύτερο είναι να βρείτε πρώτος τα bugs που δεν έχουν γίνει triage από άλλους για να μπείτε πιο εύκολα στο όλο κλίμα.

Πώς βρίσκω untriage bugs;

Θα χρησιμοποιήσουμε την "προχωρημένη αναζήτηση" του Bug Tracking System στο Launchpad. Κάντε λοιπόν κλικ εδώ και ψάξτε με τα παρακάτω κριτήρια:
  • Status: New
  • Importance: Undecided
  • Assigned to: Nobody


ή (δεύτερος τρόπος)

μπορείτε πολύ απλά κάνετε κλικ εδώ και να βρείτε πρώτος όλα τα untriaged bugs του Ubuntu.