@@ -61,10 +61,22 @@ class PoseNet extends EventEmitter {
61
61
return posenet . getAdjacentKeyPoints ( keypoints , confidence ) ;
62
62
}
63
63
64
+ // eslint-disable-next-line class-methods-use-this
65
+ mapParts ( pose ) {
66
+ const newPose = JSON . parse ( JSON . stringify ( pose ) ) ;
67
+ newPose . keypoints . forEach ( ( keypoint ) => {
68
+ newPose [ keypoint . part ] = {
69
+ x : keypoint . position . x ,
70
+ y : keypoint . position . y ,
71
+ confidence : keypoint . score ,
72
+ } ;
73
+ } ) ;
74
+ return newPose ;
75
+ }
76
+
64
77
/* eslint max-len: ["error", { "code": 180 }] */
65
78
async singlePose ( inputOr , cb ) {
66
79
let input ;
67
-
68
80
if ( inputOr instanceof HTMLImageElement || inputOr instanceof HTMLVideoElement ) {
69
81
input = inputOr ;
70
82
} else if ( typeof inputOr === 'object' && ( inputOr . elt instanceof HTMLImageElement || inputOr . elt instanceof HTMLVideoElement ) ) {
@@ -74,8 +86,8 @@ class PoseNet extends EventEmitter {
74
86
}
75
87
76
88
const pose = await this . net . estimateSinglePose ( input , this . imageScaleFactor , this . flipHorizontal , this . outputStride ) ;
77
-
78
- const result = [ { pose , skeleton : this . skeleton ( pose . keypoints ) } ] ;
89
+ const poseWithParts = this . mapParts ( pose ) ;
90
+ const result = [ { poseWithParts , skeleton : this . skeleton ( pose . keypoints ) } ] ;
79
91
this . emit ( 'pose' , result ) ;
80
92
81
93
if ( this . video ) {
@@ -101,7 +113,8 @@ class PoseNet extends EventEmitter {
101
113
}
102
114
103
115
const poses = await this . net . estimateMultiplePoses ( input , this . imageScaleFactor , this . flipHorizontal , this . outputStride ) ;
104
- const result = poses . map ( pose => ( { pose, skeleton : this . skeleton ( pose . keypoints ) } ) ) ;
116
+ const posesWithParts = poses . map ( pose => ( this . mapParts ( pose ) ) ) ;
117
+ const result = posesWithParts . map ( pose => ( { pose, skeleton : this . skeleton ( pose . keypoints ) } ) ) ;
105
118
this . emit ( 'pose' , result ) ;
106
119
if ( this . video ) {
107
120
return tf . nextFrame ( ) . then ( ( ) => this . multiPose ( ) ) ;
0 commit comments