网站建设超速云免费网页制作教程视频自学

pingmian/2026/1/26 17:35:41/文章来源:
网站建设超速云免费,网页制作教程视频自学,怎么制作图片相册,学做网站教程视频目录 1. 修改源码#xff0c;让模型能够生成出对于单个图像的标注。 2. 把数据转为yolo格式 3.把yolo格式转化为xml格式 这两天想偷懒#xff0c;想让模型先在数据上标一遍#xff0c;然后我再做修正#xff0c;主要是图个省事。由于我们主要是利用paddle,模型也是基于p…目录 1. 修改源码让模型能够生成出对于单个图像的标注。 2. 把数据转为yolo格式 3.把yolo格式转化为xml格式 这两天想偷懒想让模型先在数据上标一遍然后我再做修正主要是图个省事。由于我们主要是利用paddle,模型也是基于paddle推理的因此即便我对paddle有一万个吐槽但也不得不用它。但在利用paddle保存推理结果文件时遇到了一个大问题就是paddle推理出来的所有数据都在同一个json文件并且导入labelimg中也不能正常的显示到标注的框不能对数据进行矫正。因此我就想着在代码中间能不能修改某些内容。 如果你是真想把json文件转化为yolo或者xml的话那哥们儿你的思路走窄了从json里面分离出那么多垃圾消息出来很难的 !!! 接下来介绍一下我的做法 1. 修改源码让模型能够生成出对于单个图像的标注。 首先就是修改源码对应的文件为 PaddleDetection/ppdet/engine/trainer.py 。 添加下述代码 class_label[背景,添加你的检测物品标签] def save_result_txt(save_path,boxs,threshold0.5):#,tszie640,osize608with open(save_path,w) as f:for msg in boxs:if msg[score]threshold:bboxmsg[bbox]x1,y1,w,hbboximg_m Image.open(dataset/yz_new_0815/data/0.5data/save_path.split(/)[-1].replace(txt,jpg))# dw 1./img_m.width # 图片的宽# dh 1./img_m.height # 图片的高print(save_path)# returnbboxnp.array([x1,y1,x1w,y1h])#bboxbbox*(tszie/osize)bboxbbox.astype(np.int32)x1,y1,x2,y2bbox# strs%s %s %s %s %s %s\n%(class_label[msg[category_id]],msg[score],x1,y1,x2,y2)strs%s %s %s %s %s\n%(msg[category_id],x1,y1,x2,y2)f.write(strs) 之后在命令行中令save_result为True就能保存推理的结果了。从代码中可以看出得到的数据就是四个点的坐标非常真诚不想yolo那种还得归一化或者相对长宽啥的。讲真的我就听喜欢四个点坐标这种格式的真诚永远是必杀技。但是没办法我目前好像没见有这种格式的。 2. 把数据转为yolo格式 书接上回上回说到我们已经把数据变成yolo的形式而非格式因为我们没有对数据进行一个归一化的处理。因此在这一回我们把数据归一化得到yolo格式的数据。代码如下 # -*- coding:utf-8 -*- # 作用 # 将图片标注文件转化成yolo格式的txt标注文件 # # import sys import os import cv2 import randomdata_base_dir ./20221210_result/ # 这里就是推理出来的yolo形式的数据姑且叫position数据文件所在的文件夹file_list []for file in os.listdir(data_base_dir):if file classes.txt:continueif file.endswith(.txt):# print(file)img_name file[:-4]print(file)# print(file[:-4]) #得到图片名不带后缀imginfo cv2.imread(图像所在位置文件夹 img_name .jpg).shape# h shape[0] w shape[1]raw_file open(data_base_dir file) # 返回一个文件对象print(raw_file is data_base_dir file)new_file open(yolo格式标注文件位置文件夹 file, a)line raw_file.readline() # 调用文件的 readline()方法while line:print(line)line line.split( )print(line[1])# line[0] float(line[0])x1 float(line[1])print(x1)y1 float(line[2])x2 float(line[3])y2 float(line[4])h imginfo[0]w imginfo[1]print(h str(h))print(w str(w))new_x %.6s % ((x1 x2) / (2 * w))new_y %.6s % ((y1 y2) / (2 * h))new_w %.6s % ((x2 - x1) / w)new_h %.6s % ((y2 - y1) / h)new_file.write(line[0] new_x new_y new_w new_h \n)print(line[0] new_x new_y new_w new_h \n)# print line # 后面跟 , 将忽略换行符# print(line, end )  # 在 Python 3 中使用line raw_file.readline() new_file.close() raw_file.close() 到这一步如果不出意外的话我们就已经把position数据转化为了yolo数据。但是如果你打开labelimg你会发现报错了报错的原因是没有classes.txt文件。因此在yolo格式中一定要加上一个classes.txt文件要不然就会报错。 一定要加上一个classes.txt文件要不然就会报错。 一定要加上一个classes.txt文件要不然就会报错。 一定要加上一个classes.txt文件要不然就会报错。 重要的事情说三遍哈已经四遍了哈哈哈。 3.把yolo格式转化为xml格式 上回说到我们已经把position数据转化成了yolo格式但是paddle这个挨千刀的不支持yolo格式训练至少在现在还没有对应的yaml文件。因此要是真的把数据调好了用yolo格式还是没用因为根本训练不了。这就提到了把yolo格式转化为xml格式的必要性了。代码如下 import os import xml.etree.ElementTree as ET from xml.dom.minidom import Document import cv2 import xml xml.dom.minidom.Document().writexml() def writexml(self,writer: Any,indent: str ,addindent: str ,newl: str ,encoding: Any None) - None class YOLO2VOCConvert:def __init__(self, txts_path, xmls_path, imgs_path):self.txts_path txts_path # 标注的yolo格式标签文件路径self.xmls_path xmls_path # 转化为voc格式标签之后保存路径self.imgs_path imgs_path # 读取读片的路径各图片名字存储到xml标签文件中self.classes [添加你的检测物品标签]# 从所有的txt文件中提取出所有的类别 yolo格式的标签格式类别为数字 0,1,...# writer为True时把提取的类别保存到./Annotations/classes.txt文件中def search_all_classes(self, writerFalse):# 读取每一个txt标签文件取出每个目标的标注信息all_names set()txts os.listdir(self.txts_path)# 使用列表生成式过滤出只有后缀名为txt的标签文件txts [txt for txt in txts if txt.split(.)[-1] txt and txt is not classes.txt]print(len(txts), txts)# 11 [0002030.txt, 0002031.txt, ... 0002039.txt, 0002040.txt]for txt in txts:txt_file os.path.join(self.txts_path, txt)with open(txt_file, r) as f:print(txt_file)objects f.readlines()for object in objects:object object.strip().split( )print(object) # [2, 0.506667, 0.553333, 0.490667, 0.658667]all_names.add(int(object[0]))# print(objects) # [2 0.506667 0.553333 0.490667 0.658667\n, 0 0.496000 0.285333 0.133333 0.096000\n, 8 0.501333 0.412000 0.074667 0.237333\n]print(所有的类别标签, all_names, 共标注数据集%d张 % len(txts))return list(all_names)def yolo2voc(self):# 创建一个保存xml标签文件的文件夹if not os.path.exists(self.xmls_path):os.mkdir(self.xmls_path)# 把上面的两个循环改写成为一个循环imgs os.listdir(self.imgs_path)txts os.listdir(self.txts_path)txts [txt for txt in txts if not txt.split(.)[0] classes] # 过滤掉classes.txt文件print(txts)# 注意这里保持图片的数量和标签txt文件数量相等且要保证名字是一一对应的 (后面改进通过判断txt文件名是否在imgs中即可)if len(imgs) len(txts): # 注意./Annotation_txt 不要把classes.txt文件放进去map_imgs_txts [(img, txt) for img, txt in zip(imgs, txts)]txts [txt for txt in txts if txt.split(.)[-1] txt]print(len(txts), txts)for img_name, txt_name in map_imgs_txts:# 读取图片的尺度信息print(读取图片, img_name)img cv2.imread(os.path.join(self.imgs_path, img_name))height_img, width_img, depth_img img.shapeprint(height_img, width_img, depth_img) # h 就是多少行对应图片的高度 w就是多少列对应图片的宽度# 获取标注文件txt中的标注信息all_objects []txt_file os.path.join(self.txts_path, txt_name)with open(txt_file, r) as f:objects f.readlines()for object in objects:object object.strip().split( )all_objects.append(object)print(object) # [2, 0.506667, 0.553333, 0.490667, 0.658667]# 创建xml标签文件中的标签xmlBuilder Document()# 创建annotation标签也是根标签annotation xmlBuilder.createElement(annotation)# 给标签annotation添加一个子标签xmlBuilder.appendChild(annotation)# 创建子标签folderfolder xmlBuilder.createElement(folder)# 给子标签folder中存入内容folder标签中的内容是存放图片的文件夹例如JPEGImagesfolderContent xmlBuilder.createTextNode(self.imgs_path.split(/)[-1]) # 标签内存folder.appendChild(folderContent) # 把内容存入标签annotation.appendChild(folder) # 把存好内容的folder标签放到 annotation根标签下# 创建子标签filenamefilename xmlBuilder.createElement(filename)# 给子标签filename中存入内容filename标签中的内容是图片的名字例如000250.jpgfilenameContent xmlBuilder.createTextNode(txt_name.split(.)[0] .jpg) # 标签内容filename.appendChild(filenameContent)annotation.appendChild(filename)# 把图片的shape存入xml标签中size xmlBuilder.createElement(size)# 给size标签创建子标签widthwidth xmlBuilder.createElement(width) # size子标签widthwidthContent xmlBuilder.createTextNode(str(width_img))width.appendChild(widthContent)size.appendChild(width) # 把width添加为size的子标签# 给size标签创建子标签heightheight xmlBuilder.createElement(height) # size子标签heightheightContent xmlBuilder.createTextNode(str(height_img)) # xml标签中存入的内容都是字符串height.appendChild(heightContent)size.appendChild(height) # 把width添加为size的子标签# 给size标签创建子标签depthdepth xmlBuilder.createElement(depth) # size子标签widthdepthContent xmlBuilder.createTextNode(str(depth_img))depth.appendChild(depthContent)size.appendChild(depth) # 把width添加为size的子标签annotation.appendChild(size) # 把size添加为annotation的子标签# 每一个object中存储的都是[2, 0.506667, 0.553333, 0.490667, 0.658667]一个标注目标for object_info in all_objects:# 开始创建标注目标的label信息的标签object xmlBuilder.createElement(object) # 创建object标签# 创建label类别标签# 创建name标签imgName xmlBuilder.createElement(name) # 创建name标签# print(len(self.classes))imgNameContent xmlBuilder.createTextNode(self.classes[int(object_info[0])])imgName.appendChild(imgNameContent)object.appendChild(imgName) # 把name添加为object的子标签# 创建pose标签pose xmlBuilder.createElement(pose)poseContent xmlBuilder.createTextNode(Unspecified)pose.appendChild(poseContent)object.appendChild(pose) # 把pose添加为object的标签# 创建truncated标签truncated xmlBuilder.createElement(truncated)truncatedContent xmlBuilder.createTextNode(0)truncated.appendChild(truncatedContent)object.appendChild(truncated)# 创建difficult标签difficult xmlBuilder.createElement(difficult)difficultContent xmlBuilder.createTextNode(0)difficult.appendChild(difficultContent)object.appendChild(difficult)# 先转换一下坐标# (objx_center, objy_center, obj_width, obj_height)-(xminymin, xmax,ymax)x_center float(object_info[1]) * width_img 1y_center float(object_info[2]) * height_img 1xminVal int(x_center - 0.5 * float(object_info[3]) * width_img) # object_info列表中的元素都是字符串类型yminVal int(y_center - 0.5 * float(object_info[4]) * height_img)xmaxVal int(x_center 0.5 * float(object_info[3]) * width_img)ymaxVal int(y_center 0.5 * float(object_info[4]) * height_img)# 创建bndbox标签(三级标签)bndbox xmlBuilder.createElement(bndbox)# 在bndbox标签下再创建四个子标签(xminymin, xmax,ymax) 即标注物体的坐标和宽高信息# 在voc格式中标注信息左上角坐标xmin, ymin xmax, ymax右下角坐标# 1、创建xmin标签xmin xmlBuilder.createElement(xmin) # 创建xmin标签四级标签xminContent xmlBuilder.createTextNode(str(xminVal))xmin.appendChild(xminContent)bndbox.appendChild(xmin)# 2、创建ymin标签ymin xmlBuilder.createElement(ymin) # 创建ymin标签四级标签yminContent xmlBuilder.createTextNode(str(yminVal))ymin.appendChild(yminContent)bndbox.appendChild(ymin)# 3、创建xmax标签xmax xmlBuilder.createElement(xmax) # 创建xmax标签四级标签xmaxContent xmlBuilder.createTextNode(str(xmaxVal))xmax.appendChild(xmaxContent)bndbox.appendChild(xmax)# 4、创建ymax标签ymax xmlBuilder.createElement(ymax) # 创建ymax标签四级标签ymaxContent xmlBuilder.createTextNode(str(ymaxVal))ymax.appendChild(ymaxContent)bndbox.appendChild(ymax)object.appendChild(bndbox)annotation.appendChild(object) # 把object添加为annotation的子标签f open(os.path.join(self.xmls_path, txt_name.split(.)[0] .xml), w)xmlBuilder.writexml(f, indent\t, newl\n, addindent\t, encodingutf-8)f.close()if __name__ __main__:# 把yolo的txt标签文件转化为voc格式的xml标签文件# yolo格式txt标签文件相对路径txts_path1 # 转化为voc格式xml标签文件存储的相对路径xmls_path1 # 存放图片的相对路径imgs_path1 yolo2voc_obj1 YOLO2VOCConvert(txts_path1, xmls_path1, imgs_path1)labels yolo2voc_obj1.search_all_classes()print(labels: , labels)yolo2voc_obj1.yolo2voc()如果你嫌列表要一点一点写类别太麻烦了可以用这种方式(classes.txt就是前面提到的类别文本) cls [] cnt 0 for i in open(txtPath classes.txt, r, encodingutf-8).readlines():cls.append(i) 至此就可以把paddle里面图里的数据转化为xml格式了。

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

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

相关文章

政务网站建设合同网站未备案可以上线吗

泛型 Generics泛型详解 使用泛型参数&#xff0c;有一个先决条件&#xff0c;必需在使用前对其进行声明&#xff1a; fn largest<T>(list: &[T]) -> T {该泛型函数的作用是从列表中找出最大的值&#xff0c;其中列表中的元素类型为 T。首先 largest<T> 对…

做网站怎么字体全部变粗了佛山营销型网站设计

本文介绍numpy数组中这四个方法的区别ndim、shape、dtype、astype。1.ndimndim返回的是数组的维度&#xff0c;返回的只有一个数&#xff0c;该数即表示数组的维度。2.shapeshape&#xff1a;表示各位维度大小的元组。返回的是一个元组。对于一维数组&#xff1a;有疑问的是为什…

医疗行业企业网站建设政企网站建设

【Arclist 标记】这个标记是DedeCms最常用的一个标记&#xff0c;也叫自由列表标记&#xff0c;其中 hotart、coolart、likeart、artlist、imglist、imginfolist、specart、autolist 这些标记都是由这个标记所定义的不同属性延伸出来的别名标记。功能说明&#xff1a;获取指定的…

南宁网站建设地方代运营有哪些套路坑

一模板&#xff1a; 模板不是数据类型&#xff0c;只能算是一种行为集合的表示。编译器在使用模板时&#xff0c;通过更换模板参数来创建数据类型。这个过程就是模板实例化(Instantiation)&#xff0c; 从模板类创建得到的类型称之为特例(specialization)&#xff0c;说白了就是…

做网站主页效果图有什么彩票网站做代理好点

在linux使用platform_driver_register() 注册 platform_driver 时&#xff0c; 需要在 platform_driver 的probe() 里面知道设备的中断号&#xff0c; 内存地址等资源。这些资源的描述信息存放在 resource 数据结构中&#xff0c; 相同的资源存放在一个树形树形数据结构中&…

sql数据库的网站迁移流程页面设计

在信息化、智能化浪潮席卷全球的今天&#xff0c;物联网SaaS平台作为推动工业数字化转型的重要工具&#xff0c;正日益受到广泛关注。那么&#xff0c;物联网SaaS平台究竟是什么&#xff1f;HiWoo Cloud作为物联网SaaS平台又有哪些独特优势&#xff1f;更重要的是&#xff0c;它…

网站推广手段有哪些cms的功能有哪些

在Java编程中&#xff0c;接口和抽象类是两个重要的概念。它们都用于实现面向对象编程中的抽象和封装&#xff0c;但在使用方式和功能上有所不同。本文将详细介绍Java中接口和抽象类的概念、用法和示例代码&#xff0c;帮助读者更好地理解和应用它们。 一、接口&#xff08;In…

建设电影网站选服务器怎么选鸿蒙os用什么语言开发app

linuxpython3.6.8uwsgipostgresqldjango部署web服务器 1.查看系统信息2.配置postgresql数据库2-1.安装postgresql数据库2-2.设置密码2-3.修改postgresql数据库配置文件 3.Python虚拟环境激活虚拟环境 4.Django4-1.Python 安装Django4-2.创建Django项目4-3.配置Django 5.uwsgi5-…

哪些经营范围可以开网站建设费用wordpress 设置显示中文字体

Jupyter Notebook是一个非常强大的工具&#xff0c;可以用于各种数据分析和机器学习任务&#xff0c;包括分类问题。在Jupyter Notebook中进行分类通常需要以下步骤&#xff1a; 导入所需的库&#xff1a;首先&#xff0c;你需要导入必要的Python库&#xff0c;例如NumPy、Pand…

微信分销网站建设比较好太原编程培训机构

本文并非基于微调训练模型&#xff0c;而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇&#xff0c;你将了解训练出一个大模型的环境准备、数据准备&#xff0c;生成分词&#xff0c;模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运…

漯河网站建设漯河wordpress pdf 打印

UNION ALL UNION ALL 用于合并两个或多个 SELECT 语句的结果。 请注意&#xff0c;UNION ALL 合并的每个 SELECT 语句必须是查询相同数量&#xff0c;相同数据类型的字段&#xff0c;且顺序也必须一致。另外结果集中的列名总是等于 UNION ALL 中第一个 SELECT 语句中的列名。 …

黄村专业网站建设公司网络推广员每天的工作是什么

RPA中国基于在科技行业的资源积累&#xff0c;以及对各领域「技术领导者」、「技术应用者」、「产品服务商」的深度调研&#xff0c;2023年&#xff0c;我们重点推出MI报告 ( Market Insight )、CI Vendor报告&#xff08;Comprehensive Influence Vendor&#xff09;两个系列。…

宁波五金网站建设小学生课程同步做网站软件

CopyOnWriteArraySet是CopyOnWriteArrayList类的弟弟。 这些是专用集合类&#xff0c;这些类是在JDK 1.5上添加的&#xff0c;以及它们最流行的表亲ConcurrentHashMap 。 它们是并发收集框架的一部分&#xff0c;位于java.util.concurrent包中。 CopyOnWriteArraySet最适合作为…

建设网站需要花费什么费用网站怎么样制作视频

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

做网站怎么那么难宝安营销型网站建设公司

社交媒体的崛起已经改变了新闻媒体的传播方式。从Facebook到Twitter&#xff0c;从Instagram到LinkedIn&#xff0c;社交媒体平台为新闻媒体提供了一个巨大且潜力无限的受众群体。要在这个竞争激烈的环境中引爆社交媒体&#xff0c;需要一些技巧和诀窍。在本篇文章中&#xff0…

wordpress用户名忘记可以优化网络的软件

信息摘要 区别于对称加密和非对称加密&#xff0c;信息摘要算数是一种不可逆的操作&#xff0c;无论输入数据的大小输出的数据长度是固定的信息摘要算数对输入很敏感&#xff0c;即使数据变化很细微&#xff0c;输出的结果会出现很大的差异从不同输入得到相同的输出的概率非常…

怎样做网站策划正规的代加工平台

目录 知识点 本节大纲思路 ——这里以我自己的为例—— cookie验证——————> login1.php-登录后台界面 login_check.php-检查&#xff0c;作为包含文件 add_news.php-后台界面 php编码 如何创建 Cookie&#xff1f;--setcookie() 语法 实例 1 php header跳转…

做电影网站都需要什么工具成立做网站的公司有哪些

目录 一、简介1.1、APM系统1.2、SkyWalking 简介 二、快速入门2.1、下载、启动2.2、界面认识 三、持久化存储四、告警通知五、自定义追踪-细粒度追踪service方法 一、简介 1.1、APM系统 APM&#xff08;Application Performance Monitoring&#xff09;系统是一种用于监控和管…

用wordpress做音乐网站大学网站栏目建设

羊奶加红枣&#xff0c;女性必备的加法&#xff01; 在当今社会&#xff0c;女性健康备受关注。而羊奶和红枣作为常见的食材&#xff0c;以其独特的营养价值备受追捧。不少人认为&#xff0c;羊奶里面加红枣对女生有很大的帮助。那么&#xff0c;到底羊奶加红枣对女性健康有哪…

网站的不足之处如何做楼盘网站

中国互联网80%流量被四大家族把持着&#xff0c;其余要么去这些家族批发流量&#xff0c;要么去抢占剩余20%。 以下是对中国互联网流量四大家族的介绍和代表性的流量入口产品&#xff1a; 百度系&#xff1a; 百度是中国最大的搜索引擎公司&#xff0c;其搜索引擎百度是中国互…