labelme标注图片,并生成dataset数据集方案【本地测试成功】

1.环境:win10+annaconda+labelme==3.16.2python3.x

2.替换json_to_dataset.py文件,新内容如下:

  1. import argparse
  2. import json
  3. import os
  4. import os.path as osp
  5. import warnings
  6. import PIL.Image
  7. import yaml
  8. from labelme import utils
  9. import base64
  10. def main():
  11.     warnings.warn("This script is aimed to demonstrate how to convert the\n"
  12.                   "JSON file to a single image dataset, and not to handle\n"
  13.                   "multiple JSON files to generate a real-use dataset.")
  14.     parser = argparse.ArgumentParser()
  15.     parser.add_argument('json_file')
  16.     parser.add_argument('-o', '--out', default=None)
  17.     args = parser.parse_args()
  18.     json_file = args.json_file
  19.     if args.out is None:
  20.         out_dir = osp.basename(json_file).replace('.', '_')
  21.         out_dir = osp.join(osp.dirname(json_file), out_dir)
  22.     else:
  23.         out_dir = args.out
  24.     if not osp.exists(out_dir):
  25.         os.mkdir(out_dir)
  26.     count = os.listdir(json_file)
  27.     for i in range(0, len(count)):
  28.         path = os.path.join(json_file, count[i])
  29.         if os.path.isfile(path):
  30.             data = json.load(open(path))
  31.             
  32.             if data['imageData']:
  33.                 imageData = data['imageData']
  34.             else:
  35.                 imagePath = os.path.join(os.path.dirname(path), data['imagePath'])
  36.                 with open(imagePath, 'rb') as f:
  37.                     imageData = f.read()
  38.                     imageData = base64.b64encode(imageData).decode('utf-8')
  39.             img = utils.img_b64_to_arr(imageData)
  40.             label_name_to_value = {'_background_': 0}
  41.             for shape in data['shapes']:
  42.                 label_name = shape['label']
  43.                 if label_name in label_name_to_value:
  44.                     label_value = label_name_to_value[label_name]
  45.                 else:
  46.                     label_value = len(label_name_to_value)
  47.                     label_name_to_value[label_name] = label_value
  48.             
  49.             # label_values must be dense
  50.             label_values, label_names = [], []
  51.             for ln, lv in sorted(label_name_to_value.items(), key=lambda x: x[1]):
  52.                 label_values.append(lv)
  53.                 label_names.append(ln)
  54.             assert label_values == list(range(len(label_values)))
  55.             
  56.             lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)
  57.             
  58.             captions = ['{}: {}'.format(lv, ln)
  59.                 for ln, lv in label_name_to_value.items()]
  60.             lbl_viz = utils.draw_label(lbl, img, captions)
  61.             
  62.             out_dir = osp.basename(count[i]).replace('.', '_')
  63.             out_dir = osp.join(osp.dirname(count[i]), out_dir)
  64.             if not osp.exists(out_dir):
  65.                 os.mkdir(out_dir)
  66.             PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
  67.             #PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
  68.             utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
  69.             PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
  70.             with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
  71.                 for lbl_name in label_names:
  72.                     f.write(lbl_name + '\n')
  73.             warnings.warn('info.yaml is being replaced by label_names.txt')
  74.             info = dict(label_names=label_names)
  75.             with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
  76.                 yaml.safe_dump(info, f, default_flow_style=False)
  77.             print('Saved to: %s' % out_dir)
  78. if __name__ == '__main__':
  79.     main()

3.Labelme标注生成的JSON文件统一放在一个新的文件夹里面,不能有其它格式的文件

 

4. 然后在pycharm里面新建一个py脚本文件,注意命名一定不能是json.py,随便取一个其它名字,最后运行该文件,即可生成数据集。

5.也可以使用命令生成数据集

6.参考资料:

(1)实现labelme批量json_to_dataset方法

https://blog.csdn.net/yql_617540298/article/details/81110685 

(2)初次使用labelme遇到的坑labelme_json_to_dataset 文件json只生成4个文件缺少生成infoyaml文件

https://www.pythonheidong.com/blog/article/401177/70aa441c62f6b74e4538/ 

(3)labelme 转换json为dataset,无需修改py文件

https://www.jianshu.com/p/9c803e83cbfe 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值