当前位置: 首页 > article >正文

告别手动!用Python脚本一键批量转换Labelme标注的JSON文件(附完整代码)

告别手动用Python脚本一键批量转换Labelme标注的JSON文件附完整代码在计算机视觉项目中数据标注是模型训练前的关键步骤。Labelme作为一款流行的图像标注工具生成的JSON文件需要转换为模型可直接读取的图像和掩码格式。当面对数百个标注文件时手动操作不仅效率低下还容易出错。本文将带你开发一个开箱即用的批量转换工具解决实际工程中的痛点问题。1. 理解Labelme标注文件的结构Labelme生成的JSON文件包含以下核心信息{ version: 4.5.6, flags: {}, shapes: [ { label: cat, points: [[100, 120], [150, 180]], shape_type: polygon } ], imagePath: example.jpg, imageData: base64编码的图像数据 }关键字段说明shapes包含所有标注对象的标签和坐标信息imageDataBase64编码的原始图像数据imagePath原始图像相对路径提示当imageData字段为空时脚本会自动根据imagePath加载原图2. 环境配置与依赖管理2.1 创建专用Python环境推荐使用conda创建独立环境conda create -n labelme_converter python3.8 conda activate labelme_converter2.2 安装指定版本依赖版本兼容性至关重要特别是labelme和Pillow的版本包名称推荐版本作用labelme3.16.2核心标注工具Pillow8.3.1图像处理numpy1.21.2数组运算pyyaml5.4.1配置文件生成安装命令pip install labelme3.16.2 Pillow8.3.1 numpy1.21.2 pyyaml5.4.13. 开发批量转换脚本3.1 脚本核心功能设计完整脚本应包含以下功能模块批量文件处理自动遍历目录下所有JSON文件数据解析提取标注信息和图像数据格式转换生成图像、掩码和可视化标注结果组织按标准结构保存输出文件3.2 完整实现代码创建batch_json_to_dataset.py文件import argparse import json import os import os.path as osp import warnings import base64 import numpy as np from PIL import Image import yaml from labelme import utils def process_single_json(json_path, output_dir): 处理单个JSON文件 with open(json_path) as f: data json.load(f) # 解析图像数据 if data[imageData]: img utils.img_b64_to_arr(data[imageData]) else: img_path osp.join(osp.dirname(json_path), data[imagePath]) img np.array(Image.open(img_path)) # 创建标签映射 label_name_to_value {_background_: 0} for shape in data[shapes]: if shape[label] not in label_name_to_value: label_name_to_value[shape[label]] len(label_name_to_value) # 生成标签图像 lbl utils.shapes_to_label( img.shape, data[shapes], label_name_to_value) # 准备输出目录 base_name osp.splitext(osp.basename(json_path))[0] os.makedirs(output_dir, exist_okTrue) # 保存各种输出 Image.fromarray(img).save(osp.join(output_dir, f{base_name}_img.png)) utils.lblsave(osp.join(output_dir, f{base_name}_label.png), lbl) # 保存标签名称 with open(osp.join(output_dir, label_names.txt), w) as f: f.write(\n.join(label_name_to_value.keys())) def batch_process(json_dir, output_root): 批量处理目录下的所有JSON文件 json_files [f for f in os.listdir(json_dir) if f.endswith(.json)] for json_file in json_files: json_path osp.join(json_dir, json_file) output_dir osp.join(output_root, osp.splitext(json_file)[0]) print(fProcessing {json_file}...) process_single_json(json_path, output_dir) if __name__ __main__: parser argparse.ArgumentParser() parser.add_argument(json_dir, help包含JSON文件的目录) parser.add_argument(-o, --output, defaultoutput, help输出目录) args parser.parse_args() os.makedirs(args.output, exist_okTrue) batch_process(args.json_dir, args.output)4. 实战应用与问题排查4.1 典型使用场景假设标注文件存放在~/data/annotations运行命令python batch_json_to_dataset.py ~/data/annotations -o ~/data/dataset生成的文件结构如下dataset/ ├── image1/ │ ├── image1_img.png │ ├── image1_label.png │ └── label_names.txt ├── image2/ │ ├── image2_img.png │ ├── image2_label.png │ └── label_names.txt4.2 常见问题解决方案问题1AttributeError: module labelme.utils has no attribute draw_label解决方法pip uninstall labelme pip install labelme3.16.2问题2生成的掩码图像全黑检查步骤确认标注时是否设置了非背景标签检查JSON文件中shapes数组是否非空验证label_name_to_value字典是否正确生成问题3内存不足处理大图优化方案# 在process_single_json函数中添加 del img # 及时释放内存 del lbl5. 高级功能扩展5.1 支持多类别语义分割修改标签生成逻辑为不同类别分配固定IDCLASS_MAPPING { person: 1, car: 2, road: 3 } def shapes_to_label_custom(shape, img_shape, class_mapping): lbl np.zeros(img_shape[:2], dtypenp.uint8) for shape in shapes: label class_mapping.get(shape[label], 0) utils.draw_shape(lbl, shape, label) return lbl5.2 添加进度显示使用tqdm显示处理进度from tqdm import tqdm def batch_process(json_dir, output_root): json_files [f for f in os.listdir(json_dir) if f.endswith(.json)] for json_file in tqdm(json_files, descProcessing): json_path osp.join(json_dir, json_file) output_dir osp.join(output_root, osp.splitext(json_file)[0]) process_single_json(json_path, output_dir)5.3 并行处理加速利用多进程提高处理速度from multiprocessing import Pool def parallel_process(json_dir, output_root, workers4): json_files [f for f in os.listdir(json_dir) if f.endswith(.json)] with Pool(workers) as p: args [(osp.join(json_dir, f), osp.join(output_root, osp.splitext(f)[0])) for f in json_files] p.starmap(process_single_json, args)在实际项目中这个脚本帮助我将标注数据处理时间从8小时缩短到15分钟。特别是在处理2000张街景图像时稳定的批量处理能力显著提升了项目迭代速度。

相关文章:

告别手动!用Python脚本一键批量转换Labelme标注的JSON文件(附完整代码)

告别手动!用Python脚本一键批量转换Labelme标注的JSON文件(附完整代码) 在计算机视觉项目中,数据标注是模型训练前的关键步骤。Labelme作为一款流行的图像标注工具,生成的JSON文件需要转换为模型可直接读取的图像和掩码…...

智驾端到端模型Flow Matching与Diffusion选型及机器人场景差异解析

文章目录一、核心问题开篇:智驾端到端模型为何极少用Flow Matching?1.1 Flow Matching核心原理与智驾适配痛点(1)车载实时性与算力硬约束(核心痛点)(2)安全硬约束难以嵌入&#xff0…...

Qt文件操作实战:QFile读写本地文件的5种常见场景与代码示例

Qt文件操作实战:QFile读写本地文件的5种常见场景与代码示例 在跨平台应用开发中,文件操作是每个开发者必须掌握的基础技能。Qt框架通过QFile类提供了一套简洁而强大的API,让开发者能够轻松处理各种文件读写需求。本文将深入探讨五种实际开发中…...

相平面法 “质心侧偏角-质心侧偏角速度” 可自主调节参数根据不同的速度和车轮转角以及前后轮的滑...

相平面法 “质心侧偏角-质心侧偏角速度” 可自主调节参数根据不同的速度和车轮转角以及前后轮的滑移率等变量生成相平面图,更加有利于状态分析 包含m文件以及资料,非常详细,通俗易懂功能概述 本文介绍了一套基于MATLAB的车辆动力学相平面分析…...

你当过不懂珍惜的爱人,才学会如何郑重地对待爱意;你当过卑微讨好的讨好者,才明白边界感是自我保护的铠甲;

人真正的成长,是接纳自己演过的所有烂角色 目录 人真正的成长,是接纳自己演过的所有烂角色 先打破两个困住绝大多数人的成长误区 误区1:成长是活成无懈可击的完美模板 误区2:要放下过去,才能往前走 4个可落地的步骤,把所有过往,都变成前行的底气 第一步:给你的角色“卸…...

避坑指南:uni-app视频播放器开发中那些没人告诉你的权限陷阱

深度解析uni-app视频播放器开发中的安卓权限管理陷阱 在uni-app跨平台开发中,视频播放器类应用往往面临一个容易被忽视的挑战——安卓系统的权限管理机制。许多开发团队在应用发布前夕才突然遭遇审核驳回或用户投诉,根源就在于对权限请求时机和方式的处理…...

2026企业微信一客一群新玩法

目前要实现一客一群,主流实现的主要是以下方法:1:先添加客户,然后通过建群模板快速拉出一个群。2:提前创建群,然后放在活码内轮流。这两个方法实际上都是比较复杂的,但是也确实是目前可行的方法…...

Pulsar Manager保姆级Docker部署指南:从拉取镜像到多环境配置

Pulsar Manager全栈部署与实战指南:从Docker到多集群监控 为什么选择Pulsar Manager? 在分布式消息系统的世界里,可视化监控工具如同黑夜中的灯塔。Pulsar Manager作为Apache Pulsar官方推出的管理平台,解决了运维人员面临的三大核…...

MXNet vs TensorFlow:自动求导背后的计算图机制详解(附代码对比)

MXNet与TensorFlow计算图机制深度解析:从自动求导看框架设计哲学 在深度学习框架的演进历程中,自动求导(Automatic Differentiation)始终是核心能力之一。作为现代深度学习框架的两大代表,MXNet和TensorFlow虽然都实现了自动求导功能&#xf…...

深入浅出:YOLOv8的Bottleneck模块如何提升特征提取效率

深入浅出:YOLOv8的Bottleneck模块如何提升特征提取效率 在计算机视觉领域,目标检测一直是核心挑战之一。YOLO(You Only Look Once)系列算法以其高效的检测速度著称,而YOLOv8作为该系列的最新成员,在精度和速度上都实现了显著提升。…...

Z-Image-Turbo-辉夜巫女角色一致性生成:多角度角色设定图效果展示

Z-Image-Turbo-辉夜巫女角色一致性生成:多角度角色设定图效果展示 最近在尝试用AI做角色设计,最头疼的就是角色一致性。今天想画个正面,明天想画个侧面,结果生成的角色看起来像两个人,衣服细节也对不上,简…...

[架构解析](稀疏神经网络加速)Eyeriss v2的NoC设计与CSC编码机制剖析

1. Eyeriss v2的架构革新与稀疏计算挑战 当我们在手机上使用人脸解锁功能时,可能不会想到这背后需要执行数十亿次神经网络计算。Eyeriss v2正是为解决这个矛盾而生——如何在指甲盖大小的芯片上高效处理复杂的神经网络运算。作为MIT团队在2019年推出的第二代神经网络…...

如何快速搭建Kronos金融预测可视化系统:5步完整指南

如何快速搭建Kronos金融预测可视化系统:5步完整指南 【免费下载链接】Kronos Kronos: A Foundation Model for the Language of Financial Markets 项目地址: https://gitcode.com/GitHub_Trending/kronos14/Kronos 还在为复杂的金融预测结果展示而烦恼吗&am…...

TensorFlow-v2.15镜像效果展示:亲手训练的模型识别准确率超95%

TensorFlow-v2.15镜像效果展示:亲手训练的模型识别准确率超95% 如果你对深度学习的印象还停留在“理论复杂、环境难配、效果玄学”的阶段,那么今天这篇文章可能会改变你的看法。我最近用CSDN星图镜像广场的TensorFlow-v2.15镜像,从零开始训练…...

汉中市中心城区总体城市设计(公示稿)2026

2026 年 3 月汉中市自然资源局发布《汉中市中心城区总体城市设计(公示稿)》并开启 30 天公示,该规划紧扣中央城市工作会议精神与 “生态城市” 战略,立足汉中秦巴山水本底和汉源文化底蕴,以打造陕甘川渝毗邻区域现代化…...

给后端同学的前端页面结构指南:一个网页到底是怎么拼出来的

你写过 API,搞过数据库,部署过服务。但现在老板说"你顺便把产品首页也做了吧",或者你想给自己的开源项目搭个展示页面,打开编辑器,发现无从下手。不是你不会写代码,而是你不知道一个网页应该长什…...

高效掌握百度网盘命令行工具:终端文件管理全面指南

高效掌握百度网盘命令行工具:终端文件管理全面指南 【免费下载链接】BaiduPCS BaiduPCS - 一个用 C/C 编写的百度网盘命令行工具,支持多线程下载、断点续传、快速上传等功能。 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduPCS 百度网盘命令…...

systemd看门狗机制应用示例

systemd看门狗机制应用示例 systemd看门狗(watchdog)是一种监控服务健康状态的机制,当服务卡死或崩溃时,systemd会自动重启该服务。下面我提供一个完整的示例,包含服务程序、配置文件和监控脚本。 一、示例程序架构 wa…...

三菱 Q2AS 借助以太网通讯处理器读写炉况监测仪数据的编程方法

一、项目背景某 300MW 燃煤火力发电厂,为区域主力供电热源厂,锅炉燃烧系统的炉况监测是电厂节能降耗、安全运行的关键。2025 年三季度电厂开展锅炉燃烧优化改造,要求炉况监测仪实时采集炉膛温度、烟气含氧量、炉内压力、煤粉浓度等核心数据&a…...

解决小米路由器4A刷OpenWRT后的网络冲突问题:二级路由器设置指南

小米路由器4A刷OpenWRT后的网络优化实战:从冲突解决到高效配置 家里那台闲置的小米路由器4A千兆版,刷了OpenWRT系统后突然变得"不听话"了?明明按照教程一步步操作,最后却连不上网。这种经历我太熟悉了——去年帮朋友调试…...

Vue2项目实战:5分钟搞定天地图API集成(附完整代码)

Vue2与天地图API高效集成实战指南 在当今数字化浪潮中,地图功能已成为众多Web应用的标配需求。对于使用Vue2框架的开发者而言,如何快速、高效地集成专业地图服务成为一项必备技能。天地图作为国内领先的地图服务平台,凭借其稳定的服务和丰富的…...

遗传算法实战:TSP问题的高效路径优化与可视化分析

1. 遗传算法与TSP问题的奇妙碰撞 第一次听说遗传算法能解决旅行商问题(TSP)时,我的反应和大多数人一样:"这玩意儿真能行?"直到亲手实现了整个流程,看着屏幕上那条不断优化的路径,才真…...

3分钟搞懂Abseil哈希容器:FlatHash与NodeHash性能对决指南

3分钟搞懂Abseil哈希容器:FlatHash与NodeHash性能对决指南 【免费下载链接】abseil-cpp Abseil Common Libraries (C) 项目地址: https://gitcode.com/GitHub_Trending/ab/abseil-cpp 还在为C哈希容器选择而头疼吗?为什么别人的代码总是比你快30%…...

终极系统加速指南:AtlasOS四大驱动优化工具完全解析

终极系统加速指南:AtlasOS四大驱动优化工具完全解析 【免费下载链接】Atlas 🚀 An open and lightweight modification to Windows, designed to optimize performance, privacy and security. 项目地址: https://gitcode.com/GitHub_Trending/atlas1/…...

避坑指南:当Harbor遇到Nginx代理时,为什么你的Docker Push总失败?

深度解析:Harbor与Nginx代理集成中的HTTPS推送故障排查实战 当你兴冲冲地准备将精心构建的Docker镜像推送到企业私有仓库时,终端却无情地抛出一串红色错误——这种挫败感,相信不少开发者都深有体会。特别是在Harbor前面加了Nginx代理层后&…...

LiuJuan Z-Image效果展示:自定义权重生成惊艳人像作品集

LiuJuan Z-Image效果展示:自定义权重生成惊艳人像作品集 你是否曾经被AI生成的人像作品所震撼?今天我们将展示LiuJuan Z-Image Generator这一专业级图片生成工具的实际效果。这款基于阿里云通义Z-Image扩散模型深度优化的工具,通过LiuJuan自…...

PROJECT MOGFACE面试题库:动态生成与解析Java面试题,构建自适应学习系统

PROJECT MOGFACE面试题库:动态生成与解析Java面试题,构建自适应学习系统 最近跟几个做Java开发的朋友聊天,发现大家都有个共同的烦恼:准备面试的时候,面对海量的面试题,不知道从哪开始,也不知道…...

三步打造专业简历:Magic Resume 全场景使用指南

三步打造专业简历:Magic Resume 全场景使用指南 【免费下载链接】magic-resume free online AI resume editor 项目地址: https://gitcode.com/GitHub_Trending/ma/magic-resume 项目定位:重新定义简历创作体验 「Magic Resume」是一款基于「Nex…...

Windows智能自动化:重新定义Windows效率的AI系统控制方案

Windows智能自动化:重新定义Windows效率的AI系统控制方案 【免费下载链接】Windows-MCP Lightweight MCP Server for automating Windows OS in the easy way. 项目地址: https://gitcode.com/gh_mirrors/wi/Windows-MCP 在数字化办公的浪潮中,Wi…...

API认证机制选型指南与安全实践

API认证机制选型指南与安全实践 【免费下载链接】public-api-lists A collective list of free APIs for use in software and web development 🚀 (Clone of https://github.com/public-apis/public-apis) 项目地址: https://gitcode.com/GitHub_Trending/pu/pub…...