Piero V.

PyElas

Recently, I started experimenting with stereo vision.

It is a technique to produce depth maps using images captured by close positions. Then, with these maps, it is possible to create 3D representations.

The core of this workflow is the matching algorithm, which takes pairs of post-processed images and creates a “disparity” map. The disparity is the distance between a point in the two images. Depth and disparity are inverses, so it is easy to switch from one to the other.

OpenCV contains some stereo matching algorithms, but they produced a lot of noise. So I looked for another library, and I found libelas.

It is a GPLv3 C++/MATLAB library with many parameters to tune, but I could not find a Python version. My options were to switch to C++ or to port it by myself. I chose the latter, hoping that also others can benefit from it 🙂️.

Long story short, I published my first package on PyPI: PyElas.

How to use it

You can install it using pip. Then you just have to do this: … [Leggi il resto]

On acquiring 3D models of people

For my Master’s degree thesis, I dove into acquiring static objects with a RGBD sensor. Eventually, I decided to use the Kinect Fusion algorithm, which produced decent results.

I found this topic fascinating, so I continued on my own, but in another direction: acquiring people. So, in the last few months, I have been experimenting with scanning myself and my friends with a Microsoft Kinect One.

Conditioned by my previous results, initially, I tried with point clouds.

Deformation graph approach

One approach I found in several papers consists in:

  1. acquiring only a few scans (from 6-8 points of view), with the person as still as they can;
  2. performing a rough global alignment;
  3. running ICP to improve the rigid alignment locally;
  4. downsampling the point cloud to build a deformation graph;
  5. resolving an optimization problem;
  6. deforming the denser point clouds.

Reaching point 3 is not trivial because people move. ICP can be very unforgiving, and in some cases, you also need some luck to obtain good results at this stage.

For downsampling (Point 4), I used Open3D’s voxelization followed by averaging point coordinates. I do not know how this can influence the final results compared to something like a clustering algorithm. … [Leggi il resto]

Picking voxels on the Open3D visualizer

While working on my M.S. thesis, I got to know Open3D. To me, it is basically the Swiss army knife for 3D data acquired from reality.

It offers implementations of performant algorithms, Python support to quickly change your scripts or adjust parameters to improve your results, and a visualizer to see them.

Unfortunately, this very visualizer is not very interactive. Often, I would like to pick objects in the scene and drag them or modify them. Sadly, in Python, it is not possible. But it is in C++, and I will comment on how you can implement that.

But first, I suggest you download my code, as I will refer to it. It combines the routines of the following sections to allow picking and deleting voxels.

Interact with the Mouse

Usually, when I want to do something with Open3D, I look at the examples on their Read the Docs documentation. However, they also offer a Doxygen-based one for the C++ part of the library. … [Leggi il resto]

LibGDX e formati personalizzati di modelli

LibGDX

Di tanto in tanto mi diletto con motori di rendering 3D e game engine. Questa volta è satato il turno di LibGDX.

LibGDX è un framework per lo sviluppo di videogiochi 2D e 3D scritto in Java.

Il suo scopo è quello di rendere disponibili delle API Crossplatform (Windows, Linux, Android, OS X, iOS etc…) per il rendering 2D e 3D (OpenGL ES), la matematica associata, l’audio (OpenAL, Ogg ed MP3) e la fisica (Box2D e Bullet). Inoltre, dove possibile, usa metodi nativi scritti in C per aumentare le prestazioni, ma essendo scritto principalmente in Java, permette l’uso qualsiasi classe dell’enorme libreria standard o qualunque libreria scritta nello stesso linguaggio.

Un altro punto di forza di questo progetto è la grande community che vi è attorno, constatabile anche nel numero di stelle su GitHub.

Forse è merito anche della licenza, molto permissiva: la Apache License 2.0.

Formati di modelli personalizzati

Uno dei miei obiettivi, che prima o poi potrebbe diventare realtà, è fare un gioco, magari anche piccolo, ma compatibile con le mappe dei vecchi Call of Duty 1 e 2, con cui ho giocato molto in LAN con i miei amici. … [Leggi il resto]

Panda3D per Debian Sid

Dopo aver studiato un po’ Blender e aver avuto qualche difficoltà ad ottenere esattamente quello che volevo con la Game logic ho deciso di provare un altro motore per videogiochi: Panda3D.

Panda3D è un motore rilasciato sotto la BSD Modified license e tra i suoi contributori si può citare la Walt Disney. Le sue API consentono di scrivere videogiochi in Python e in C++.

Come mesh da quanto ho capito - devo ancora approfondire per bene la questione - ha un formato suo (l’egg) ma è compatibile anche con X, 3ds ed esiste un plugin per esportare i file da Blender.

Perciò come caratteristiche promette bene.

Però c’è un problema: per Debian esiste il pacchetto solo per la Squeeze. E le dipendenze hanno software che include la versione nel nome del pacchetto e nei file stessi, perciò anche modificando il pacchetto non si ottiene un risultato utilizzabile (ho provato io stesso).

Così me lo sono ricompilato. Però la versione 1.72 (la stabile) non funzionava, così ho dovuto usare quella csv.

Per compilarla ho utilizzato il metodo makepanda/makepanda.py --everything --installer. Pur avendo specificato everything però alcune cose, tra cui ffmpeg sono state omesse. Invece con installer ho ottenuto un file deb che vi linko.

Un’ulteriore nota prima di scaricare e installare il file: ho compilato e installato anche bullet, una libreria per la fisica e anche Panda è configurato per usarla, perciò installate anche quel file. Purtroppo ho dovuto usare checkinstall e perciò non so le corrette dipendenze.

Ecco i link: bullet_2.79-1_i386.deb e panda3d1.8_1.8.0_i386.deb.

Spero vi possano tornare utili.