7.1 yolov5优化模型时,自动标注xml数据
yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码:
注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行修改,只是测试返回的类格式为:
[["water",[15,20,30,40]],["red",[12,13,14,15]]]
二维数组表示测试的类为water和red,其中后面的数字表示类的坐标:[top,left,bottom,right],表示上、左、下、右4个坐标。
import os
import cv2
from PIL import Imagefrom yolo import YOLO#1.预测类,获得字符串
class Predict():def a(self, img_path,save_path,img_name):image = Image.open(img_path)r_image, pred = yolo.detect_image(image, pred_class, img_name)if not os.path.exists(dir_save_path):os.makedirs(dir_save_path)r_image.save(save_path, quality=95, subsampling=0)return pred#2.写入xml文件
def img_xml(img_path,xml_path,img_name,pred):if len(pred) != 0:#1.读取图片(xml需要写入图片的长宽高)img = cv2.imread(img_path)#2.写入xml文件#(1)写入文件头部files_path=img_path.split("\\")[-2]print("..:",files_path)xml_file = open((xml_path + img_name + '.xml'), 'w')xml_file.write('<annotation>\n')xml_file.write(' <folder>' +files_path+ '</folder>\n')xml_file.write(' <filename>' + img_name + '.jpg' + '</filename>\n')xml_file.write(' <path>' + img_path +'</path>\n')xml_file.write(' <source>\n')xml_file.write(' <database>Unknown</database>\n')xml_file.write(' </source>\n')#(2)写入图片的长宽高信息xml_file.write(' <size>\n')xml_file.write(' <width>'+str(img.shape[1])+'</width>\n')xml_file.write(' <height>' + str(img.shape[0]) + '</height>\n')xml_file.write(' <depth>' + str(img.shape[2]) + '</depth>\n')xml_file.write(' </size>\n')xml_file.write(' <segmented>0</segmented>\n')#3.写入字符串信息:[["water",[15,20,30,40]],["red",[12,13,14,15]]]#if len(shuzu)!=0:for item in pred:xml_file.write(' <object>\n')xml_file.write(' <name>' + str(item[0]) + '</name>\n')xml_file.write(' <pose>Unspecified</pose>\n')xml_file.write(' <truncated>0</truncated>\n')xml_file.write(' <difficult>0</difficult>\n')xml_file.write(' <bndbox>\n')#写入字符串信息#[top, left, bottom, right]xml_file.write(' <xmin>' + str(item[1][1]) + '</xmin>\n')xml_file.write(' <ymin>' + str(item[1][0]) + '</ymin>\n')xml_file.write(' <xmax>' + str(item[1][3]) + '</xmax>\n')xml_file.write(' <ymax>' + str(item[1][2]) + '</ymax>\n')xml_file.write(' </bndbox>\n')xml_file.write(' </object>\n')xml_file.write('</annotation>\n')if __name__ == "__main__":yolo = YOLO()ss = Predict()#需要修改以下4个量,并且要去VOCdevkit/VOC2007/文件夹下替换训练好的模型best_epoch_weights.pth和voc_classes.txtpred_class = ["car", "moto", "persons"] # 填入需要检测的类名file_path = r"D:\AI\4.yolov5-pytorch-main_xml_write\save\image" # 填入测试的图片路径dir_save_path = r"D:\AI\4.yolov5-pytorch-main_xml_write\save\image_save"# 填入保存的图片路径xml_path="save\\xml_save\\"# 填入保存的xml文件的路径ls=os.listdir(file_path)for item in ls:img_name=itemxml_name=img_name.split(".")[0]+".xml"img_names=img_name.split(".")[0]img_path=os.path.join(file_path,img_name)save_path=os.path.join(dir_save_path,img_name)#xml_path=os.path.join(xml_path,xml_name)pred=ss.a(img_path,save_path,img_name)img_xml(img_path, xml_path, img_names, pred)
相关文章:
7.1 yolov5优化模型时,自动标注xml数据
yolov5优化模型时,一般需要继续标注一些检测错误的图片,将其标为xml数据。以下是根据训练好的模型自动标注xml数据的python代码: 注意:代码中包含了本人的yolov5的测试过程,测试过程可以自己根据yolov5的测试文件自行…...
开发者职场“生存状态”大调研报告分析 - 第一版
听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…...
在MySQL中使用!=还能走索引吗?
在MySQL中使用!还能走索引吗? 一般情况下,我们会在一个索引上较多的使用等值查询或者范围查询,此时索引大多可以帮助我们极快的查询出我们需要的数据。 那当我们在where条件中对索引列使用!查询,索引还能发挥他的作用吗…...
【算法题】2897. 对数组执行操作使平方和最大
题目: 给你一个下标从 0 开始的整数数组 nums 和一个 正 整数 k 。 你可以对数组执行以下操作 任意次 : 选择两个互不相同的下标 i 和 j ,同时 将 nums[i] 更新为 (nums[i] AND nums[j]) 且将 nums[j] 更新为 (nums[i] OR nums[j]) &#…...
2023年中国划船机产量、销量及市场规模分析[图]
划船机是一种健身器材,它模拟了划船的运动,可以锻炼身体的肌肉力量和协调性。划船机通常由座椅、把手、脚踏板和传动装置组成,使用者可以通过拉动把手来模拟划船的动作,从而达到锻炼身体的目的。 划船机产业链 资料来源ÿ…...
Kafka和RabbitMQ的对比
Rabbitmq比kafka可靠,kafka更适合IO高吞吐的处理,比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理,他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…...
ffmpeg从一个视频中提取音频
ffmpeg -i ~/video/video.mp4 -vn -acodec copy ~/video/audioFile.m4a 从video.mp4中提取音频到文件audioFile.m4a中 查看提取的音频文件 ffprobe ~/video/audioFile.m4a...
CCF CSP题解:坐标变换(其一)(202309-1)
链接 OJ链接:传送门 AC代码 #include <iostream>using namespace std;int n, m;int dx 0, dy 0;int main() {cin >> n >> m;for (int i 0; i < n; i) {int x, y;cin >> x >> y;dx x;dy y;}for (int i 0; i < m; i) {i…...
跳表C语言
【C语言】算法学习跳表_c语言跳表-CSDN博客 leetcode原题,代码如下 #define MAX(a, b) ((a) > (b) ? (a) : (b)) const int MAX_LEVEL 32; const int P_FACTOR RAND_MAX >> 2;typedef struct SkiplistNode {int val;int maxLevel;struct SkiplistNode…...
【JavaEE】_tomcat的安装与简单使用
目录 1. 安装tomcat 1.1 下载tomcat并解压缩 1.2 启动tomcat 1.3 访问tomcat欢迎页面 2. tomcat简单使用:部署前端代码 3. 基于tomcat的网站后端开发 tomcat是一个HTTP服务器,HTTP协议就是HTTP客户端与HTTP服务器之间通信使用的协议。 其中HTTP客…...
React 状态管理 - Context API 前世今生(上)旧版v16.3前
目录 扩展学习资料 Context api before React v16.3 Context 实战使用-Context Context VS Props Context Props Context的缺陷 New Context API 的实践 扩展学习资料 名称 链接 备注 new context api https://reactjs.org/docs/context.html 英文 old context …...
微服务、SOA 和 API 之间的区别
在软件开发中,组织的投资方式发生了重大转变,部署了面向架构的方法。这一切都始于 SOA,然后转变为我们称之为微服务的东西。添加到其中的是另一个概念,指定为 API。 在过去的几年里,SOA 和微服务仍然是讨论的话题。随…...
python打印正反直角三角形
我们用while循环,第一行打印一颗星,第二行打印两颗星,依次循环到五颗 我们写while循环时,先定义一个变量,然后在循环中增加值 i0 while < 5:j0while j <i:print(*,end\t)j1print() # 换行i1我们还可以打印反…...
ubuntu安装Miniconda并举例使用
更新系统包 sudo apt update sudo apt upgrade官网下载Miniconda,最好是实体机下载后放进虚拟机,方法可以参考Xftp 7连接服务器或者本地虚拟机文章 https://docs.conda.io/en/latest/miniconda.html#linux-installers 进入安装目录执行,右键…...
如何保护您的数据免受.360勒索病毒的感染
导言: 网络安全漏洞和威胁伴随着我们的日常生活。其中, 360 勒索病毒成为了引发广泛关注的网络威胁之一。本文91数据恢复将深入探索 360 勒索病毒,揭示它背后的黑暗故事和如何防范此类风险。 如果受感染的数据确实有恢复的价值与必要性&#…...
2024计算机保研--哈工大、中山、国防科大
前言 标题中的学校是我在九月前差不多拿到 o f f e r offer offer,且有可能会去的学校,这篇博客也不能算是经验贴,只能算是血泪史吧。趁着我还记得这几个月的经历,还是记录一下吧,刚才刷知乎看了七月哥(是…...
Hadoop分布式集群搭建教程
目录 前言环境准备一、创建虚拟机二、虚拟机网络配置三、克隆虚拟机四、Linux系统配置五、Hadoop的部署配置六、Hadoop集群的启动 前言 大数据课程需要搭建Hadoop分布式集群,在这里记录一下搭建过程 环境准备 搭建Haoop分布式集群所需环境: VMware&a…...
学习函数式编程、可变参数及 defer - GO语言从入门到实战
函数是⼀等公⺠、学习函数式编程、可变参数及 defer - GO语言从入门到实战 函数是⼀等公⺠ 在Go语言中,函数可以分配给一个变量,可以作为函数的参数,也可以作为函数的返回值。这样的行为就可以理解为函数属于一等公民。 与其他主要编程语⾔…...
Linux 文件链接
Linux 下的文件链接有两类。一个是类似于 win 电脑的快捷方式,我们称为软链接,软链接也可以叫做符号链接。另一种是通过文件系统的 inode 连接来产生的,类似于 windows 电脑的复制,但是不产生新的文件,我们称为硬链接。…...
1.go web之gin框架
Gin框架 一、准备 1.下载依赖 go get -u github.com/gin-gonic/gin2.引入依赖 import "github.com/gin-gonic/gin"3. (可选)如果使用诸如 http.StatusOK 之类的常量,则需要引入 net/http 包 import "net/http"二、基…...
抖音视频智能管理工具:从数据采集到企业级内容管理的技术实现
抖音视频智能管理工具:从数据采集到企业级内容管理的技术实现 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...
DAMOYOLO-S多场景实战:交通监控、仓储盘点、内容审核一体化方案
DAMOYOLO-S多场景实战:交通监控、仓储盘点、内容审核一体化方案 1. 引言:一个模型,搞定多种“找东西”的难题 你有没有遇到过这些麻烦事? 在几百小时的交通监控录像里,想快速找出所有违规停车的车辆。仓库里货品成千…...
SmolVLA高性能部署:PyTorch 2.7.1 + Gradio 6.4.0协同优化方案
SmolVLA高性能部署:PyTorch 2.7.1 Gradio 6.4.0协同优化方案 1. 项目概述与核心价值 SmolVLA是一个专为经济实惠机器人技术设计的紧凑高效视觉-语言-动作模型。这个仅有5亿参数的轻量级模型,能够在保持高性能的同时大幅降低硬件门槛,让更多…...
别再让高码流RTSP视频卡住你的OpenCV项目:一个Python异步队列的实战优化
高码流RTSP视频处理的Python异步队列优化实战 当你的OpenCV项目遇到高码流RTSP视频卡顿、解码错误甚至程序崩溃时,那种挫败感我深有体会。去年在开发一个智能监控系统时,4M以上码流的RTSP视频让我们的算法频繁崩溃,团队花了整整两周才找到稳定…...
晶闸管SCR
晶闸管 晶闸管(Thyristor / 可控硅,英文:Silicon Controlled Rectifier,缩写 SCR)是一种大功率半导体开关器件,主要用于控制电流的导通与截止,广泛应用于电力电子系统中。 晶闸管(…...
开源OFA镜像落地:为农业AI平台提供作物病害图片自动诊断描述支持
开源OFA镜像落地:为农业AI平台提供作物病害图片自动诊断描述支持 1. 项目概述:当AI遇见农业 想象一下这样的场景:一位农民在田间发现作物叶片出现异常斑点,他拿出手机拍照上传,几秒钟后就能获得准确的病害描述和诊断…...
腾讯混元翻译模型部署全攻略:HY-MT1.5-1.8B离线翻译系统搭建
腾讯混元翻译模型部署全攻略:HY-MT1.5-1.8B离线翻译系统搭建 1. 项目背景与模型介绍 在当今全球化商业环境中,语言障碍仍然是企业跨国运营的主要挑战之一。腾讯混元团队推出的HY-MT1.5-1.8B翻译模型,是一款专为企业级应用设计的高性能机器翻…...
Qwen3.5-9B算法学习伙伴:LeetCode解题思路分析与代码实现
Qwen3.5-9B算法学习伙伴:LeetCode解题思路分析与代码实现 1. 为什么需要AI算法学习伙伴 刷LeetCode是每个程序员提升算法能力的必经之路,但独自面对难题时常常陷入困境。你可能遇到过这些情况:盯着题目半小时毫无头绪、写出的代码总是超时、…...
SiameseUIE中文-base教程:DEPLOYMENT.md文档解读与自定义扩展路径
SiameseUIE中文-base教程:DEPLOYMENT.md文档解读与自定义扩展路径 你是不是也遇到过这样的烦恼?面对一篇新闻稿,想快速找出里面的人名、地名和公司名,手动标注得眼花缭乱;或者分析一堆用户评论,想搞清楚大…...
Stable Yogi Leather-Dress-Collection行业方案:ACG展会皮衣COS角色快速出图服务
Stable Yogi Leather-Dress-Collection行业方案:ACG展会皮衣COS角色快速出图服务 想象一下,你是一名动漫展会的服装供应商,或者是一个COS社团的负责人。下个月的大型展会就在眼前,你们计划推出一个全新的“赛博朋克机车少女”系列…...
