作者:梦里的天真575 | 来源:互联网 | 2023-02-10 16:24
Labelme安装教程(基于anaconda)1.创建anaconda虚拟环境labelmecondacreate-nlabelmepython3.
Labelme安装教程(基于anaconda) 1. 创建anaconda虚拟环境labelme conda create - n labelme python= 3.6
完成之后如图所示(由于我已经创建了labelme故这里用labelme1代替) 激活环境:
conda activate labelme
执行完这一步会发现运行环境转移到了labelme,如果没有重新创建
2. 安装labelme所需要的依赖环境 安装的时候使用pip或者conda都可以,两者之中有一个不行时尝试使用另一个,我在安装的时候也是时好时坏,有点玄学
conda install pyqt
conda install pillow
这两个库的安装可能还需要别的依赖环境,请读者自行查阅,这里不再赘述
3.安装labelme conda install labelme= 3.16 .2 #conda安装命令如果出错也可以使用pip命令,使用逻辑等号"==" pip install labelme== 3.16 .2
这一步一定要注意安装的版本号,如果直接安装labelme不标注版本号在后续json到dataset的时候会出现异常,一般来说3.16的版本都可以,至此安装过程就结束了,下面介绍labelme的使用方法。
4.使用labelme标注图片 在刚才安装好的窗口下输入labelme后便可打开labelme 界面如图 在使用过程中建议大家一打开文件(OpenDir)的方式读取图片,这样可以通过NextImage和PreImage键来查看前后的图片。打开图片之后,右键可以选择标注的工具,例如目标检测使用的矩形、heatmap使用的圆形以及关键点检测使用的点和线。 标注完之后点击save进行保存,注意:最好把标注完的json文件与原图存放在一个目录下 ,这样在后期查看的时候可以看到原图与标注区域的叠加,而不单单是原图。
5.Json To Dataset 得到json文件之后,我们要将其转化成数据集使用,这里涉及到labelme源码的更改 首先,找到labelme的json_to_dataset.py
找到anaconda的安装位置,例如我安装在D盘,然后找到下面说的具体位置:D:\Anaconda\envs\labelme\Lib\site-packages\labelme\cli ,进入之后会发现有几个python source file,打开json_to_dataset.py,将代码做如下更改:
import argparse import json import os import os. path as osp import warningsimport PIL. Image import yamlfrom labelme import utils import base64def main ( ) : warnings. warn ( "This script is aimed to demonstrate how to convert the\n" "JSON file to a single image dataset, and not to handle\n" "multiple JSON files to generate a real-use dataset." ) parser = argparse. ArgumentParser ( ) parser. add_argument ( 'json_file' ) parser. add_argument ( '-o' , '--out' , default = None) args = parser. parse_args ( ) json_file = args. json_fileif args. out is None: out_dir = osp. basename ( json_file) . replace ( '.' , '_' ) out_dir = osp. join ( osp. dirname ( json_file) , out_dir) else : out_dir = args. outif not osp. exists ( out_dir) : os. mkdir ( out_dir) count = os. listdir ( json_file) for i in range ( 0 , len ( count) ) : path = os. path. join ( json_file, count[ i] ) if os. path. isfile ( path) : data = json. load ( open ( path) ) if data[ 'imageData' ] : imageData = data[ 'imageData' ] else : imagePath = os. path. join ( os. path. dirname ( path) , data[ 'imagePath' ] ) with open ( imagePath, 'rb' ) as f: imageData = f. read ( ) imageData = base64. b64encode ( imageData) . decode ( 'utf-8' ) img = utils. img_b64_to_arr ( imageData) label_name_to_value = { '_background_' : 0 } for shape in data[ 'shapes' ] : label_name = shape[ 'label' ] if label_name in label_name_to_value: label_value = label_name_to_value[ label_name] else : label_value = len ( label_name_to_value) label_name_to_value[ label_name] = label_value# label_values must be dense label_values, label_names = [ ] , [ ] for ln, lv in sorted ( label_name_to_value. items ( ) , key= lambda x: x[ 1 ] ) : label_values. append ( lv) label_names. append ( ln) assert label_values == list ( range ( len ( label_values) ) ) lbl = utils. shapes_to_label ( img. shape, data[ 'shapes' ] , label_name_to_value) captions = [ '{}: {}' . format ( lv, ln) for ln, lv in label_name_to_value. items ( ) ] lbl_viz = utils. draw_label ( lbl, img, captions) out_dir = osp. basename ( count[ i] ) . replace ( '.' , '_' ) out_dir = osp. join ( osp. dirname ( count[ i] ) , out_dir) if not osp. exists ( out_dir) : os. mkdir ( out_dir) PIL. Image. fromarray ( img) . save ( osp. join ( out_dir, 'img.png' ) ) #PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.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' ) warnings. warn ( '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) print ( 'Saved to: %s' % out_dir) if __name__ == '__main__' : main ( )
将之前标注好的json文件单独提取出来,放在一个目录下,然后进入我们批量处理的环境中,也就是执行把jaso->dataset的目录:
D:\Anaconda\envs\labelme\Scripts 这个目录下有执行程序: . 下面就可以进行json文件批量处理了,exe程序后边是之前的json单独建立的目录
labelme_json_to_dataset. exe D: \Spyder\label_dataset
成功执行后结果如下图,其保存的地址为相对地址,就是在D:\Anaconda\envs\labelme\Scripts下 如果安装的labelme版本是3.16.2的,应该不会有问题;有异常抛出的话,大概率是版本不兼容,建议重新创建环境安装
OVER 参考: 大神源码:实现labelme批量json_to_dataset方法 哔哩哔哩小哥讲解