Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用anaconda提示符将批量Labelme json文件转换为一组图像和标签_Python_Image Processing_Cmd - Fatal编程技术网

Python 使用anaconda提示符将批量Labelme json文件转换为一组图像和标签

Python 使用anaconda提示符将批量Labelme json文件转换为一组图像和标签,python,image-processing,cmd,Python,Image Processing,Cmd,我有一个图像掩码的数据集,由Labelme工具生成为JSON文件,在Github教程()中显示,要将JSON文件更改为图像文件,我们使用以下命令行代码 labelme_json_to_dataset apc2016_obj3.json -o apc2016_obj3_json 然而,这一次只对一个文件有效,所以我一直在试图找到一种方法来使用一组代码处理所有文件,我尝试了以下代码 setlocal set "yourDir=C:\Users\Acer\Desktop\datasets\combi

我有一个图像掩码的数据集,由Labelme工具生成为JSON文件,在Github教程()中显示,要将JSON文件更改为图像文件,我们使用以下命令行代码

labelme_json_to_dataset apc2016_obj3.json -o apc2016_obj3_json
然而,这一次只对一个文件有效,所以我一直在试图找到一种方法来使用一组代码处理所有文件,我尝试了以下代码

setlocal
set "yourDir=C:\Users\Acer\Desktop\datasets\combined masks\"
set "yourExt=*.json"
pushd %yourDir%
for %%a in (*%yourExt%)do labelme_json_to_dataset %%a -o %%a
popd
endlocal
代码现在可以通过读取文件名并添加文件扩展名.json来工作,但是,将文件保存到包含.json扩展名的同名目录会导致以下错误

Traceback (most recent call last):
  File "c:\users\acer\.conda\envs\labelme\lib\runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "c:\users\acer\.conda\envs\labelme\lib\runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "C:\Users\ACER\.conda\envs\labelme\Scripts\labelme_json_to_dataset.exe\__main__.py", line 7, in <module>
  File "c:\users\acer\.conda\envs\labelme\lib\site-packages\labelme\cli\json_to_dataset.py", line 65, in main
    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
  File "c:\users\acer\.conda\envs\labelme\lib\site-packages\PIL\Image.py", line 2131, in save
    fp = builtins.open(filename, "w+b")
FileNotFoundError: [Errno 2] No such file or directory: '000828.json\\img.png'

使用命令
FOR/?
阅读帮助输出最后一页上的
替换变量引用的内容。要仅获取文件基名,可以使用
%%~na
。在不关闭回声的情况下运行此命令,以便可以看到每个命令

setlocal
set "yourDir=C:\Users\Acer\Desktop\datasets\combined masks\"
set "yourExt=*.json"
pushd %yourDir%
for %%a in (*%yourExt%) do (labelme_json_to_dataset %%a -o %%~na)
popd
endlocal

每个
file.json
和每个空白文件夹(之前为保存数据集准备的)都在同一个文件夹中(使用此代码的当前目录)。

代码“不起作用”是以什么方式出现的?如果有错误消息,请将其复制并以文本形式粘贴到问题中。请注释掉或删除
@echo off
,以查看发生了什么。顺便说一句,代码设置变量
youDir
,然后使用另一个变量
yourDir
。谢谢你,我没有注意到这个错误。看起来你正在进步。我不知道
labelme\u json\u to\u dataset
程序。您似乎正在为输入和输出指定相同的文件名(%%a)。使用实际文件名成功运行
labelme\u json\u to\u dataset
会是什么样子?请将其作为文本粘贴到问题中。我已经取得了很多进展,尽管我仍然不知道如何在没有.json扩展名的情况下获取文件名,但我将上传一个成功运行上述单个文件的示例,以帮助说明如果这是解决方案,它应该如何工作,请选中复选标记,以表明它是问题的答案。这将让其他人知道这是答案。这就是它的工作原理。你能解释一下你的解决方案将如何解决这个问题吗?请考虑
setlocal
set "yourDir=C:\Users\Acer\Desktop\datasets\combined masks\"
set "yourExt=*.json"
pushd %yourDir%
for %%a in (*%yourExt%) do (labelme_json_to_dataset %%a -o %%~na)
popd
endlocal
import labelme
import os, sys
path="path/to/directory"
dirs = os.listdir(path)
i=0
for item in dirs:
   if item.endswith(".json"):
      if os.path.isfile(path+item):
         my_dest ="fin" + str(i)
         os.system("mkdir "+my_dest)
         os.system("labelme_json_to_dataset "+item+" -o "+my_dest)
         i=i+1
for /l %n in (2,1,50) do 
    (labelme_json_to_dataset images%n.json -o images%n)