Now using 3D sensing technologies for my research activities, I’ve worked so far with well-known Microsoft Kinect and Asus Xtion cameras, both offering comparable technical characteristics, the latter being substantially more practical to use due to its limited size, but the former being definitely more USB 3.0-friendly, which is now a requirement for most recent computers without USB 2.0 ports. Anyway, although these sensors show decent performance for rather general applications, their depth sensing abilities are quite limited both in terms of resolution and range.

Looking fopr alternative depth sensors, I recently came across time-of-flight cameras from Belgian company SoftKinetic, and especially the DepthSense 325 designed for close-range observation, see for instance their YouTube video for a short (simplistic) technical comparison with Microsoft Kinect, also skip the part starting at 3:00 where they demonstrate their $1500 proprietary software. The camera itself is rather affordable, though, so the main question was more whether it would be technically be able to use it or not, fortunately an SDK for Linux has been made available mid-2013 and regularly updated since then, so I decided to give it a try!

Having received it just a few days after ordering it online, I quickly ran a few tests on my personal computer, which went fine. On another hand, the computer in question is running an old version of Ubuntu (which is actually a “good” thing as the SDK isn’t supporting recent releases, as reported by many users on SoftKinetic’s forum) and offers USB 2.0 ports (same remark). However, what I was more interested in knowing was whether the camera would be compatible my daily work computer’s Arch Linux and USB 3.0-only ports. Long story short, it eventually was, but getting everything to work was not so straightforward.

SoftKinetic’s products being rather unknown compared to Microsoft’s, they have unfortunately not attracted much attention by the open source community yet, so for now, we still have to stick to the proprietary drivers. At the time of writing this blog post, three files are available for download: precompiled binaries gathered in a tar.gz archive dated November 2013 (four months ago), or in .deb or .rpm packages last updated on January 31st 2014 (two weeks ago). After going through the process of installing the latter on Arch (see my GitHub repository for a tentative PKGBUILD), running the DepthSenseViewer demo program made it crash instantly with quite an obscure error message: “Unable to receive message (connection broken by peer)”. Of course with no further information in the console, else it would be no fun, would it? Now, using the four-month-old binaries yielded the same error, but with more details:

DepthSenseServer log started Tue Feb 11 17:36:07 2014
Tue Feb 11 17:36:07 2014: [00007dac]: INFO: DepthSenseServer version linux64 gcc (Release)
Tue Feb 11 17:36:07 2014: [00007dac]: INFO: logging to STDERR
Tue Feb 11 17:36:07 2014: [00007dad]: INFO: using default connection timeout
Tue Feb 11 17:36:07 2014: [00007dad]: INFO: listening on port 6909
Tue Feb 11 17:36:07 2014: [00007dae]: WARNING: Initialization Exception: no enumerator found, some dll files are missing
Tue Feb 11 17:36:07 2014: [00007dae]: ERROR: no enumerator found, some dll files are missing
Tue Feb 11 17:36:07 2014: [00007dae]: INFO: number of connections: 0

Apparently, this problem has been around for some time, as reported on SoftKinetic’s official forums, but for some reason, the official position seems to support Ubuntu 12.04 only. Anyway, a user named bzk found out this problem was is still due to a library problem, more specifically to the fact that the precompiled binaries rely on an outdated version of, and won’t work with recent versions. From there, you need to retrieve the libraries that were used at the time of Ubuntu 12.04 (which you can find here), add them to your LD_LIBRARY_PATH, and voilà, you’re set for great depth sensing adventures!

V for Victory, depth map style

V for Victory, depth map style


Back to project, and with additional features. We discussed last time a numerical differentiation method capable of handling arbitrarily-noisy signals, however one could rapidly oppose it two limitations.

The most evident, perhaps, is the fact that the current implementation only deals with monodimensional signals, i.e. functions of a single variable, while our world is slightly more complicated. Yet most signals encountered in nature hopefully meet certain conditions of regularity so that the problem can be at least partially circumvented. The other important issue is somehow more tricky, namely the necessity of equally-spaced samples. Although quite a lot of practical differentiation problems may boil down to this framework at the cost of reasonable approximations, the question particularly holds when information is not equally distributed or accessible accross dimensions.

Both issues are tackled in a recent article by Riachy et al. (2011), presenting theoretical developments and implementation suggestions, which I merely coded back into Python.

Multidimensional randomly-sampled signal (left) and partial derivative along first axis (right)

Multidimensional randomly-sampled signal (left) and first-order partial derivative estimate along first axis (right)

As before, the corresponding code is available on package’s repository, and you can download it and modify it as you wish under the terms of the GNU General Public License version 3. Oh, and I just found out that iPython project offered a nice interface to display code and associated outputs, so that you can understand that I really meant each letter when I named the package :)

Next time, something completely different!

One month now that I’ve been in Heraklion, Greece, and joined the Computer Vision and Robotics Laboratory of FORTH-ICS as a visiting researcher until September. Of course many things to say, also about the life in Crete, but I shall leave the best for future posts and rather tell about annoying, computer science and math-related stuff :)

It’s been some time, now, that I’ve recurrently been using open-source software, not so much for philosophical reasons but rather for efficiency over cost ratio (which is not necessarily infinite if you consider cost as ergonomics alongside with price). Recently I’ve also switched from Windows 7 to full Unix-like solutions and finally stuck to Lubuntu, an operating system based on Ubuntu, except lightweight and really fast (and ugly, but that’s part of the deal).

Anyway, now that I will be regularly producing programs as part of my research, I’ve chosen to release all sources publicly when possible (i.e. basically when no licensing or top-secret issue comes in the way). I’ve created a GitHub repository for the occasion, and by the way, my thanks go to AmmarkoV for the help and tips (check out his website, it’s cool and geeky). First contribution is called (Easy Algebraic Numerical Differentiation for Python) and consists primarily in an implementation of a derivative estimator introduced in a recent article by Mboup et al. (2009) which you can download and read here.

Easy Algebraic Numerical Differentiation for Python

Noisy signal (left) and first-order derivative estimate using (right)

Although the theoretical framework is relatively dense, I included some demonstration files to try to make things easy to visualize. The whole package is released under the GNU GPL license. Of course, contributions, comments and suggestions of improvement are most welcome.