|
@@ -24,37 +24,48 @@ class LabelFile(object):
|
|
|
self.filename = filename
|
|
|
|
|
|
def load(self, filename):
|
|
|
+ keys = ['imageData', 'imagePath', 'lineColor', 'fillColor', 'shapes']
|
|
|
try:
|
|
|
with open(filename, 'rb' if PY2 else 'r') as f:
|
|
|
data = json.load(f)
|
|
|
- if data['imageData'] is not None:
|
|
|
- imageData = base64.b64decode(data['imageData'])
|
|
|
- else:
|
|
|
- # relative path from label file to relative path from cwd
|
|
|
- imagePath = os.path.join(os.path.dirname(filename),
|
|
|
- data['imagePath'])
|
|
|
- with open(imagePath, 'rb') as f:
|
|
|
- imageData = f.read()
|
|
|
- lineColor = data['lineColor']
|
|
|
- fillColor = data['fillColor']
|
|
|
- shapes = (
|
|
|
- (s['label'], s['points'], s['line_color'], s['fill_color'])
|
|
|
- for s in data['shapes']
|
|
|
- )
|
|
|
- # Only replace data after everything is loaded.
|
|
|
- self.shapes = shapes
|
|
|
- self.imagePath = data['imagePath']
|
|
|
- self.imageData = imageData
|
|
|
- self.lineColor = lineColor
|
|
|
- self.fillColor = fillColor
|
|
|
- self.filename = filename
|
|
|
+ if data['imageData'] is not None:
|
|
|
+ imageData = base64.b64decode(data['imageData'])
|
|
|
+ else:
|
|
|
+ # relative path from label file to relative path from cwd
|
|
|
+ imagePath = os.path.join(os.path.dirname(filename),
|
|
|
+ data['imagePath'])
|
|
|
+ with open(imagePath, 'rb') as f:
|
|
|
+ imageData = f.read()
|
|
|
+ imagePath = data['imagePath']
|
|
|
+ lineColor = data['lineColor']
|
|
|
+ fillColor = data['fillColor']
|
|
|
+ shapes = (
|
|
|
+ (s['label'], s['points'], s['line_color'], s['fill_color'])
|
|
|
+ for s in data['shapes']
|
|
|
+ )
|
|
|
except Exception as e:
|
|
|
raise LabelFileError(e)
|
|
|
|
|
|
+ otherData = {}
|
|
|
+ for key, value in data.items():
|
|
|
+ if key not in keys:
|
|
|
+ otherData[key] = value
|
|
|
+
|
|
|
+ # Only replace data after everything is loaded.
|
|
|
+ self.shapes = shapes
|
|
|
+ self.imagePath = imagePath
|
|
|
+ self.imageData = imageData
|
|
|
+ self.lineColor = lineColor
|
|
|
+ self.fillColor = fillColor
|
|
|
+ self.filename = filename
|
|
|
+ self.otherData = otherData
|
|
|
+
|
|
|
def save(self, filename, shapes, imagePath, imageData=None,
|
|
|
- lineColor=None, fillColor=None):
|
|
|
+ lineColor=None, fillColor=None, otherData=None):
|
|
|
if imageData is not None:
|
|
|
imageData = base64.b64encode(imageData).decode('utf-8')
|
|
|
+ if otherData is None:
|
|
|
+ otherData = {}
|
|
|
data = dict(
|
|
|
shapes=shapes,
|
|
|
lineColor=lineColor,
|
|
@@ -62,6 +73,8 @@ class LabelFile(object):
|
|
|
imagePath=imagePath,
|
|
|
imageData=imageData,
|
|
|
)
|
|
|
+ for key, value in otherData.items():
|
|
|
+ data[key] = value
|
|
|
try:
|
|
|
with open(filename, 'wb' if PY2 else 'w') as f:
|
|
|
json.dump(data, f, ensure_ascii=True, indent=2)
|