labelme:缺少生成"info.yaml"文件

labelme执行"labelme_json_to_dataset <文件名>.json"操作后,缺少生成info.yaml文件(已解决)

最近起步图像识别,打算构建需要的图形数据集,pip安装labelme==4.2.9版本,利用anaconda+Pycharm编写代码,生成Python==3.6的环境,具体安装方法请参考(不得不说这篇博客真的挺好—GitHub上官方说明的中文版)
数据标注软件labelme详解
在使用labelme进行图形分割时,打算先用简单的圆形进行测试,按照步骤操作
图像数据标注工具labelme使用教程
发现–执行"labelme_json_to_dataset <文件名>.json"操作后,缺少生成info.yaml文件
labelme:缺少生成
在网上都没有搜到合适的回答,以为是操作或者labelme版本问题,就不断的卸载重装,结果在运行时各种报错(可能是本人技术过于辣鸡),终于下载了一个版本不报错了,依然生成不了info.yaml文件,所以一怒之下又将anaconda上的python重新安装了4.2.9版的labelme。
由于anaconda可以安装不同的python环境,加上之前桌面就已经下载好了独立的python,就在Pycharm上在另一个python环境上安装3.20.0版的labelme(虽然种种报错)打算找找区别,这样就同时拥有了两个版本labelme库文件
在搜索报错问题时发现了一篇文章(虽然没用上)让我找到了一丝希望
https://blog.csdn.net/qq_18649781/article/details/104179139
发现可以更改库的内部文件,找到相应文件"json_to_dataset.py"路径如下

anaconda下的路径:
E:\Users*计算机*\Anaconda3\envs\py36_labelme\Lib\site-packages\labelme\cli
python下的路径:
E:\Users*计算机*\AppData\Local\Programs\Python\Python36\Lib\site-packages\labelme\cli
注:
计算机”为你的计算机名 当然路径也可能在C盘 根据安装而定
直接在文件夹内搜索"json_to_dataset.py"也可以找到

同时打开3.20.04.2.9labelmejson_to_dataset.py文件,经过对比发现4.2.9版本的最后并没有生成info.yaml的声明,但是在3.20.0里有,内容如下

# 4.2.9版labelme
    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

    with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
        for lbl_name in label_names:
            f.write(lbl_name + '\n')
            
    logger.info('Saved to: {}'.format(out_dir))

if __name__ == '__main__':
    main()
# 3.20.0版labelme
    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

    with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
        for lbl_name in label_names:
            f.write(lbl_name + '\n')
	# 缺少的部分
    logger.warning('info.yaml is being replaced by label_names.txt')
    info = dict(label_names=label_names)
    with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
        yaml.safe_dump(info, f, default_flow_style=False)

    logger.info('Saved to: {}'.format(out_dir))

if __name__ == '__main__':
    main()

由于代码将近80行,这里仅展示生成文件的部分,可以明显发现4.2.9版比3.20.0版少了生成info.yaml的部分,这时就需要投机取巧,把3.20.0版里生成yaml的部分复制到4.2.9中(别忘了开头引入yaml

# 开头引入
    import yaml
# 后部分加上生成".yaml"文件的部分  一定注意位置
    logger.warning('info.yaml is being replaced by label_names.txt')
    info = dict(label_names=label_names)
    with open(osp.join(out_dir, 'info.yaml'), 'w') as f:
        yaml.safe_dump(info, f, default_flow_style=False)

将上面的代码粘贴之后保存,即可解决问题,终端输入

labelme_json_to_dataset <文件名>.json

可以发现4.2.9版本的labelme也可以生成info.yaml文件了
labelme:缺少生成
这种方法其实可以推广解决其他一些问题,由于我还是新手就不多说了,有问题还请各位前辈指正

你可能感兴趣的:(labelme:缺少生成"info.yaml"文件)