文章目錄
- labelme標簽批量轉換數據集json_to_dataset
- 轉換原理
- 單張圖片轉換
- 多張圖片批量轉換
- bat腳本循環法
- 標注圖片提取
- 標注圖片轉單通道
labelme標簽批量轉換數據集json_to_dataset
轉自labelme批量制作數據集教程。
轉換原理
在安裝了labelme的虛擬環境中有一個labelme_json_to_dataset.exe
文件可以將json文件轉成png文件【分割掩碼(mask)】,但這個過程一次只能轉換一個文件,因此這里提出批量轉換的方法。(labelme_json_to_dataset.exe
文件的所在目錄是conda\envs\labelme\Scripts\labelme_json_to_dataset.exe
)。
單張圖片轉換
json文件需要轉換成png文件【分割掩碼(mask)】,基本轉換方法是在安裝了labelme的環境下,輸入下面的代碼:
labelme_json_to_dataset E:\test\image\001.json
在001.json所在文件夾內,會生成一個001_json的文件夾,里面有5個文件,其中的label.png為所要的分割掩膜,label_viz.png是通道融合圖,新版本的labelme沒有.yaml文件(因此新版本的labelme中僅會生成4個文件)。
分割掩膜示意圖:
多張圖片批量轉換
但是當數據文件很多時,需要批量處理的方法。這種方法需要原始圖片與對應的json文件在同一個文件夾下。
bat腳本循環法
@echo off
for %%i in (*.json) do labelme_json_to_dataset %%i
pause
新建一個txt文件,把這個復制進去,然后改名為test.bat,和要轉換的文件放在一起。然后在激活相應環境下,進入所在文件目錄,命令行輸入test.bat就可以了。
標注圖片提取
生成的label圖片均在文件中,且圖片名均是label.png,所以需要批量提取label.png,其他4個文件沒有用,代碼如下
# 將標簽圖從json文件中批量取出
import os
import shutilpath = r'D:\postgraduate\test' # 生成的*_json文件夾路徑
dirpath = r'D:\postgraduate\test\output' # 分割掩碼放置的目標文件夾路徑# 確保目標目錄存在
os.makedirs(dirpath, exist_ok=True)for eachfile in os.listdir(path):if os.path.isdir(os.path.join(path, eachfile)):source_file = os.path.join(path, eachfile, 'label.png')destination_file = os.path.join(dirpath, eachfile.split('_')[0] + '.png')if os.path.exists(source_file):try:shutil.copy(source_file, destination_file)print(eachfile + ' successfully moved')except Exception as e:print(f'Error moving {eachfile}: {e}')
使用時,只需將path和dirpath修改為你自己的路徑即可。
標注圖片轉單通道
關于圖片的概念見單通道、三通道、灰度圖、黑白圖、三通道轉灰度圖(單通道)。
圖片的轉換隨便搜索就有。