Notice: MediaWiki has been updated. Report any rough edges to marcan@marcan.st
Difference between revisions of "Python Wrapper"
(→About) |
(→Differences with C Library) |
||
Line 16: | Line 16: | ||
== Differences with C Library == | == Differences with C Library == | ||
− | + | === Things that are intentially different to be more Pythonic === | |
− | + | ==== init/open_device ==== | |
− | + | Different calling style (returns the new value as opposed to using a double pointer). | |
In C: | In C: | ||
Line 25: | Line 25: | ||
Becomes: | Becomes: | ||
ctx = init() | ctx = init() | ||
+ | |||
+ | ==== Names ==== | ||
+ | Everything is in the freenect module. Since all freenect functions are of the form freenect_blah, we use freenect.blah to refer to them. This is also true for the synchronous calls. 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. | ||
+ | |||
+ | === Things not implemented (though could be added) === | ||
+ | ==== get/set user ==== | ||
+ | Not implemented | ||
+ | ==== Dev/Ctx/State ==== | ||
+ | Opaque classes wrapping void *'s (you can't access struct elements) | ||
+ | ==== Log functionality and callback ==== | ||
+ | Not implemented | ||
+ | |||
+ | === Additional Features === | ||
+ | ==== get_accel ==== | ||
+ | A helper function that simplifies the accelerometer handling | ||
+ | ==== runloop ==== | ||
+ | An abstraction that takes in depth, rgb, and body callbacks. The body is called in the 'freenect_process_events' loop. Depth and RGB callbacks are given numpy arrays of the returned data. | ||
+ | ==== Integration with the c_sync wrapper ==== | ||
+ | Provides sync_get_depth (get the depth without needed a callback) and sync_get_rgb (same for rgb) | ||
+ | ==== Kill exception ==== | ||
+ | Stops the runloop from within the body | ||
== How to compile == | == How to compile == |
Revision as of 17:21, 28 November 2010
"Python API, Documents and Stuff"
Contents
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
Things that are intentially different to be more Pythonic
init/open_device
Different calling style (returns the new value as opposed to using a double pointer).
In C:
freenect_init(&ctx, 0)
Becomes:
ctx = init()
Names
Everything is in the freenect module. Since all freenect functions are of the form freenect_blah, we use freenect.blah to refer to them. This is also true for the synchronous calls. 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.
Things not implemented (though could be added)
get/set user
Not implemented
Dev/Ctx/State
Opaque classes wrapping void *'s (you can't access struct elements)
Log functionality and callback
Not implemented
Additional Features
get_accel
A helper function that simplifies the accelerometer handling
runloop
An abstraction that takes in depth, rgb, and body callbacks. The body is called in the 'freenect_process_events' loop. Depth and RGB callbacks are given numpy arrays of the returned data.
Integration with the c_sync wrapper
Provides sync_get_depth (get the depth without needed a callback) and sync_get_rgb (same for rgb)
Kill exception
Stops the runloop from within the body
How to compile
TODO
Example Python Scripts
(amiller) has a few Python demo scripts at https://github.com/amiller/pykinect