Bonjour,
Tout d'abord veuillez m'excuser si je ne poste pas au bon endroit, j'ai pas trouvé de section pour la Kinect.
Voilà mon but est de faire une appli avec la kinect (le but exact n'a pas d'intérêt ici) et pour commencer j'ai téléchargé le SDK v2 qui manque cruellement de tutos pour C++.
Heureusement il est livré avec des samples en C++, je les ai testés ils fonctionnent bien.
Du coup je suis partie de là, j'ai pris le bodyBasics-d2d et j'ai recopié le code dont j'avais besoin en enlevant tout ce qui a rapport à d2d/api windows car je dois réaliser mon programme avec openGL (j'ai pas le choix).
et voilà le problème c'est que ça ne marche pas, je n'ai peut-être pas bien fait mon copier-coller, supprimé trop de choses, pas assez?
L'endroit où ça pêche c'est au niveau de get_isTracked : sur le sample, ça renvoie true quand ça capte un corps, chez moi, ça reste indéfiniment false (alors que je reproduis les mêmes conditions, kinect au même endroit, moi à 2m derrière qui gesticule)
Si quelqu'un a une piste de recherche je suis tout ouïe (prendre le code du sample et supprimer des choses petit à petit?)
merci beaucoup !!
(le code est pas compliqué, un init au début, une fonction appelée dans un update)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65 void BodyTracking::InitKinect() { GetDefaultKinectSensor(&m_pKinectSensor); m_pKinectSensor->Open(); m_pKinectSensor->get_CoordinateMapper(&m_pCoordinateMapper); IBodyFrameSource* pBodyFrameSource = NULL; m_pKinectSensor->get_BodyFrameSource(&pBodyFrameSource); pBodyFrameSource->OpenReader(&m_pBodyFrameReader); pBodyFrameSource->Release(); pBodyFrameSource = NULL; } void BodyTracking::DetectBodies(int windowWidth, int windowHeight) { IBodyFrame* pBodyFrame = NULL; HRESULT hr = m_pBodyFrameReader->AcquireLatestFrame(&pBodyFrame); if (SUCCEEDED(hr)) { IBody* ppBodies[BODY_COUNT] = { 0 }; pBodyFrame->GetAndRefreshBodyData(_countof(ppBodies), ppBodies); for (int i = 0; i < BODY_COUNT; ++i) { IBody* pBody = ppBodies[i]; if (pBody) { BOOLEAN bTracked = false; pBody->get_IsTracked(&bTracked); //******************problem here : bTracked always false***************// if (bTracked) { Joint joints[JointType_Count]; Point2D jointPoints[JointType_Count]; HandState leftHandState = HandState_Unknown; HandState rightHandState = HandState_Unknown; pBody->get_HandLeftState(&leftHandState); pBody->get_HandRightState(&rightHandState); pBody->GetJoints(_countof(joints), joints); for (int j = 0; j < _countof(joints); ++j) { // Calculate the body's position on the screen DepthSpacePoint depthPoint = { 0 }; m_pCoordinateMapper->MapCameraPointToDepthSpace(joints[j].Position, &depthPoint); float screenPointX = static_cast<float>(depthPoint.X * windowWidth) / 512; float screenPointY = static_cast<float>(depthPoint.Y * windowHeight) / 424; jointPoints[j] = Point2D(screenPointX, screenPointY); } //i just printf for the moment for (int i = 0; i < JointType_Count; ++i) { printf("found coordinates : %f, %f\n", jointPoints[i].x, jointPoints[i].y); } } } } } }
Partager