Skip to content

Commit

Permalink
Rename labelme_json_to_dataset -> labelme_export_json
Browse files Browse the repository at this point in the history
  • Loading branch information
wkentaro committed Aug 6, 2023
1 parent bd2cafd commit 5022765
Show file tree
Hide file tree
Showing 4 changed files with 79 additions and 5 deletions.
2 changes: 1 addition & 1 deletion labelme/cli/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

from . import draw_json
from . import draw_label_png
from . import json_to_dataset
from . import export_json
from . import on_docker
72 changes: 72 additions & 0 deletions labelme/cli/export_json.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
import argparse
import base64
import json
import os
import os.path as osp

import imgviz
import PIL.Image

from labelme.logger import logger
from labelme import utils


def main():
parser = argparse.ArgumentParser()
parser.add_argument("json_file")
parser.add_argument("-o", "--out", default=None)
args = parser.parse_args()

json_file = args.json_file

if 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.out
if not osp.exists(out_dir):
os.mkdir(out_dir)

data = json.load(open(json_file))
imageData = data.get("imageData")

if not imageData:
imagePath = os.path.join(os.path.dirname(json_file), 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 sorted(data["shapes"], key=lambda x: x["label"]):
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
lbl, _ = utils.shapes_to_label(
img.shape, data["shapes"], label_name_to_value
)

label_names = [None] * (max(label_name_to_value.values()) + 1)
for name, value in label_name_to_value.items():
label_names[value] = name

lbl_viz = imgviz.label2rgb(
lbl, imgviz.asgray(img), label_names=label_names, loc="rb"
)

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()
9 changes: 5 additions & 4 deletions labelme/cli/json_to_dataset.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,13 @@

def main():
logger.warning(
"This script is aimed to demonstrate how to convert the "
"JSON file to a single image dataset."
"DEPRECATED: This script will be removed in the near future. "
"Please use `labelme_export_json` instead."
)
logger.warning(
"It won't handle multiple JSON files to generate a "
"real-use dataset."
"NOTE: This script is aimed to demonstrate how to convert a JSON file "
"to a single image dataset. so it won't handle multiple JSON files to "
"generate a real-use dataset."
)

parser = argparse.ArgumentParser()
Expand Down
1 change: 1 addition & 0 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ def main():
"labelme_draw_json=labelme.cli.draw_json:main",
"labelme_draw_label_png=labelme.cli.draw_label_png:main",
"labelme_json_to_dataset=labelme.cli.json_to_dataset:main",
"labelme_export_json=labelme.cli.export_json:main",
"labelme_on_docker=labelme.cli.on_docker:main",
],
},
Expand Down

0 comments on commit 5022765

Please sign in to comment.