来自labelme工具的JSON文件中的imageData是什么?

时间:2019-07-12 10:06:35

标签: data-annotations

我正在尝试将 VIA(VGG图像注释器)JSON文件转换为 Labelme JSON文件,但是唯一的问题是Labelme中的imageData属性。没有imageData,我无法将JSON文件上传到Labelme工具。是否有人知道如何获取imageData或对解决此问题有用的任何东西。

3 个答案:

答案 0 :(得分:0)

这称为图像的base64类型,您可以通过以下代码将图像转换为base64数据:

  public class FooItem {
    public FooItem(string id, double value1, string value2) {
      if (null == id)
        throw new ArgumentNullException(nameof(id)); 

      Id = id;
      Value1 = value1;
      Value2 = value2;
    } 

    public string Id { get; } 

    public double Value1 { get; }
    public string Value2 { get; }
  } 

答案 1 :(得分:0)

您只是没有足够的幸运在Google :)中找到它。这些功能可以在LabelMe's sources中找到:

def img_b64_to_arr(img_b64):
    f = io.BytesIO()
    f.write(base64.b64decode(img_b64))
    img_arr = np.array(PIL.Image.open(f))
    return img_arr

def img_arr_to_b64(img_arr):
    img_pil = PIL.Image.fromarray(img_arr)
    f = io.BytesIO()
    img_pil.save(f, format='PNG')
    img_bin = f.getvalue()
    if hasattr(base64, 'encodebytes'):
        img_b64 = base64.encodebytes(img_bin)
    else:
        img_b64 = base64.encodestring(img_bin)
    return img_b64

如果hasattr(base64,'encodebytes'):...我遇到了问题,它产生了多余的\ n和b'',所以我将第二个重写为

import codecs

def encodeImageForJson(image):
    img_pil = PIL.Image.fromarray(image, mode='RGB')
    f = io.BytesIO()
    img_pil.save(f, format='PNG')
    data = f.getvalue()
    encData = codecs.encode(data, 'base64').decode()
    encData = encData.replace('\n', '')
    return encData

答案 2 :(得分:0)

首先,您应该安装labelme,然后尝试以下操作:

data = labelme.LabelFile.load_image_file(img_path)
image_data = base64.b64encode(data).decode('utf-8')

输出与手动输出的JSON文件相同。