@@ -46,6 +46,55 @@ const RegionComponents = {
4646 />
4747 )
4848 } ) ,
49+ keypoints : ( { region, iw, ih, keypointDefinitions } ) => {
50+ const { points, keypointDefinitionId } = region
51+ if ( ! keypointDefinitions [ keypointDefinitionId ] ) {
52+ throw new Error (
53+ `No definition for keypoint configuration "${ keypointDefinitionId } "`
54+ )
55+ }
56+ const { landmarks, connections } = keypointDefinitions [ keypointDefinitionId ]
57+ return (
58+ < g >
59+ { Object . entries ( points ) . map ( ( [ keypointId , [ x , y ] ] , i ) => (
60+ < g key = { i } transform = { `translate(${ x * iw } ${ y * ih } )` } >
61+ < path
62+ d = { "M0 8L8 0L0 -8L-8 0Z" }
63+ strokeWidth = { 2 }
64+ stroke = { landmarks [ keypointId ] . color }
65+ fill = "transparent"
66+ />
67+ </ g >
68+ ) ) }
69+ { connections . map ( ( [ kp1Id , kp2Id ] ) => {
70+ const kp1 = points [ kp1Id ]
71+ const kp2 = points [ kp2Id ]
72+ const midPoint = [ ( kp1 [ 0 ] + kp2 [ 0 ] ) / 2 , ( kp1 [ 1 ] + kp2 [ 1 ] ) / 2 ]
73+
74+ return (
75+ < g key = { `${ kp1 } .${ kp2 } ` } >
76+ < line
77+ x1 = { kp1 [ 0 ] * iw }
78+ y1 = { kp1 [ 1 ] * ih }
79+ x2 = { midPoint [ 0 ] * iw }
80+ y2 = { midPoint [ 1 ] * ih }
81+ strokeWidth = { 2 }
82+ stroke = { landmarks [ kp1Id ] . color }
83+ />
84+ < line
85+ x1 = { kp2 [ 0 ] * iw }
86+ y1 = { kp2 [ 1 ] * ih }
87+ x2 = { midPoint [ 0 ] * iw }
88+ y2 = { midPoint [ 1 ] * ih }
89+ strokeWidth = { 2 }
90+ stroke = { landmarks [ kp2Id ] . color }
91+ />
92+ </ g >
93+ )
94+ } ) }
95+ </ g >
96+ )
97+ } ,
4998 "expanding-line" : memo ( ( { region, iw, ih } ) => {
5099 let { expandingWidth = 0.005 , points } = region
51100 expandingWidth = points . slice ( - 1 ) [ 0 ] . width || expandingWidth
@@ -114,7 +163,7 @@ const RegionComponents = {
114163}
115164
116165export const WrappedRegionList = memo (
117- ( { regions, iw, ih, fullSegmentationMode } ) => {
166+ ( { regions, keypointDefinitions , iw, ih, fullSegmentationMode } ) => {
118167 return regions
119168 . filter ( ( r ) => r . visible !== false )
120169 . map ( ( r ) => {
@@ -125,7 +174,8 @@ export const WrappedRegionList = memo(
125174 region = { r }
126175 iw = { iw }
127176 ih = { ih }
128- fullgeSegmentationMode = { fullSegmentationMode }
177+ keypointDefinitions = { keypointDefinitions }
178+ fullSegmentationMode = { fullSegmentationMode }
129179 />
130180 )
131181 } )
@@ -137,6 +187,7 @@ export const RegionShapes = ({
137187 mat,
138188 imagePosition,
139189 regions = [ ] ,
190+ keypointDefinitions,
140191 fullSegmentationMode,
141192} ) => {
142193 const iw = imagePosition . bottomRight . x - imagePosition . topLeft . x
@@ -161,6 +212,7 @@ export const RegionShapes = ({
161212 regions = { regions }
162213 iw = { iw }
163214 ih = { ih }
215+ keypointDefinitions = { keypointDefinitions }
164216 fullSegmentationMode = { fullSegmentationMode }
165217 />
166218 </ svg >
0 commit comments