化妆品公司网站模板,shopee怎么注册开店,全国企业营业执照查询,怎么描述网站主页做的好Python等比例缩放图片并修改对应的Labelme标注文件#xff08;v2.0#xff09; 前言前提条件相关介绍实验环境Python等比例缩放图片并修改对应的Labelme标注文件Json文件代码实现输出结果 前言 此版代码#xff0c;相较于Python等比例缩放图片并修改对应的Labelme标注文件v2.0 前言前提条件相关介绍实验环境Python等比例缩放图片并修改对应的Labelme标注文件Json文件代码实现输出结果 前言 此版代码相较于Python等比例缩放图片并修改对应的Labelme标注文件将无标注文件的数据集处理方法异常跳过也考虑进去了。由于本人水平有限难免出现错漏敬请批评改正。更多精彩内容可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看YOLOv8 Ultralytics使用Ultralytics框架训练RT-DETR实时目标检测模型基于DETR的人脸伪装检测YOLOv7训练自己的数据集口罩检测YOLOv8训练自己的数据集足球检测YOLOv5TensorRT加速YOLOv5模型推理YOLOv5IoU、GIoU、DIoU、CIoU、EIoU玩转Jetson Nano五TensorRT加速YOLOv5目标检测YOLOv5添加SE、CBAM、CoordAtt、ECA注意力机制YOLOv5yolov5s.yaml配置文件解读、增加小目标检测层Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集YOLOv5使用7.0版本训练自己的实例分割模型车辆、行人、路标、车道线等实例分割使用Kaggle GPU资源免费体验Stable Diffusion开源项目 前提条件 熟悉Python 相关介绍 Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell)随着版本的不断更新和语言新功能的添加越多被用于独立的、大型项目的开发。Python OS模块是负责程序与操作系统的交互提供了访问操作系统底层的接口和非常丰富的方法用来处理文件和目录。PyTorch 是一个深度学习框架封装好了很多网络和深度学习相关的工具方便我们调用而不用我们一个个去单独写了。它分为 CPU 和 GPU 版本其他框架还有 TensorFlow、Caffe 等。PyTorch 是由 Facebook 人工智能研究院FAIR基于 Torch 推出的它是一个基于 Python 的可续计算包提供两个高级功能1、具有强大的 GPU 加速的张量计算如 NumPy2、构建深度神经网络时的自动微分机制。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标注文件
Json文件
{version:5.0.1,flags:{},shapes:[{label:1,points:[[551.3333333333339,17],[1144.666666666667,843.6666666666667]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[206.48387096774195,1022.5806451612904],[111,0]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[2364.666666666667,17],[2704.666666666667,1823.666666666667]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[698.272727272727,3475.818181818182],[1167.759862778731,841.8233276157805]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[293.1515151515159,4000.818181818181],[707.363636363636,848.5454545454545]],group_id:null,shape_type:rectangle,flags:{}},{label:4,points:[[109.70967741935465,1025.8064516129032],[193.58064516129025,2103.2258064516127]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[1895.3243243243242,13.513513513513514],[2360.189189189189,1208.1081081081081]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[1654.7837837837842,710.8108108108108],[2351.7692307692305,3007.6923076923076]],group_id:null,shape_type:rectangle,flags:{}}],imagePath:1.jpg,imageData:null,imageHeight:4000,imageWidth:8320
}代码实现 此版代码相较于Python等比例缩放图片并修改对应的Labelme标注文件将无标注文件的数据集处理方法异常跳过也考虑进去了。 import os
import cv2
import jsondef resize_img_equal_proportion(in_img_path,out_img_path,resized_pix):in_img_path:图片输入路径out_img_path:图片结果保存路径resized_pix: 缩放后分辨率ori_img cv2.imread(in_img_path) # 读取图片print(ori_img.shape)height, width ori_img.shape[:2] # 原始分辨率# 等比例缩放到pix400scale resized_pix / height# 缩放后分辨率resized_height resized_pix resized_width int(width * scale)img cv2.resize(ori_img, (resized_width, resized_height))print(img.shape)cv2.imwrite(out_img_path, img)return resized_height,resized_width,scaledef alter_json_equal_proportion(img_name,in_json_path,out_json_path,resized_height,resized_width,scale):in_json_path: json文件输入路径out_json_path: json文件保存路径resized_height: 缩放后的高resized_width: 缩放后的宽scale: 图片缩放比例file_in open(in_json_path, r, encodingutf-8)# json.load数据到变量json_datajson_data json.load(file_in)# 修改json中的内容json_data[imageHeight] resized_heightjson_data[imageWidth] resized_widthjson_data[imagePath] img_namefor LabelBox in json_data[shapes]:for point in LabelBox[points]:point[0] point[0]*scalepoint[1] point[1]*scalefile_in.close()# 创建一个写文件file_out open(out_json_path, w, encodingutf-8)# 将修改后的数据写入文件file_out.write(json.dumps(json_data))file_out.close()if __name__ __main__:in_img_dir images/in_json_dir jsons/out_dir_name output/if not os.path.exists(out_dir_name):os.mkdir(out_dir_name)img_name_list os.listdir(in_img_dir)# print(img_name_list)json_name_list os.listdir(in_json_dir)# print(json_name_list)img_list [i for i in img_name_list if i.endswith(.jpg) or i.endswith(.bmp) or i.endswith(.png) ] # print(img_list)json_list [i for i in json_name_list if i.endswith(.json)]# print(json_list)for img_name in img_list:try:# print(img_name)in_img_path in_img_dir img_name # 获取文件路径in_json_path in_json_dir img_name[:-4].jsonout_img_path out_dir_name img_nameout_json_path out_dir_name img_name[:-4].jsonprint(out_img_path,out_json_path)if os.path.exists(in_json_path): # 输入图片所对应的json文件存在则为True。resized_height,resized_width,scale resize_img_equal_proportion(in_img_path,out_img_path,resized_pix2048)alter_json_equal_proportion(img_name,in_json_path,out_json_path,resized_height,resized_width,scale)except Exception as e:print(e)输出结果
{version:5.0.1,flags:{},shapes:[{label:1,points:[[141.14133333333348,4.352],[293.03466666666674,215.9786666666667]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[52.85987096774194,261.78064516129035],[28.416,0]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[605.3546666666667,4.352],[692.3946666666668,466.85866666666675]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[178.75781818181812,889.8094545454546],[298.94652487135517,215.5067718696398]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[75.04678787878808,1024.2094545454543],[181.08509090909084,217.22763636363635]],group_id:null,shape_type:rectangle,flags:{}},{label:4,points:[[28.08567741935479,262.60645161290324],[49.556645161290305,538.4258064516129]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[485.203027027027,3.4594594594594597],[604.2084324324325,309.2756756756757]],group_id:null,shape_type:rectangle,flags:{}},{label:1,points:[[423.62464864864876,181.96756756756758],[602.052923076923,769.9692307692308]],group_id:null,shape_type:rectangle,flags:{}}],imagePath:1.jpg,imageData:null,imageHeight:1024,imageWidth:841
}由于本人水平有限难免出现错漏敬请批评改正。更多精彩内容可点击进入Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看YOLOv8 Ultralytics使用Ultralytics框架训练RT-DETR实时目标检测模型基于DETR的人脸伪装检测YOLOv7训练自己的数据集口罩检测YOLOv8训练自己的数据集足球检测YOLOv5TensorRT加速YOLOv5模型推理YOLOv5IoU、GIoU、DIoU、CIoU、EIoU玩转Jetson Nano五TensorRT加速YOLOv5目标检测YOLOv5添加SE、CBAM、CoordAtt、ECA注意力机制YOLOv5yolov5s.yaml配置文件解读、增加小目标检测层Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集YOLOv5使用7.0版本训练自己的实例分割模型车辆、行人、路标、车道线等实例分割使用Kaggle GPU资源免费体验Stable Diffusion开源项目