I'm looking for a programmer experienced in rendering 3D objects for which this will be a piece of cake. This project involves Linux, C++ and any 3D library you wish.
Basically, I need a library that generates 3D images of the human hand, along with the depth and coordinates of the joints. Below you will find the full description of the project.
I should be able to specify parameters such as:
* dimensions of image (i.e. 320x240)
* hand position - the coordinates in millimieters of the center of the hand, lets say the center of the palm (i.e. x=0, y=0, z=1000 one meter away from the camera). The camera is at (0,0,0) at is looking towards (0,0,1);
* hand orientation - Euler angles or pitch yaw roll (i.e. 30' by 0' by 90')
* hand texture file - although I do not have any textures yet (i.e. [url removed, login to view])
* hand pose parameters - joint bend, side-to-side movement of the fingers wrist bend
* hand shape parameters - I would like a way to make the hand look different: fingers longer/shorter, fatter/slimer. One way is to supply parameters for each of these, the other is to supply different models for man/woman, child/adult, fat/skinny.
Then after calling a RENDER function, I should be able to get these three structures:
* a color image representing the rendering of the hand with the selected texture in white normal ambient light. I want the colors of the texture to match exactly the colors in the image. Also the background should be black.
* a depth image: gray scale image that expresses the distance, in millimeters to all pixels in the image.
* the set of 3D coordinates of all the joints of the hand: finger joints, knucles, wrist, end of arm segment and center of palm, even if it's not technically a joint
To illustrate, I should be able to something like this in C++:
// instantiate the class
HR = new HandRender();
// set parameters, I should be able to set each parameter individually
// also individual functions would be useful, such as [url removed, login to view](320, 240)
for (int i=0; i < num_params; i++)
[url removed, login to view](parameter_name[i], parameter_value[i]);
// render the thing and keep the data in memory
[url removed, login to view]();
// retrieve the important data
color = [url removed, login to view]();
depth = [url removed, login to view]();
coordinates = [url removed, login to view]();
You should supply a model and a texture of the hand. It can be a free model available on the internet. The model should also have a little bit of arm beyond the wrist. For example like this: [url removed, login to view]
It's very important to make this program work as efficiently as possible. One optimization would be to clip the returned images (depth and color) to eliminate useless black background. So only the rectangle that encompasses the hand is needed. In this case a function should also return the coordinates, in the returned images of the (0,0) point.
Also extremely important is the speed. Please give details on how fast you could make it work, in frames per second at 320x240 at 1 meter distance. And how you could achieve this.
Finally you should deliver a library and a simple program that demonstrates the program's capabilities. The code should be compilable on a standard Ubuntu system. It should be extremely easy to install. Also the library code should be readable.
The 3D library you chose can be anything, even open source.
For extra credit, you could add an option for two hands to be rendered.
Also I don't know if/how it is possible, but if you can do GPU acceleration for this, please also talk about this.
Please note, I'm looking for someone who can supply a hand model, or use a free one with a 3D rendering engine such as Ogre3D, Crystal Space, jMonkey Engine, Game Blender or other free engines.
So what you need is to just load the rigged model, apply parameters such as joint bends, if possible reshape the hand (finger slimmer/fatter etc), render it, and return the color image, the depth image and coordinates of joints.
If after rendering you can get the coordinates of the vertices of the hand, than the joint could be inferred from that.
I hope this provides sufficient detail.