python从xml读取数据

该博客介绍了一个Python函数,用于从XML文件中读取G3D数据集的骨架数据。它遍历文件夹中的所有XML文件,对每个文件解析骨架跟踪状态和关节位置,特别是关注Spine、ShoulderCenter、ElbowLeft、WristLeft、HandLeft、ElbowRight、WristRight和HandRight等关节,存储24个关节的位置数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值