Python将Labelme文件的标注信息绘制到图片上

Python将Labelme文件的标注信息绘制到图片上

  • 前言
  • 前提条件
  • 相关介绍
  • 实验环境
  • Python将Labelme文件的标注信息绘制到图片上
    • 代码实现
    • 输出结果

在这里插入图片描述

前言

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

前提条件

  • 熟悉Python

相关介绍

  • Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
  • PyTorch 是一个深度学习框架,封装好了很多网络和深度学习相关的工具方便我们调用,而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本,其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院(FAIR)基于 Torch 推出的,它是一个基于 Python 的可续计算包,提供两个高级功能:1、具有强大的 GPU 加速的张量计算(如 NumPy);2、构建深度神经网络时的自动微分机制。
  • YOLOv5是一种单阶段目标检测算法,该算法在YOLOv4的基础上添加了一些新的改进思路,使其速度与精度都得到了极大的性能提升。它是一个在COCO数据集上预训练的物体检测架构和模型系列,代表了Ultralytics对未来视觉AI方法的开源研究,其中包含了经过数千小时的研究和开发而形成的经验教训和最佳实践。
  • Labelme是一款图像标注工具,由麻省理工(MIT)的计算机科学和人工智能实验室(CSAIL)研发。它是用Python和PyQT编写的,开源且免费。Labelme支持Windows、Linux和Mac等操作系统。
  • 这款工具提供了直观的图形界面,允许用户在图像上标注多种类型的目标,例如矩形框、多边形、线条等,甚至包括更复杂的形状。标注结果以JSON格式保存,便于后续处理和分析。这些标注信息可以用于目标检测、图像分割、图像分类等任务。
  • 总的来说,Labelme是一款强大且易用的图像标注工具,可以满足不同的图像处理需求。
  • Labelme标注json文件是一种用于存储标注信息的文件格式,它包含了以下几个主要的字段:
    • version: Labelme的版本号,例如"4.5.6"。
    • flags: 一些全局的标志,例如是否是分割任务,是否有多边形,等等。
    • shapes: 一个列表,每个元素是一个字典,表示一个标注对象。每个字典包含了以下几个字段:
      • label: 标注对象的类别名称,例如"dog"。
      • points: 一个列表,每个元素是一个坐标对,表示标注对象的边界点,例如[[10, 20], [30, 40]]。
      • group_id: 标注对象的分组编号,用于表示属于同一组的对象,例如1。
      • shape_type: 标注对象的形状类型,例如"polygon",“rectangle”,“circle”,等等。
      • flags: 一些针对该标注对象的标志,例如是否是难例,是否被遮挡,等等。
    • lineColor: 标注对象的边界线颜色,例如[0, 255, 0, 128]。
    • fillColor: 标注对象的填充颜色,例如[255, 0, 0, 128]。
    • imagePath: 图像文件的相对路径,例如"img_001.jpg"。
    • imageData: 图像文件的二进制数据,经过base64编码后的字符串,例如"iVBORw0KGgoAAAANSUhEUgAA…"。
    • imageHeight: 图像的高度,例如600。
    • imageWidth: 图像的宽度,例如800。

以下是一个Labelme标注json文件的示例:

{"version": "4.5.6","flags": {},"shapes": [{"label": "dog","points": [[121.0,233.0],[223.0,232.0],[246.0,334.0],[121.0,337.0]],"group_id": null,"shape_type": "polygon","flags": {}}],"lineColor": [0,255,0,128],"fillColor": [255,0,0,128],"imagePath": "img_001.jpg","imageData": "iVBORw0KGgoAAAANSUhEUgAA...","imageHeight": 600,"imageWidth": 800
}

实验环境

  • Python 3.x (面向对象的高级语言)

Python将Labelme文件的标注信息绘制到图片上

  • 项目结构
    在这里插入图片描述

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

代码实现

import os
import cv2
import json
import copydef query_info_in_json_and_rectangle(in_img_path,in_json_path,out_img_path):'''查询json文件的信息并绘制'''img = cv2.imread(in_img_path)with open(in_json_path,'r') as f:json_data = json.load(f)# print(json_data)# 以查询label信息为例,比如输出'label' == "49"的标注信息json_data_shape =  copy.deepcopy(json_data['shapes'])if json_data_shape != []:for i in json_data_shape:x1 = int(i['points'][0][0])y1 = int(i['points'][0][1])x2 = int(i['points'][1][0])y2 = int(i['points'][1][1])xmin = min(x1,x2)ymin = min(y1,y2)xmax = max(x1,x2)ymax = max(y1,y2)label_name = i['label']cv2.rectangle(img,(xmin,ymin),(xmax,ymax),(0, 0, 255), 2)cv2.putText(img,label_name,(xmin-5,ymin), cv2.FONT_HERSHEY_SIMPLEX, 1,(255,0,0),3)cv2.imwrite(out_img_path,img)else: # 无标注信息保存原图cv2.imwrite(out_img_path,img)if __name__=="__main__":in_img_dir = 'images/'in_json_dir = 'jsons/'output_dir = 'output/'if not os.path.exists(output_dir):os.mkdir(output_dir) img_name_list = [i for i in os.listdir(in_img_dir) if i.endswith('.png')]# print(img_name_list)json_name_list = [i for i in os.listdir(in_json_dir) if i.endswith('.json')]# print(json_name_list)for img_name in img_name_list:in_img_path = in_img_dir + img_namein_json_path = in_json_dir + img_name[:-4]+'.json'out_img_path = output_dir + img_name# 将Labelme文件的标注信息绘制到图片上query_info_in_json_and_rectangle(in_img_path,in_json_path,out_img_path)

输出结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 由于本人水平有限,难免出现错漏,敬请批评改正。
  • 更多精彩内容,可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看
  • YOLOv8 Ultralytics:使用Ultralytics框架训练RT-DETR实时目标检测模型
  • 基于DETR的人脸伪装检测
  • YOLOv7训练自己的数据集(口罩检测)
  • YOLOv8训练自己的数据集(足球检测)
  • YOLOv5:TensorRT加速YOLOv5模型推理
  • YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
  • 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
  • YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
  • YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
  • Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
  • YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
  • 使用Kaggle GPU资源免费体验Stable Diffusion开源项目

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/224535.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用docker部署Node-RED

利用Docker部署Node-RED可以通过以下步骤进行: 1. 安装Docker:首先,确保你的计算机上已经安装了Docker。你可以从Docker官网下载并安装适合你操作系统的版本。 2. 创建Docker镜像:在Dockerfile中,编写一个包含Node-RED…

Java面试整理-多线程

Java多线程(Java Multithreading)是Java编程语言中的一个核心概念,它允许程序同时执行多个任务。在多线程环境下,CPU可以在不同的线程之间迅速切换,使得似乎多个任务在同时进行,这对于提高应用程序的性能和响应速度非常重要。 在深入讨论多线程之前,我们可以先对比一下线…

react dom的diff理解及性能优化

diff的三大过程 当某个值变化时,他从根组件寻找 (key,state,props,context) 当父组件稳定时,react会跳过子组件的props的对比 只有当当前组件值改变时,从他开始,所有的子孙节点都会对比props props是全等比较,所以&am…

windows 创建SSH公钥

1、 运行电脑终端 powershell 2、检查你的电脑是否已经有 SSH key cd ~/.ssh ls 3、创建一个 SSH key ssh-keygen -t rsa -C “your_emailexample.com” or ssh-keygen -t ed25519 -C “your_emailexample.com” 代码参数含义: -t 指定密钥类型,默…

怎么把图片转文字?这几个图片转文字方法一定要知道!

怎么把图片转文字?无论是从书籍、网络还是社交媒体上,我们经常需要从图片中提取文字来进行复制、编辑或翻译。手动操作耗时耗力,效率低下,那么怎么把图片转文字呢?今天我将介绍三种不同的方法来实现图片转文字。 图片转…

OceanMind海睿思案例入选第二届中国数据治理年会“DCMM百项优秀案例”

近日,中国电子信息行业联合会在北京成功举办“第二届中国数据治理年会”。 本届大会以“数据强基、智领未来”为主题,汇聚我国数据治理领域的资深专家、学者、企业大咖同台论道,共话数据未来的发展与创新。 中新赛克海睿思作为DCMM3级乙方代…

HPM6750系列--总章

本栏目介绍先楫半导体出品的HPM6750芯片(基于HPM6750evkmini开发板) ​​​​​​​ 内容概述 HPM6750系列--第一篇 初识HPM6750 介绍HPM6750芯片信息,包括主频、内存、外设配置,并列举了各种开发工具和开发资源。 HPM6750系列--…

​urllib.parse 用于解析 URL​

源代码: Lib/urllib/parse.py 该模块定义了一个标准接口,用于将统一资源定位符(URL)字符串拆分为不同部分(协议、网络位置、路径等),或将各个部分组合回 URL 字符串,并将“相对 URL”转换为基于…

Cloudflare始终使用HTTPS且带参数跳转到www的域名

文章目录 设置教程设置图跳转实测 设置教程 关闭 SSL/TLS -> 边缘证书 的 Always Use HTTPS 规则 -> 页面规则 -> URL: http://www.example.com/* 设置成始终使用HTTPS 规则 -> 页面规则 -> URL: example.com/* 设置成 转发URL301重定向到 to https://www.ex…

气象监测与流程分析大屏,更有效地保护人们的生命和财产安全!

气象变化与我们的生活息息相关,随着时代的变迁和科技的飞速发展,气象监测正逐渐迈入数字化的时代。传统的气象观测方式已经无法满足日益增长的需求,数字化的气象监测成为了必然的选择。通过数字化技术的应用,气象数据的采集、传输…

简约大气视频制作模板PR剪辑素材PR项目工程文件

Premiere Pro模板,简约大气视频剪辑素材PR项目工程文件(包含手机竖屏分辨率),包含24个媒体占位符和9个文本占位符。可以编辑和自定义文本占位符和媒体占位符。用来展示照片视频制作。包含视频教程。 来自PR模板网:http…

2312d,d语言作为胶水,用C++调用rust

原理 源码: //主.cpp void foo(); int 主() {foo();中 0; }编译r.rs(被调用函数)文件: //r.rs编译命令. rustc --target i686-pc-windows-msvc r.rs --crate-type staticlib //r.rs文件内容,生成r.lib(11.2M)有点大. //用要staticlib.否则不行. //如果没有i686-pc-windows-m…

(c语言)计算一个数的每位之和(递归实现)

#include<stdio.h> int DigitSum(int x) {int sum 0, g0;if(x>0){g x % 10;sum g;return sumDigitSum(x/10);}return 0; } int main() {int x;printf("请输入需要计算的数\n");scanf("%d",&x);int yDigitSum(x);printf("%d",y);…

会议剪影 | 思腾携AI服务器亮相2023“机器人+”智能制造先进成果展

12月7日-9日&#xff0c;由山东省工业和信息化厅、济宁市人民政府、中国电子信息产业发展研究院主办的2023“机器人”智能制造暨数字经济发展先进成果展在济宁高新区展览馆举办。思腾合力作为行业领先的人工智能基础架构解决方案商出席本次盛会。 本届展会得到了来自政府、行业…

人工智能中的顺序学习:概念、应用和未来方向

一、介绍 人工智能 &#xff08;AI&#xff09; 中的顺序学习是一个关键研究领域&#xff0c;近年来引起了人们的极大兴趣。它指的是人工智能系统从数据序列中学习的能力&#xff0c;其中数据点的顺序至关重要。本文将探讨人工智能中顺序学习的概念、其重要性、应用、方法、挑战…

VSCode配置记录

1. 修改代码背景颜色 1&#xff09;Shift Command P&#xff0c;搜索框输入&#xff1a;settings.json 2&#xff09;输入配置 {"workbench.colorCustomizations": {"editor.lineHighlightBackground": "#86e9e93d", # 修改鼠标所在行背景色…

第P7周:咖啡豆识别(VGG-16复现)

>- **&#x1f368; 本文为[&#x1f517;365天深度学习训练营](https://mp.weixin.qq.com/s/rbOOmire8OocQ90QM78DRA) 中的学习记录博客** >- **&#x1f356; 原作者&#xff1a;[K同学啊 | 接辅导、项目定制](https://mtyjkh.blog.csdn.net/)** 一、前期工作 import …

存爱至死不渝 | 双向奔赴的 BFS 算法 — 双向广搜

双向广搜 算法思想算法特点适用场景实现方式例题字串变换题目描述输入格式输出格式程序代码 算法思想 传统的 BFS 算法是从起始节点开始&#xff0c;逐层地访问图中的所有节点&#xff0c;直到到达目标节点。BFS 的时间复杂度为 O ( b d ) O(b^d) O(bd)&#xff0c;其中 b 是…

金和 OA C6/Control/GetSqlData.aspx/.ashx SQL 注入漏洞复现

0x01 产品简介 金和网络是专业信息化服务商,为城市监管部门提供了互联网+监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 0x02 漏洞概述 金和 OA C6/Control/GetSqlData.aspx/.ashx接口处存在SQL注入漏洞,攻击者除了可以利…

cmake中的configure() 和option()命令的宏定义作用域问题

option() 命令&#xff1a; option(USE_MYMATH "Use provided math implementation" ON)用于在 CMakeLists.txt 中定义一个 CMake 变量 USE_MYMATH&#xff0c;并且默认值为ON。这个变量的值可以在 CMake 配置时通过 -D 选项来修改。例如&#xff1a;cmake -DUSE_MY…