I am doing a brief research to see if we can use Intel® RealSense™ Depth Camera D435 together with NUITRACK SDK to do some bone measurements before investing time and money into this.
I just ran the NuitrackGLSample.cpp and just added one function to print out the distance between two joints.
For that I used the following basic math function:
float NuitrackGLSample::distanceBetween(const tdv::nuitrack::Vector3& a, const tdv::nuitrack::Vector3& b)
float distance = sqrt(pow(a.x - b.x, 2) + pow(a.y - b.y, 2) + pow(a.z - b.z, 2));
I then tested with the distance between JOINT_LEFT_SHOULDER and JOINT_LEFT_ELBOW.
using myself and a colleague as test subjects.
Now my question is, how good of a result should I expect? For example the printouts shows my arm length being shorter than of my colleague which is wrong as I am taller and have longer arms.
Are we expecting two much from the camera/SDK? How close to real numbers do you think we should be able to make? At the moments the length for a arm is for example 5-10 cm off.
@alborz you will probably also discover that the length depends on the distance from the camera.
3D camera can be cheap and fast solution with very restricted accuracy.
What precision your system requires?
If we told people to stay at a pre calculated distance from the camera, could we get something that is maybe off by a couple of cm?
Nuitrack joints do not directly correspond to human joints (please see the picture below for reference). For example, joint torso (as well as joint head) is used only to create a stable Nuitrack skeleton though there is no such joint in the real human body.
Besides, quality of detection and tracking of joints depend on the quality of the depth data received from the camera. We observe so-called “waving effect” with D435 sensor and this may also cause incorrect joint detection.
As for your tests, please advise, what was the difference in height of 2 persons and in measured distances between left shoulder and left elbow (according to printouts)? Visually, were the skeletons of 2 persons displayed incorrectly and how much was the offset from the real body in the image?
Hi olga, and thank you for the through answer.
Of course we understand that the joins are only a visual representation, what we need for our application is to measure a persons arm length and legs length, when the person is standing in front of the camera, at a certain distance and is standing still. In a well lit environment. I would say that this should be quite an ideal situation.
Using your SDK, the visual representation of the skeleton is correctly displayed, but if for example one person is standing in front of the camera and we continuously monitor arms length, we receive a data that jumps up and downs a couple of centimeters, for example left arm seem to jump from 48cm to 53cm with a HIGH confident value.
will you please answer this question?
Hi @mohammad ,
We are currently working on establishing robust baselines for the measurements of bone lengths.
Could you please specify what particular depth sensor do you use?
Kind of official announcement
This feature (body measurements / analytics) is confirmed for the middle-term (I believe it should be available during next quarter 22Q3), so please stay tuned.