from xml.etree import ElementTree as ET
def getSubDir(path):
dirname=list()
for file in os.listdir(path):
dirname.append(file)
return dirname
def get_xml_data(path):
xmlFileNames = getSubDir(path)
gesturePositionEndCount = 0
for xmlFileName in xmlFileNames:
if gesturePositionEndCount < int(str(xmlFileName).split("Skeleton ")[1].split(".xml")[0]):
gesturePositionEndCount = int(str(xmlFileName).split("Skeleton ")[1].split(".xml")[0])
gesture = np.zeros((gesturePositionEndCount+1, 24))
gesturePositionStartCount = gesturePositionEndCount
for xmlFileName in xmlFileNames:
xmlPath = path + xmlFileName
dom=ET.parse(xmlPath)
TrackStatus=dom.findall('./Skeleton/TrackingState')
isTracked = False
for trackStatu in TrackStatus:
if trackStatu.text=="Tracked":
isTracked=True
JointsPosition = np.zeros((24))
if isTracked==True:
gestureCount=int(str(xmlFileName).split("Skeleton ")[1].split(".xml")[0])
if gesturePositionStartCount > gestureCount:
gesturePositionStartCount = gestureCount
Joints = dom.findall('./Skeleton/Joints/Joint/Position')
JointType=dom.findall('./Skeleton/Joints/Joint/JointType')
for i in range(20):
if JointType[i].text == 'Spine' :
JointsPosition[0] = float(Joints[i][0].text)
JointsPosition[1] = float(Joints[i][1].text)
JointsPosition[2] = float(Joints[i][2].text)
elif JointType[i].text == 'ShoulderCenter':
JointsPosition[3] = float(Joints[i][0].text)
JointsPosition[4] = float(Joints[i][1].text)
JointsPosition[5] = float(Joints[i][2].text)
elif JointType[i].text == 'ElbowLeft':
JointsPosition[6] = float(Joints[i][0].text)
JointsPosition[7] = float(Joints[i][1].text)
JointsPosition[8] = float(Joints[i][2].text)
elif JointType[i].text == 'WristLeft':
JointsPosition[9] = float(Joints[i][0].text)
JointsPosition[10] = float(Joints[i][1].text)
JointsPosition[11] = float(Joints[i][2].text)
elif JointType[i].text == 'HandLeft':
JointsPosition[12] = float(Joints[i][0].text)
JointsPosition[13] = float(Joints[i][1].text)
JointsPosition[14] = float(Joints[i][2].text)
elif JointType[i].text == 'ElbowRight':
JointsPosition[15] = float(Joints[i][0].text)
JointsPosition[16] = float(Joints[i][1].text)
JointsPosition[17] = float(Joints[i][2].text)
elif JointType[i].text == 'WristRight':
JointsPosition[18] = float(Joints[i][0].text)
JointsPosition[19] = float(Joints[i][1].text)
JointsPosition[20] = float(Joints[i][2].text)
elif JointType[i].text == 'HandRight':
JointsPosition[21] = float(Joints[i][0].text)
JointsPosition[22] = float(Joints[i][1].text)
JointsPosition[23] = float(Joints[i][2].text)
gesture[gestureCount]=JointsPosition
gesture=gesture[gesturePositionStartCount:]
return gesture
以下为xml文件,为G3D数据集之一 [1]Hyo-Rim Choi ID ,TaeYong Kim, Combined Dynamic Time Warping with Multiple Sensors for 3D Gesture Recognition
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfSkeleton xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Skeleton>
<TrackingState>Tracked</TrackingState>
<TrackingId>2</TrackingId>
<Position>
<X>-0.0214900617</X>
<Y>-0.0816660151</Y>
<Z>2.89792681</Z>
</Position>
<Joints>
<Joint>
<Position>
<X>0.00019626577</X>
<Y>0.0970646441</Y>
<Z>2.97007537</Z>
</Position>
<JointType>HipCenter</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>160</X>
<Y>111</Y>
<Depth>2970</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>317</X>
<Y>251</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.00932758953</X>
<Y>0.159060836</Y>
<Z>3.02927184</Z>
</Position>
<JointType>Spine</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>159</X>
<Y>105</Y>
<Depth>3029</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>315</X>
<Y>241</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.00241138716</X>
<Y>0.5289015</Y>
<Z>3.04308677</Z>
</Position>
<JointType>ShoulderCenter</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>160</X>
<Y>70</Y>
<Depth>3043</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>316</X>
<Y>178</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.01377838</X>
<Y>0.7075398</Y>
<Z>2.98631644</Z>
</Position>
<JointType>Head</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>161</X>
<Y>52</Y>
<Depth>2986</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>319</X>
<Y>146</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.162368089</X>
<Y>0.422489941</Y>
<Z>2.99799681</Z>
</Position>
<JointType>ShoulderLeft</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>145</X>
<Y>80</Y>
<Depth>2998</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>289</X>
<Y>195</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.213914037</X>
<Y>0.162961826</Y>
<Z>2.93309474</Z>
</Position>
<JointType>ElbowLeft</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>139</X>
<Y>104</Y>
<Depth>2933</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>279</X>
<Y>239</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.221437737</X>
<Y>-0.04951407</Y>
<Z>2.83616543</Z>
</Position>
<JointType>WristLeft</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>138</X>
<Y>125</Y>
<Depth>2836</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>276</X>
<Y>276</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.200154513</X>
<Y>-0.146072283</Y>
<Z>2.815992</Z>
</Position>
<JointType>HandLeft</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>140</X>
<Y>135</Y>
<Depth>2816</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>280</X>
<Y>295</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.16760999</X>
<Y>0.401035815</Y>
<Z>3.05390549</Z>
</Position>
<JointType>ShoulderRight</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>176</X>
<Y>82</Y>
<Depth>3054</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>345</X>
<Y>200</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.209677354</X>
<Y>0.1398712</Y>
<Z>3.0224824</Z>
</Position>
<JointType>ElbowRight</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>180</X>
<Y>107</Y>
<Depth>3022</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>352</X>
<Y>244</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.2035667</X>
<Y>-0.07699941</Y>
<Z>2.937693</Z>
</Position>
<JointType>WristRight</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>180</X>
<Y>127</Y>
<Depth>2938</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>352</X>
<Y>281</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.183235392</X>
<Y>-0.171021983</Y>
<Z>2.9072</Z>
</Position>
<JointType>HandRight</JointType>
<TrackingState>Inferred</TrackingState>
<PositionToDepth>
<X>178</X>
<Y>137</Y>
<Depth>2907</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>349</X>
<Y>298</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.07376713</X>
<Y>0.0284980889</Y>
<Z>2.94717479</Z>
</Position>
<JointType>HipLeft</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>153</X>
<Y>117</Y>
<Depth>2947</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>303</X>
<Y>263</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.167436987</X>
<Y>-0.486169368</Y>
<Z>2.995955</Z>
</Position>
<JointType>KneeLeft</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>144</X>
<Y>166</Y>
<Depth>2996</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>288</X>
<Y>352</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.205453873</X>
<Y>-0.8678049</Y>
<Z>2.98811626</Z>
</Position>
<JointType>AnkleLeft</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>140</X>
<Y>203</Y>
<Depth>2988</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>280</X>
<Y>418</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>-0.231630847</X>
<Y>-0.9311304</Y>
<Z>2.96172214</Z>
</Position>
<JointType>FootLeft</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>138</X>
<Y>210</Y>
<Depth>2962</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>275</X>
<Y>431</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.07490804</X>
<Y>0.01872996</Y>
<Z>2.96360135</Z>
</Position>
<JointType>HipRight</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>167</X>
<Y>118</Y>
<Depth>2964</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>330</X>
<Y>265</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.115202829</X>
<Y>-0.496567756</Y>
<Z>2.99769115</Z>
</Position>
<JointType>KneeRight</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>171</X>
<Y>167</Y>
<Depth>2998</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>336</X>
<Y>354</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.149258137</X>
<Y>-0.8660327</Y>
<Z>2.995776</Z>
</Position>
<JointType>AnkleRight</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>174</X>
<Y>203</Y>
<Depth>2996</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>342</X>
<Y>419</Y>
</PositionToColor>
</Joint>
<Joint>
<Position>
<X>0.161565468</X>
<Y>-0.8981455</Y>
<Z>2.92454815</Z>
</Position>
<JointType>FootRight</JointType>
<TrackingState>Tracked</TrackingState>
<PositionToDepth>
<X>176</X>
<Y>208</Y>
<Depth>2925</Depth>
<PlayerIndex>0</PlayerIndex>
</PositionToDepth>
<PositionToColor>
<X>344</X>
<Y>428</Y>
</PositionToColor>
</Joint>
</Joints>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
<Skeleton>
<TrackingState>NotTracked</TrackingState>
<TrackingId>0</TrackingId>
<Position>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Position>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
<Skeleton>
<TrackingState>NotTracked</TrackingState>
<TrackingId>0</TrackingId>
<Position>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Position>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
<Skeleton>
<TrackingState>NotTracked</TrackingState>
<TrackingId>0</TrackingId>
<Position>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Position>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
<Skeleton>
<TrackingState>NotTracked</TrackingState>
<TrackingId>0</TrackingId>
<Position>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Position>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
<Skeleton>
<TrackingState>NotTracked</TrackingState>
<TrackingId>0</TrackingId>
<Position>
<X>0</X>
<Y>0</Y>
<Z>0</Z>
</Position>
<ClippedEdges>None</ClippedEdges>
</Skeleton>
</ArrayOfSkeleton>