python - 无法在python中将xml文件转换为csv

标签 python xml csv object-detection

为了使用 tensorflow 检测 API,我需要将 xml 文件转换为 csv 标签。我使用了这段代码,取自 datitran 的浣熊检测模型。他的github上有这个,你试试吧。 https://github.com/datitran/raccoon_dataset

但是,当我使用他的 xml_to_csv 代码时,我可以编译它,但新的标签文件是空的。这是代码,

import os
import glob
import pandas as pd
import xml.etree.ElementTree as ET


def xml_to_csv(path):
xml_list = []
for xml_file in glob.glob(path + '/*.xml'):
    tree = ET.parse(xml_file)
    root = tree.getroot()
    for member in root.findall('object'):
        value = (root.find('filename').text,
                 int(root.find('size')[0].text),
                 int(root.find('size')[1].text),
                 member[0].text,
                 int(member[4][0].text),
                 int(member[4][1].text),
                 int(member[4][2].text),
                 int(member[4][3].text)
                 )
        xml_list.append(value)
column_name = ['filename', 'width', 'height', 'class', 'xmin', 'ymin', 'xmax', 'ymax']
xml_df = pd.DataFrame(xml_list, columns=column_name)
return xml_df


def main():
for directory in ['train','test']:
    image_path = os.path.join(os.getcwd(), 'images/{}'.format(directory))
    xml_df = xml_to_csv(image_path)
    xml_df.to_csv('data/{}_labels.csv'.format(directory), index=None)
    print('Successfully converted xml to csv.')


main()

其中“train”和“test”是包含 xml 文件的文件夹,images 是包含它们的文件夹,data 是我希望保存标签文件的文件夹。

最佳答案

我已使用上面给出的链接下载 github 存储库并查看了代码。 首先,我复制上面的代码并粘贴到一个新文件中并运行它。

在上面发布的代码中,您获得空文件的原因是您为要调用的方法设置的路径在存储库中不存在,

如果我假设您想要使用 annotations 文件夹中提供的 xml 文件来创建新的 csv 文件来包含测试和单独训练数据,您所要做的就是在 Images 目录中创建两个名为 testtrain 的新目录,然后复制 >xml 文件从 annotations 到您创建的这些新目录,然后运行上面的代码,它就可以完美运行

我只是做了同样的事情,只从 annotations 目录复制了一些 xml 文件 当我这样做时,打印数据框以显示

 F:\expts\raccoon_dataset-master\raccoon_dataset-master>python import.py
          filename  width  height    class  xmin  ymin  xmax  ymax
0    raccoon-1.png    650     417  raccoon    81    88   522   408
1   raccoon-10.png    450     495  raccoon   130     2   446   488
2   raccoon-11.png    660     432  raccoon     3     1   461   431
3   raccoon-12.png    259     194  raccoon    28    21   126   181
4   raccoon-12.png    259     194  raccoon    85    33   235   193
5   raccoon-13.png    660     495  raccoon    55    28   393   313
6   raccoon-14.png    900     484  raccoon   163    81   546   438
7   raccoon-15.png    640     360  raccoon   313    61   614   360
8    raccoon-2.png    800     573  raccoon    60    51   462   499
9    raccoon-3.png    720     480  raccoon     1     1   720   476
10   raccoon-4.png    275     183  raccoon    21    11   200   183
11   raccoon-5.png    270     187  raccoon     3     3   260   179
12   raccoon-6.png    480     360  raccoon     1    44   307   316
13   raccoon-7.png    410     308  raccoon    92    79   271   264
14   raccoon-8.png    259     194  raccoon    16    11   236   175
15   raccoon-9.png    347     510  raccoon    10     7   347   471
Successfully converted xml to csv.
         filename  width  height    class  xmin  ymin  xmax  ymax
0  raccoon-16.png    424     640  raccoon    51   178   355   632
1  raccoon-17.png    259     194  raccoon    95    60   167   118
2  raccoon-18.png    240     156  raccoon    32    25   201   130
3  raccoon-19.png    259     194  raccoon    87     8   182    89
4  raccoon-20.png    720     540  raccoon     2    29   720   503
5  raccoon-21.png    290     174  raccoon    59     2   216   171
6  raccoon-22.png    640     360  raccoon   252    76   466   335
7  raccoon-23.png    259     194  raccoon   108     1   258   194
8  raccoon-24.png    268     188  raccoon    77    48   179   156
9  raccoon-24.png    268     188  raccoon   139    77   202   145
Successfully converted xml to csv.

希望这有帮助

关于python - 无法在python中将xml文件转换为csv,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52047920/

相关文章:

java - 如何根据文本文件中的值更新文本文件

linux - 如何根据指定的行数拆分 CSV 文件?

python - 如何将具有相同文件名的 csv 导入数据框,应用一些程序,然后合并?

python - 如何从 pyspark 中的另一列中查找一列的顶级层次结构?

python - 将 HDF5 子集存储为数据集(在 Python 中)

javascript - for 循环在第一次迭代时停止

C# XmlSerializer : Create xmlns attribute on a nested object

java - 无法加载指定的别名类

python - 未选择图形 openpyxl 类别

java - 如何使用Java将Excel(2003和2007版本)文件导入到MySQL?