Notice: MediaWiki has been updated. Report any rough edges to marcan@marcan.st

Difference between revisions of "Python Wrapper"

From OpenKinect
Jump to: navigation, search
(About)
Line 3: Line 3:
 
== About ==
 
== About ==
  
There are two Python interface implementations:  [https://github.com/OpenKinect/libfreenect/tree/master/wrappers/python/ Ctypes] and [https://github.com/OpenKinect/libfreenect/tree/master/wrappers/python/cython Cython]They are compatible and any incompatibilities can be considered bugs.  The reason for having both is that the Ctypes will work without any other dependencies, where Cython has additional build requirements; however, Cython will be more efficient and is a convenient language for pre-processing the sensor data.  The interface is designed to mimic the C library except where 1.) It is impractical or 2.) It would be "Un-Pythonic" to do so.  See "Differences with C Library" for specific instances of this.  The exposed interface support both asynchronous (e.g., callback) and synchronous (e.g., call and block) functions which is enabled by the [[C_Sync_Wrapper]].
+
The Python wrapper is written in Cython [https://github.com/OpenKinect/libfreenect/tree/master/wrappers/python/ Ctypes]. This is the Cython-based libfreenect Python wrappers.  This provides async (e.g., using callbacks) and sync (e.g., simple function calls) interfaces to libfreenect.  The majority of the runloop is abstracted so that later upstream modifications will have minimal impact on your code; however, you are free to implement your own runloop and access all available functionality.  The interface is designed to mimic the C library except where 1.) It is impractical or 2.) It would be "Un-Pythonic" to do so.  See "Differences with C Library" for specific instances of this.  The exposed interface supports both asynchronous (e.g., callback) and synchronous (e.g., call and block) functions which is enabled by the [[C_Sync_Wrapper]].
 +
 
 +
We have been through several iterations of these wrappers in Pure C, Ctypes, and Cython.  Cython is by far the easiest to maintain (as the main lib changes regularly) while maintaining C-like speed.  It does require Cython to install the C code; however, this is available for all supported platforms.  If this becomes a burden we can easily include the generated C code in the repo.  The other dependencies are the same for pure C python extensions.
  
 
A variety of demos are provided using all available kinect features with examples for Matplotlib and OpenCV display.
 
A variety of demos are provided using all available kinect features with examples for Matplotlib and OpenCV display.

Revision as of 18:16, 28 November 2010

"Python API, Documents and Stuff"

About

The Python wrapper is written in Cython Ctypes. This is the Cython-based libfreenect Python wrappers. This provides async (e.g., using callbacks) and sync (e.g., simple function calls) interfaces to libfreenect. The majority of the runloop is abstracted so that later upstream modifications will have minimal impact on your code; however, you are free to implement your own runloop and access all available functionality. The interface is designed to mimic the C library except where 1.) It is impractical or 2.) It would be "Un-Pythonic" to do so. See "Differences with C Library" for specific instances of this. The exposed interface supports both asynchronous (e.g., callback) and synchronous (e.g., call and block) functions which is enabled by the C_Sync_Wrapper.

We have been through several iterations of these wrappers in Pure C, Ctypes, and Cython. Cython is by far the easiest to maintain (as the main lib changes regularly) while maintaining C-like speed. It does require Cython to install the C code; however, this is available for all supported platforms. If this becomes a burden we can easily include the generated C code in the repo. The other dependencies are the same for pure C python extensions.

A variety of demos are provided using all available kinect features with examples for Matplotlib and OpenCV display.

Who is involved

Search for Python in People

However (Brandyn) and (amiller) are trying to organize things for Python.

Differences with C Library

Functions in the C library of the form freenect_blah are accessed as freenect.blah. The reason for this is Python has good module level namespace support and the function name's differ by 1 character. This also goes for enumerated constants that have the FREENECT_ prefix.

The init functions all return the initialized value as opposed to using the C-style of passing a double pointer.

In C:

 freenect_init(&ctx, 0)

Becomes:

 ctx = init()

How to compile

TODO

Example Python Scripts

(amiller) has a few Python demo scripts at https://github.com/amiller/pykinect

TODO