- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我已经在 labelImg 工具中对图像进行了注释,并以 XML 形式获得了注释。我需要将其转换为 LabelMe JSON 格式,并在其中编码 imageData。
样本输入:
示例 XML:
<annotation>
<folder>blocks</folder>
<filename>sample_annotation.jpg</filename>
<path>/path/sample_annotation.jpg</path>
<source>
<database>Unknown</database>
</source>
<size>
<width>720</width>
<height>540</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>cube</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>90</xmin>
<ymin>87</ymin>
<xmax>196</xmax>
<ymax>194</ymax>
</bndbox>
</object>
<object>
<name>cube</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>498</xmin>
<ymin>188</ymin>
<xmax>607</xmax>
<ymax>296</ymax>
</bndbox>
</object>
</annotation>
{'imageData': '/9j/2w.........../9k=',
'imageHeight': 540,
'imagePath': 'sample_annotation.jpg',
'imageWidth': 720,
'shapes': [{'group_id': None,
'label': 'cube',
'points': [[90, 87], [196, 194]],
'shape_type': 'rectangle'},
{'group_id': None,
'label': 'cube',
'points': [[498, 188], [607, 296]],
'shape_type': 'rectangle'}]}
最佳答案
我就是这样解决的。
第 1 步:XML 到 CSV 格式
### xml to csv
import cv2
import os
import pandas as pd
import xml.etree.ElementTree as ET
def xml2csv(xml_path):
"""Convert XML to CSV
Args:
xml_path (str): Location of annotated XML file
Returns:
pd.DataFrame: converted csv file
"""
print("xml to csv {}".format(xml_path))
xml_list = []
xml_df=pd.DataFrame()
try:
tree = ET.parse(xml_path)
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)
except Exception as e:
print('xml conversion failed:{}'.format(e))
return pd.DataFrame(columns=['filename,width,height','class','xmin','ymin','xmax','ymax'])
return xml_df
调用函数获取转换后的CSV
xml_path='/path/to/sample_annotation.xml'
xml_csv=xml2csv(xml_path)
中级 CSV 如下所示:
filename width height class xmin ymin xmax ymax
0 sample_annotation.jpg 720 540 cube 90 87 196 194
1 sample_annotation.jpg 720 540 cube 498 188 607 296
第 2 步:CSV 到 LabelMe JSON
import cv2
import numpy as np
import os
import json
import pandas as pd
import base64
def df2labelme(symbolDict,image_path,image):
""" convert annotation in CSV format to labelme JSON
Args:
symbolDict (dataframe): annotations in dataframe
image_path (str): path to image
image (np.ndarray): image read as numpy array
Returns:
JSON: converted labelme JSON
"""
try:
symbolDict['min']= symbolDict[['xmin','ymin']].values.tolist()
symbolDict['max']= symbolDict[['xmax','ymax']].values.tolist()
symbolDict['points']= symbolDict[['min','max']].values.tolist()
symbolDict['shape_type']='rectangle'
symbolDict['group_id']=None
height,width,_=image.shape
symbolDict['height']=height
symbolDict['width']=width
encoded = base64.b64encode(open(image_path, "rb").read())
symbolDict.loc[:,'imageData'] = encoded
symbolDict.rename(columns = {'class':'label','filename':'imagePath','height':'imageHeight','width':'imageWidth'},inplace=True)
converted_json = (symbolDict.groupby(['imagePath','imageWidth','imageHeight','imageData'], as_index=False)
.apply(lambda x: x[['label','points','shape_type','group_id']].to_dict('r'))
.reset_index()
.rename(columns={0:'shapes'})
.to_json(orient='records'))
converted_json = json.loads(converted_json)[0]
except Exception as e:
converted_json={}
print('error in labelme conversion:{}'.format(e))
return converted_json
调用 JSON 转换器
image_path='path/to/sample_annotation.jpg'
image=cv2.imread(image_path)
csv_json=df2labelme(xml_csv,image_path,image)
最终输出
{'imageData': '/9j/2w.........../9k=',
'imageHeight': 540,
'imagePath': 'sample_annotation.jpg',
'imageWidth': 720,
'shapes': [{'group_id': None,
'label': 'cube',
'points': [[90, 87], [196, 194]],
'shape_type': 'rectangle'},
{'group_id': None,
'label': 'cube',
'points': [[498, 188], [607, 296]],
'shape_type': 'rectangle'}]}
关于python - 将 labelImg XML 矩形转换为带有图像数据的 labelMe JSON 多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63061428/
我们的团队使用 labelMe 来注释图像。我收到了一批 VOC 格式的注释,需要在 labelMe 中打开它们进行审阅,但在将它们转换为 labelMe 格式时遇到问题。 我可以获得 labelMe
我有从 LabelMe 工具生成的带注释的 xml 文件。我必须将其转换为 csv 文件。 image10.jpgusers/mayurakewar//cardMayur Akewar480640id
我想创建一个对象检测神经网络,从一些具有特殊形状的特殊项目和有限 相对较小图像数据集。为此我使用了labelme 由于对象的形状,我认为多边形标签比普通的拳击标签表现更好。我想使用一个来自 coco
我有一个由 Labelme 工具作为 JSON 文件生成的图像掩码数据集,在 Github 教程 (https://github.com/wkentaro/labelme/tree/master/ex
我已经在 labelImg 工具中对图像进行了注释,并以 XML 形式获得了注释。我需要将其转换为 LabelMe JSON 格式,并在其中编码 imageData。 样本输入: 示例 XML:
我是一名优秀的程序员,十分优秀!