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

yolo检测生成的txt转换为labelme可以编辑的json

yolo检测生成的txt转换为labelme可以编辑的json以及json转txttxt转json代码如下import cv2 import os import json 该脚本实现将yolo格式标签转为json格式标签 需要的数据原始图像 原始yolo格式标签txt文件 imgs_path D:/.../images/ # 图像路径 txt_dir D:/.../labels/ # txt标签目录路径 out_json_dir D:/.../json/ # 保存的json文件路径 # 确保输出目录存在 os.makedirs(out_json_dir, exist_okTrue) # 定义YOLO标签类别映射 name_label [A, B, C] # 需要与训练时的类别顺序一致 def convert_yolo_bbox(box, img_shape): 将YOLO格式的归一化坐标转换为像素坐标 x_center, y_center, w, h box img_h, img_w img_shape[:2] x1 int((x_center - w / 2) * img_w) y1 int((y_center - h / 2) * img_h) x2 int((x_center w / 2) * img_w) y2 int((y_center h / 2) * img_h) return [x1, y1, x2, y2] def parse_yolo_txt(img_path, txt_path): 解析YOLO标签文件 img cv2.imread(img_path) if img is None: raise FileNotFoundError(f无法读取图像: {img_path}) bboxes [] if not os.path.exists(txt_path): return img, bboxes # 返回空列表表示没有目标 with open(txt_path, r) as f: for line in f.readlines(): parts line.strip().split() if len(parts) ! 5: continue # 解析YOLO格式 label_idx int(parts[0]) label name_label[label_idx] x_center float(parts[1]) y_center float(parts[2]) width float(parts[3]) height float(parts[4]) # 转换坐标 bbox convert_yolo_bbox([x_center, y_center, width, height], img.shape) bbox.append(label) bboxes.append(bbox) return img, bboxes def create_labelme_json(img_name, img_dir, txt_dir, output_dir): 创建Labelme格式的JSON标注文件 # 构建完整路径 img_path os.path.join(img_dir, img_name) txt_path os.path.join(txt_dir, img_name.replace(.jpg, .txt)) # 解析数据 try: img, gt_boxes parse_yolo_txt(img_path, txt_path) except Exception as e: print(f处理 {img_name} 时出错: {str(e)}) return # 构建基础字典 label_dict { version: 5.5.0, flags: {}, shapes: [], imagePath: img_path, imageData: None, imageHeight: img.shape[0], imageWidth: img.shape[1] } # 添加标注形状 for box in gt_boxes: shape { label: box[-1], points: [[box[0], box[1]], [box[2], box[3]]], group_id: None, description: , shape_type: rectangle, flags: {}, mask: None } label_dict[shapes].append(shape) # 写入JSON文件 output_path os.path.join(output_dir, img_name.replace(.jpg, .json)) with open(output_path, w) as f: json.dump(label_dict, f, indent2) print(f已生成: {output_path}) # 主处理循环 img_files [f for f in os.listdir(imgs_path) if f.lower().endswith(.jpg)] for idx, img_name in enumerate(img_files): if idx % 100 0: print(f处理进度: {idx}/{len(img_files)}) create_labelme_json(img_name, imgs_path, txt_dir, out_json_dir) print(转换完成)JSON转txt代码如下import json import os input_folder D:/.../json output_folder D:/.../txt os.makedirs(output_folder, exist_okTrue) # 标注类别名 label_to_id_mapping { A: 0, B: 1, C: 2, D: 3 # Add more mappings as needed } def convert_annotation(json_file, txt_file, label_to_id_mapping): # Read the JSON file with open(json_file, r, encodingutf-8) as f: data json.load(f) # Extract image dimensions, assuming imageWidth and imageHeight fields are present image_width data.get(imageWidth) image_height data.get(imageHeight) # Check if image dimensions are present if image_width is None or image_height is None: raise ValueError(fMissing image dimensions in {json_file}) # Iterate over all shapes (annotations) with open(txt_file, w, encodingutf-8) as out_file: for shape in data.get(shapes, []): # Extract point coordinates, assuming each shape has a points field points shape.get(points, []) # Check if points are present if not points: raise ValueError(fMissing points in a shape in {json_file}) x_values [point[0] for point in points] y_values [point[1] for point in points] x_min min(x_values) y_min min(y_values) x_max max(x_values) y_max max(y_values) # Calculate bounding box center, width, and height bbox_center_x (x_min x_max) / 2 bbox_center_y (y_min y_max) / 2 bbox_width x_max - x_min bbox_height y_max - y_min # Convert bounding box coordinates to ratios relative to image dimensions bbox_center_x_ratio bbox_center_x / image_width bbox_center_y_ratio bbox_center_y / image_height bbox_width_ratio bbox_width / image_width bbox_height_ratio bbox_height / image_height # Get the category ID, assuming each shape has a label field category_id shape.get(label, unknown) if isinstance(category_id, str): # If the label is a string, map it to a numeric ID using the provided mapping category_id label_to_id_mapping.get(category_id, -1) # Default to -1 if label is unknown # Write the result to the TXT file in YOLO format out_file.write( f{int(category_id)} {bbox_center_x_ratio} {bbox_center_y_ratio} {bbox_width_ratio} {bbox_height_ratio}\n) # Input and output folder paths # Iterate over all JSON files in the input folder for filename in os.listdir(input_folder): if filename.endswith(.json): json_file os.path.join(input_folder, filename) txt_file os.path.join(output_folder, filename.replace(.json, .txt)) try: convert_annotation(json_file, txt_file, label_to_id_mapping) print(f{txt_file},Conversion successful!) except Exception as e: print(fAn error occurred while processing {json_file}: {e})

相关文章:

yolo检测生成的txt转换为labelme可以编辑的json

yolo检测生成的txt转换为labelme可以编辑的json,以及json转txttxt转json代码如下import cv2 import os import json该脚本实现将yolo格式标签转为json格式标签 需要的数据:原始图像 原始yolo格式标签(txt文件) imgs_path "D…...

mdBook集成AI助手:自动化技术文档编写与优化实践

1. 项目概述:当技术文档遇上AI助手最近在折腾一个开源项目,需要写一份像样的技术文档。说实话,写文档这事儿,对很多开发者来说,可能比写代码还头疼。代码逻辑清晰,运行结果立竿见影;文档呢&…...

【INTERCONNECT】CW Laser 和 OPWM 组成的系统

【INTERCONNECT】CW Laser 和 OPWM 组成的系统 引言 正文 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created Time: 2026.05.07 \textrm{Created Time: 2026.05.07} Created Time: 2026.05.07...

【INTERCONNECT】Optical Spectrum Analyzer 组件

【INTERCONNECT】Optical Spectrum Analyzer 组件 引言 正文 General 标签页下的参数 Standard 标签页下的参数 Enhanced 标签页下的参数 Simulation 标签页下的参数 Display 标签页下的参数 Results 标签页下的参数 Author: JiJi \textrm{Author: JiJi} Author: JiJi Created…...

Chrome插件开发实战

目录 一、核心概念与基础 二、开发环境搭建 三、Content Script深度开发 四、Background Script高级技巧 五、数据存储方案选型 六、权限安全最佳实践 七、调试与性能优化 八、实战案例:广告拦截插件 九、发布与更新策略 掌握浏览器扩展开发核心技术&#…...

从VBA到Python:给老牌仿真软件HFSS做个‘现代化改造’

从VBA到Python:HFSS仿真自动化的技术跃迁与实践指南 在电磁仿真领域,HFSS作为行业标杆工具已有数十年历史,而与其相伴的VBA脚本语言正逐渐显露出时代局限性。当Python以每年20%的增速成为工程领域最受欢迎的编程语言时(IEEE Spect…...

国内如何聪明地使用Cursor,汉化、无限制与第三方Key三步走

为何使用Cursor 在AI 编程IDE选择上,Cursor的提示词输入,文件引用,使用交互方面确实是很良好的,如果对工具交互有极致要求的,相对Trae 、VSCode等确实不太完美。 汉化,让你更加快速操作界面 无限制&#x…...

Python代码实现原理深度解析:从基础语法到高级特性

Python代码实现原理深度解析:从基础语法到高级特性 【免费下载链接】code ActiveState Code Recipes 项目地址: https://gitcode.com/gh_mirrors/code1/code 一、Python代码执行的基本流程 Python作为一门解释型语言,其代码实现原理主要围绕解释…...

2025届最火的十大AI学术工具横评

Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 专门用于降低文本被人工智能检测系统识别概率的工具问世,它借助语义重构与句式变…...

tinfoleak地理情报分析:追踪用户位置与移动路线的终极指南

tinfoleak地理情报分析:追踪用户位置与移动路线的终极指南 【免费下载链接】tinfoleak The most complete open-source tool for Twitter intelligence analysis 项目地址: https://gitcode.com/gh_mirrors/ti/tinfoleak tinfoleak是一款功能强大的开源Twitt…...

BoringSSL未来展望:量子安全加密与下一代协议演进

BoringSSL未来展望:量子安全加密与下一代协议演进 【免费下载链接】boringssl Mirror of BoringSSL 项目地址: https://gitcode.com/gh_mirrors/bo/boringssl BoringSSL作为一款由Google开发的加密库,正积极应对量子计算带来的挑战,通…...

为Claude Code配置Taotoken密钥与聚合地址避免封号困扰

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken密钥与聚合地址避免封号困扰 如果你正在使用Claude Code作为编程助手,可能会遇到官方渠道的…...

ESXi GPU虚拟化(vGPU)怎么配置?新手一步到位教程

在ESXi主机运维中,随着图形密集型业务(如3D渲染、AI训练、虚拟桌面)的需求增加,GPU虚拟化(vGPU)成为必备技能——通过vGPU技术,可将一张物理GPU虚拟化成多个虚拟GPU,分配给不同虚拟机…...

Newton性能分析工具:找出仿真瓶颈的实用方法

Newton性能分析工具:找出仿真瓶颈的实用方法 【免费下载链接】newton An open-source, GPU-accelerated physics simulation engine built upon NVIDIA Warp, specifically targeting roboticists and simulation researchers. 项目地址: https://gitcode.com/Git…...

华硕B660M主板装Ubuntu 22.04,避开N卡黑屏和磁盘识别坑的保姆级教程

华硕B660M主板Ubuntu 22.04实战指南:NVIDIA显卡与磁盘识别的终极解决方案 当高性能硬件遇上开源系统,总会碰撞出意想不到的火花。作为一名长期在Linux环境下工作的开发者,我最近为团队配置了一批搭载华硕B660M主板和NVIDIA 30系列显卡的开发机…...

ESP32-S3开发板硬件解析与LoRaWAN实战指南

1. 硬件解析:Heltec WiFi LoRa 32 (V4)开发板深度拆解1.1 核心硬件架构设计这款基于ESP32-S3的开发板在硬件设计上做了多项针对性优化。主控采用双核240MHz的ESP32-S3,搭配512KB SRAM和2MB PSRAM的内存组合,在低功耗场景下能保持足够的处理能…...

AI Agent运维实战:轻量级仪表板AgentHQ部署与核心功能解析

1. 项目概述:一个为AI Agent团队打造的轻量级运维仪表板如果你正在使用OpenClaw框架管理一个AI Agent团队,那么你很可能和我一样,经历过这样的混乱时刻:打开好几个终端窗口,翻看一堆日志文件,才能勉强搞清楚…...

零基础学日语,我用这510个单词搞定《标日初级》前12课(附分类记忆法)

零基础日语入门:510个高频词构建《标日初级》12课完整记忆网络 站在东京涩谷的十字路口,耳边此起彼伏的日语对话让刚落地的新手学习者感到既兴奋又焦虑。当我翻开《标准日本语》前12课,面对510个陌生单词时,传统按课背诵的方法让我…...

ARM CP15协处理器与DMA控制架构深度解析

1. ARM CP15协处理器与DMA控制架构解析在ARMv6架构的嵌入式系统中,CP15协处理器扮演着系统控制核心角色,其寄存器组管理着内存保护、缓存操作以及DMA传输等关键功能。以ARM1136JF-S为例,c11寄存器组专门负责两级DMA控制,通过硬件加…...

FPGA设计避坑指南:手把手教你搞定跨时钟域信号处理(附Verilog代码)

FPGA设计避坑指南:手把手教你搞定跨时钟域信号处理(附Verilog代码) 在数字电路设计中,跨时钟域(CDC)问题就像一颗定时炸弹,随时可能让你的系统陷入混乱。想象一下这样的场景:你精心设…...

老司机翻车记:双路E5+PVE7.0直通GTX1060,我踩过的那些坑和最终解法

双路E5平台PVE7.0显卡直通实战:从错误码43到完美驱动的深度排错指南 当你在双路E5服务器上尝试将GTX1060直通给PVE7.0虚拟机时,可能会遇到一系列令人抓狂的问题——黑屏、错误码43、分辨率异常、光标闪烁...这些问题往往让中高级用户也束手无策。本文不是…...

AI任务分解与执行框架:从原理到实战构建智能工作流引擎

1. 项目概述与核心价值最近在折腾AI应用开发的朋友,估计都绕不开一个核心痛点:如何让一个AI模型,比如ChatGPT,真正理解并执行复杂的、多步骤的任务?我们常常遇到的情况是,你给AI一个指令,它可能…...

Auralith程序化音频引擎:实时动态声音生成与游戏集成实战

1. 项目概述:Auralith是什么,以及它为何值得关注如果你是一名独立游戏开发者,或者对游戏音频设计有浓厚兴趣,那么“Auralith”这个名字很可能已经出现在你的雷达上。这是一个由开发者“smouj”在GitHub上开源的项目,它…...

WiFi 6智能管理:从OFDMA、TWT到云端优化,解决家庭网络拥堵实战

1. WiFi 6的潜力与隐忧:为什么“智能”比“更快”更重要 WiFi 6终于走进了千家万户。铺天盖地的宣传都在告诉你,它能带来飞一般的网速、更低的延迟,以及同时连接海量设备的能力。从技术规格上看,这无疑是无线网络的一次巨大飞跃。…...

Socket.IO-objc性能优化指南:减少延迟、节省流量的7个策略

Socket.IO-objc性能优化指南:减少延迟、节省流量的7个策略 【免费下载链接】socket.IO-objc socket.io v0.7.2 — 0.9.x for iOS and OS X 项目地址: https://gitcode.com/gh_mirrors/so/socket.IO-objc Socket.IO-objc是一款为iOS和OS X平台打造的Socket.IO…...

SpecVibe项目复盘:基于规格驱动与智能体技能框架的AI辅助开发实践

1. 项目概述与核心价值最近在整理过往的代码仓库时,我重新审视了“SpecVibe”这个项目。它是我在2022年10月至2023年1月期间,参与一个名为“Lithium”的后端开发训练营时完成的核心作业。这个项目远不止是一份简单的作业提交,它是我个人对于“…...

UnityMeshSimplifier自定义扩展:如何编写自己的简化算法

UnityMeshSimplifier自定义扩展:如何编写自己的简化算法 【免费下载链接】UnityMeshSimplifier Mesh simplification for Unity. 项目地址: https://gitcode.com/gh_mirrors/un/UnityMeshSimplifier UnityMeshSimplifier是一款强大的Unity网格简化工具&#…...

Godot游戏引擎集成MCP协议:AI智能体辅助开发实战指南

1. 项目概述:当游戏引擎遇见AI智能体如果你是一位游戏开发者,或者对AI应用开发感兴趣,最近可能已经感受到了一个趋势:AI智能体(Agent)正在从云端走向本地,从通用走向垂直。而游戏开发&#xff0…...

programmer-book部署指南:快速搭建个人技术文档网站

programmer-book部署指南:快速搭建个人技术文档网站 【免费下载链接】programmer-book 公众号:普通程序员 项目地址: https://gitcode.com/gh_mirrors/pr/programmer-book programmer-book是一个面向普通程序员的技术文档项目,通过简单…...

AI驱动开发实战:从零构建React生命可视化应用的技术解析

1. 项目概述与核心价值最近在逛一些开发者社区时,发现了一个挺有意思的项目,叫“Life-Bar”。简单来说,这是一个完全由AI驱动开发、用来可视化你人生旅程的网页应用。你只需要输入自己的出生日期,它就能实时计算出你已经活了多少天…...