YOLOv11模型的常见处理
一.数据准备:
1.数据集格式:
目录结构示例:
datasets/├── images/│ ├── train/ # 训练图片│ └── val/ # 验证图片└── labels/├── train/ # 训练标签└── val/ # 验证标签
每张图片对应一个 .txt
标注文件,内容为:
<class_id> <x_center> <y_center> <width> <height> # 归一化坐标(0~1)
2.将 VOC 格式的数据集转换为 YOLO 格式的数据集:
把 VOC 格式(XML标注)的数据集,转换成 YOLO 格式(TXT文本标注)的数据集,方便 YOLO 模型直接训练。
关键转换步骤:
(1) 坐标转换(核心)
VOC 的 XML 中存储的是绝对坐标:
<xmin>100</xmin>
<ymin>50</ymin>
<xmax>300</xmax>
<ymax>200</ymax>
👉 转换为 YOLO 的相对坐标(0~1):
0 0.25 0.125 0.5 0.375
(格式:类别ID x_中心 y_中心 宽度 高度
)
(2) 自动生成类别映射
- 扫描所有 XML 文件,自动提取类别名称(如
cat
,dog
)。 - 为每个类别分配数字 ID(如
cat→0
,dog→1
)。
(3) 文件结构重组
VOC格式目录结构: YOLO格式目录结构:
D:/dataset/ D:/dataset/
├── Annotations/ ├── images/
│ ├── 001.xml │ ├── 001.jpg
│ └── 002.xml │ └── 002.jpg
└── JPEGImages/ └── labels/├── 001.jpg ├── 001.txt└── 002.jpg └── 002.txt
为什么需要这个转换?
- YOLO 不吃 XML:YOLO 系列模型训练时需要的是简单的 TXT 标注文件。
- 统一标准:避免手动标注格式混乱。
- 效率提升:自动化转换比手动处理快100倍。
完整代码:
如何使用?
- 确保你的 VOC 数据集有
Annotations/
和JPEGImages/
目录。 - 修改代码中的路径:
voc_data_path = '你的/VOC/数据集路径' yolo_data_path = '输出的/YOLO/路径'
- 运行脚本,得到可直接用于 YOLO 训练的数据集。
import os
import shutil
import xml.etree.ElementTree as ET# VOC格式数据集路径
voc_data_path = 'D:/YOLO/ultralytics-8.3.39/fall'
voc_annotations_path = os.path.join(voc_data_path, 'Annotations')
voc_images_path = os.path.join(voc_data_path, 'JPEGImages')# YOLO格式数据集保存路径
yolo_data_path = 'D:/YOLO/ultralytics-8.3.39/data'
yolo_images_path = os.path.join(yolo_data_path, 'images')
yolo_labels_path = os.path.join(yolo_data_path, 'labels')# 创建YOLO格式数据集目录
os.makedirs(yolo_images_path, exist_ok=True)
os.makedirs(yolo_labels_path, exist_ok=True)# 自动生成类别映射
class_mapping = {}
class_id = 0for voc_annotation in os.listdir(voc_annotations_path):if voc_annotation.endswith('.xml'):tree = ET.parse(os.path.join(voc_annotations_path, voc_annotation))root = tree.getroot()for obj in root.findall('object'):cls = obj.find('name').textif cls not in class_mapping:class_mapping[cls] = class_idclass_id += 1print("自动生成的类别映射:", class_mapping)def convert_voc_to_yolo(voc_annotation_file, yolo_label_file):tree = ET.parse(voc_annotation_file)root = tree.getroot()size = root.find('size')width = float(size.find('width').text)height = float(size.find('height').text)with open(yolo_label_file, 'w') as f:for obj in root.findall('object'):cls = obj.find('name').textif cls not in class_mapping:continuecls_id = class_mapping[cls]xmlbox = obj.find('bndbox')xmin = float(xmlbox.find('xmin').text)ymin = float(xmlbox.find('ymin').text)xmax = float(xmlbox.find('xmax').text)ymax = float(xmlbox.find('ymax').text)x_center = (xmin + xmax) / 2.0 / widthy_center = (ymin + ymax) / 2.0 / heightw = (xmax - xmin) / widthh = (ymax - ymin) / heightf.write(f"{cls_id} {x_center} {y_center} {w} {h}\n")# 遍历VOC数据集的Annotations目录,进行转换
for voc_annotation in os.listdir(voc_annotations_path):if voc_annotation.endswith('.xml'):voc_annotation_file = os.path.join(voc_annotations_path, voc_annotation)image_id = os.path.splitext(voc_annotation)[0]voc_image_file = os.path.join(voc_images_path, f"{image_id}.jpg")yolo_label_file = os.path.join(yolo_labels_path, f"{image_id}.txt")yolo_image_file = os.path.join(yolo_images_path, f"{image_id}.jpg")convert_voc_to_yolo(voc_annotation_file, yolo_label_file)if os.path.exists(voc_image_file):shutil.copy(voc_image_file, yolo_image_file)print("转换完成!")
二.模型处理:
1.训练模型:
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
from ultralytics import YOLOmodel = YOLO("yolo11n.pt") # Load a pretrained model
results = model.train(data="D:/YOLO/ultralytics-8.3.39/data.yaml",epochs=100, imgsz=640, batch=16,device=0,workers=0, iou=0.4)
2.使用模型:
import os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"
from ultralytics import YOLO# Load a model
model = YOLO("D:/YOLO/ultralytics-8.3.39/runs/detect/train5/weights/best.pt")# Perform object detection on an image
results = model("图片地址")
results[0].show()
3.pt转onnx:
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
from ultralytics import YOLO# 加载 YOLOv11 模型
model = YOLO('D:/YOLO/ultralytics-8.3.39/runs/detect/train3/weights/best.pt')# 导出为 ONNX 格式
model.export(format='onnx', imgsz=640)
三.数据分析:
对比不同训练过程的结果(如不同模型或训练策略),通过图表展示以下指标:
- 精度指标:Precision、Recall、mAP@50、mAP@50-95
- 损失指标:训练集和验证集的Box/Class/DFL损失
项目目录:
项目目录/
├── plot_results.py # 当前脚本
├── env/ # 存放训练结果的目录
│ ├── results.csv # 第一次训练结果
│ └── results-final.csv # 第二次训练结果
然后修改配置文件路径:
results_files = ['./env/results.csv', # 第一个训练结果文件'./env/results-final.csv' # 第二个训练结果文件
]custom_labels = ['yolov11', # 第一个结果的图例标签'yolov11-ema' # 第二个结果的图例标签
]
- 替换路径:将
./env/
改为你的实际结果文件路径(如runs/train/exp1/results.csv
) - 自定义标签:修改
custom_labels
中的名称,用于区分不同曲线(如"yolov11-baseline")
修改对比指标:
# 示例:添加F1分数对比
metrics = ['metrics/precision(B)', 'metrics/recall(B)', 'metrics/mAP50(B)', 'metrics/F1'
]
labels = ['Precision', 'Recall', 'mAP@50', 'F1 Score'
]
调整图表布局:
plot_comparison(metrics, labels, custom_labels, layout=(3, 2)) # 改为3行2列
保存图表:
plt.savefig('training_comparison.png', dpi=300, bbox_inches='tight')
下面是完整代码:
# -*- coding: utf-8 -*-
import pandas as pd
import matplotlib.pyplot as plt# 训练结果列表
results_files = ['./env/results.csv','./env/results-final.csv'
]# 与results_files顺序对应
custom_labels = ['yolov11','yolov11-ema',
]#
def plot_comparison(metrics, labels, custom_labels, layout=(2, 2)):fig, axes = plt.subplots(layout[0], layout[1], figsize=(15, 10)) # 创建网格布局axes = axes.flatten() # 将子图对象展平,方便迭代for i, (metric_key, metric_label) in enumerate(zip(metrics, labels)):for file_path, custom_label in zip(results_files, custom_labels):df = pd.read_csv(file_path)# 清理列名中的多余空格df.columns = df.columns.str.strip()# 检查 'epoch' 列是否存在if 'epoch' not in df.columns:print(f"'epoch' column not found in {file_path}. Available columns: {df.columns}")continue# 检查目标指标列是否存在if metric_key not in df.columns:print(f"'{metric_key}' column not found in {file_path}. Available columns: {df.columns}")continue# 在对应的子图上绘制线条axes[i].plot(df['epoch'], df[metric_key], label=f'{custom_label}')axes[i].set_title(f' {metric_label}')axes[i].set_xlabel('Epochs')axes[i].set_ylabel(metric_label)axes[i].legend()plt.tight_layout() # 自动调整子图布局,防止重叠plt.show()if __name__ == '__main__':# 精度指标metrics = ['metrics/precision(B)', 'metrics/recall(B)', 'metrics/mAP50(B)', 'metrics/mAP50-95(B)']labels = ['Precision', 'Recall', 'mAP@50', 'mAP@50-95']# 调用通用函数绘制精度对比图plot_comparison(metrics, labels, custom_labels, layout=(2, 2))# 损失指标loss_metrics = ['train/box_loss', 'train/cls_loss', 'train/dfl_loss', 'val/box_loss', 'val/cls_loss', 'val/dfl_loss']loss_labels = ['Train Box Loss', 'Train Class Loss', 'Train DFL Loss', 'Val Box Loss', 'Val Class Loss', 'Val DFL Loss']# 调用通用函数绘制损失对比图plot_comparison(loss_metrics, loss_labels, custom_labels, layout=(2, 3))
相关文章:
YOLOv11模型的常见处理
一.数据准备: 1.数据集格式: 目录结构示例: datasets/├── images/│ ├── train/ # 训练图片│ └── val/ # 验证图片└── labels/├── train/ # 训练标签└── val/ # 验证标签 每张图片对应一个 .txt 标注文件…...
conda 清除 tarballs 减少磁盘占用 、 conda rename 重命名环境、conda create -n qwen --clone 当前环境
🥇 版权: 本文由【墨理学AI】原创首发、各位读者大大、敬请查阅、感谢三连 🎉 声明: 作为全网 AI 领域 干货最多的博主之一,❤️ 不负光阴不负卿 ❤️ 文章目录 conda clean --tarballsconda rename 重命名环境conda create -n qwen --clone …...
无线局域网
1.5G支持中低频和高频频段, 2.网络切片是指从应该网络中选取特定的特性和功能 3.WLAN广义指无线电波,激光,红外线等无线信号代替有线局域网中的部分或者全部传输介质所构成的网络。 4.802.11运行在2.4GHz ISM 频段,采用扩频通信…...
百人会上的蔚小理与「来的刚刚好」的雷军
这就是2025百人会上的蔚小理,努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么呢?站在蔚小理的肩上。 这就是2025百人会上的蔚小理,努力的李斌、宣扬飞行汽车的何小鹏与大讲开源的李想。那么小米汽车的模式是什么…...
现代优雅杂志海报徽标设计手写英文字体安装包 Attomes – Brush Handwritten Font
Attomes 简介 – Brush 手写字体 此字体是一种精致、优雅、流畅的手写字体。它有一个美丽而独特的连字混合字母,因此作者用一个小漩涡嵌入来撰写它,从而形成现代字体,并准备好通过为您的下一个设计项目添加优雅和独特的风格来发表声明。将其…...
Java进阶——静态代理与动态代理
代理模式是一种常用的设计模式,为其他对象提供一种代理以控制对这个对象的访问。代理模式就像是一个中间人,客户端通过代理来间接访问目标对象,可以在不修改目标对象的基础上,对目标对象的功能进行增强或扩展。代理模式主要分为静…...
【多线程】进阶
目录 一、CAS 什么是 CAS CAS 伪代码 CAS 有哪些应用 实现原子类 CAS 是怎么实现的 如何通过 CAS 实现的原子类 CAS 的 ABA 问题 什么是 ABA 问题 ABA 问题引来的 BUG 正常的过程 异常的过程 解决方案 📝相关面试题 二、JUC(java.util.concurrent)的…...
MFC中字符串string类型和CString类型互转方法
文章目录 一、CString 转 std::string1. Unicode项目(_UNICODE 已定义)2. 多字节项目(_MBCS 已定义) 二、std::string 转 CString1. Unicode项目(_UNICODE 已定义)2. 多字节项目(_MBCS 已定义&a…...
工作记录 2017-03-13
工作记录 2017-03-13 序号 工作 相关人员 1 修改邮件上的问题。 开始处理操作日志部分。 测试了C#和MySql的连接。 更新RD服务器。 郝 更新的问题 1、 修改了CMS1500的打印,NDC的内容用了小的字体。 2、在Cliams List中可以查看Job的Notes。 3、Payment Po…...
Linux 配置NFS服务器
1. 开放/nfs/shared目录,供所有用户查阅资料 服务端 (1)安装nfs服务,nfs-utils包中包含rpcbind(rpc守护进程) [rootnode1-server ~]# yum install -y nfs-utils # nfs-utils包中包含rpcbind [rootnode…...
Linux《进程概念(上)》
在之前的Linux学习当中我们已经了解了基本的Linux指令以及基础的开发工具的使用,那么接下来我们就要开始Linux当中一个非常重要的部分的学习——进程,在此进程是我们之后Linux学习的基础,并且通过进程的学习会让我们了解更多的操作系统的相关…...
游戏开发中的贝塞尔曲线:感受丝滑的数学之美
这是一篇vip文章,如果你还不是vip,可以移步https://www.ilikexff.cn/articles/165免费阅读。 介绍 贝塞尔曲线是计算机图形学中最重要的概念之一,以其在表示曲线时的灵活性和精确性而闻名。广泛应用于计算机图形学、动画、路径规划等领域的数学曲线。 贝塞尔曲线的数学原理基…...
Java【多线程】(6)定时器
目录 1.前言 2.正文 2.1库中定时器 2.2手搓定时器 3.小结 1.前言 哈喽大家好呀,今天继续给大家分享Java中定时器的学习,正文包括定时器的三种实现方式,正文如下。 2.正文 在 Java 中,定时器(Timer)…...
Epub转PDF软件Calibre电子书管理软件
Epub转PDF软件:Calibre电子书管理软件 一款好用的电子书管理软件,可快速导入电脑里的电子书并进行管理,支持多种格式,阅读起来非常方便。同时也有电子书格式转换功能。 第一步:添加电子书 将需要转换的电子书添加到…...
使用FastExcel时的单个和批量插入的问题
在我们用excel表进行插入导出的时候,通常使用easyexcel或者FastExcel,而fastexcel是easy的升级版本,今天我们就对使用FastExcel时往数据库插入数据的业务场景做出一个详细的剖析 场景1 现在我们数据库有一张组织表,组织表的字段…...
nginx https配置
一.https配置 HTTPS 协议是由HTTP 加上TLS/SSL 协议构建的可进行加密传输、身份认证的网络协议,主要通过数字证书、加密算法、非对称密钥等技术完成互联网数据传输加密,实现互联网传输安全保护。 1.生成证书 openssl genrsa -des3 -out server.key 20…...
git --- cherry pick
git --- cherry pick cherry pick cherry pick Cherry Pick 是 Git 中的一个操作,它允许你选择某个分支的某次(或多次)提交,并将其应用到当前分支,而不会合并整个分支的所有更改。 cherry pick 的作用 只提取某个特定的…...
虚拟机安装linux系统无法上网的解决方法
在虚拟环境中运行Linux系统时,有时会遇到网络连接问题,特别是在使用虚拟机软件如VMware或VirtualBox时。本文将详细介绍一种针对“虚拟机安装Linux系统无法上网”问题的解决方案,以CentOS 6.5为例,适用于其他基于NAT模式的虚拟机环…...
北大人工智能研究院朱松纯:“中国的AI叙事” 存在认知偏差
3月29日,在2025中关村论坛通用人工智能论坛上,北京通用人工智能学院院长,北京大学人工智能研究院、智能学院院长朱松纯表示,目前,行业对AI的讨论几乎被大模型能力所占据,而基础学科、原始创新与智能本质的研…...
Java高频面试之集合-20
hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝🐶 面试官:讲讲 HashSet 的底层实现? HashSet 是 Java 集合框架中用于存储唯一元素的高效数据结构,其底层实…...
使用Qemu模拟32位ARM系统
一、环境 实验环境如下: 主机:x86_64 操作系统:Ubuntu 20.04.6 LTS Qemu版本:QEMU emulator version 4.2.1 Linux内核版本:linux-4.4.240 Busybox版本:busybox-1.35.0二、前置准备 下载 linux-4.4.240 源…...
【初阶数据结构】栈
文章目录 一、概念与结构 二、栈的实现 栈的定义 1.初始化 2.入栈 3.判断栈是否为空 4.出栈 5.取栈顶元素 6.获取栈中有效元素个数 2.销毁 三、完整码源 总结 一、概念与结构 栈: 一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据…...
docker-compose部署prometheus+grafana+node_exporter
目录 docker-compose文件 配置文件 文件层级关系,docker-compose和配置文件位于同级目录 node_exporter页面json文件 涉及离线包 一.docker-compose文件 [rootsulibao prometheus]# cat docker-compose.yml version: 3services:prometheus:image: registry.c…...
maya调整全局关节显示大小
请按以下步骤操作: 在 Maya 主菜单栏中,找到 Display (显示) 菜单。 在 Display 菜单下,找到 Animation (动画) 子菜单。 在 Animation 子菜单中,点击 Joint Size... (关节大小...)。 这时会弹出一个小窗口或者直接在界面上出现…...
“屏幕“的实现_程序中如何将数据映射到硬件_C++实战
前言 程序里的数据,最后都需要将数据对象写入硬件.C/C最大的优势体现也是在这里,他既是高级语言方便被程序员使用,又能和硬件沟通. 引入 以"屏幕"的实现,总结数据映射到硬件的代码写法 分析 软件部分 1.屏幕是数据对象---一切都是数据,一切都是对象;数据有类型,屏…...
R --- Error in library(***) : there is no package called ‘***’ (服务器非root用户)
步骤 步骤一:在自己目录下创建R包安装路径步骤二:配置用户本地的R库路径步骤三:安装缺失的包(在终端)步骤四:验证安装 步骤一:在自己目录下创建R包安装路径 mkdir -p ~/R_libs步骤二࿱…...
Go中的逃逸分析
什么是逃逸? 逃逸是指一个变量本来应该分配在栈(stack)上,但由于某些原因,最终被分配到了堆(heap)上。 类比: 栈就像一个临时的快餐盒,用来存放短期使用的数据。堆就像…...
解决 Android AGP 最新版本中 BuildConfig 报错问题
在最新版本的 Android Gradle Plugin (AGP) 中,Google 对构建系统做了不少改动,可能会导致一些与 BuildConfig 相关的问题。以下是常见问题及解决方案: 常见问题及修复方法 1. BuildConfig 类完全缺失 原因:AGP 8.0 默认不再为库模…...
Rollup系列之安装和入门
Rollup Rollup.js的主要用途是将小的代码片段编译成更大、更复杂的代码,例如库或应用程序。它特别适用于将ES模块编译成不同的模块形式,如AMD、CommonJS、UMD等,以便在不同的环境中使用。 Rollup的应用场景与好处: 插件或…...
Kafka 4.0 发布:KRaft 替代 Zookeeper、新一代重平衡协议、点对点消息模型、移除旧协议 API
KRaft 全面替代 ZooKeeper Apache Kafka 4.0 是一个重要的里程碑,标志着第一个完全无需 Apache ZooKeeper 运行的主要版本。 通过默认运行在 KRaft 模式下,Kafka 简化了部署和管理,消除了维护单独 ZooKeeper 集群的复杂性。 这一变化显著降…...
MQTT之重复消息(6、在项目中遇到的问题)
项目背景: 在 Spring Boot MQTT 5.0 环境中,RTU设备向SpringBoot平台发送心跳数据、业务监控数据。同时SpringBoot平台可以向RTU设备下发指令,RTU在执行完指令之后向平台发送响应数据。 问题一、SpingBoot平台发送指令给RTU设备,RTU设备能够…...
8、linux c 信号机制
一、信号概述 1. 信号概念 信号是一种在软件层次上对中断机制的模拟,是一种异步通信方式。信号的产生和处理都由操作系统内核完成,用于在进程之间传递信息或通知某些事件的发生。 2. 信号的产生 信号可以通过以下方式产生: 按键产生&…...
Set,Map,WakeSet,WakeMap
简介 Set、Map、WeakMap 和 WeakSet 是 ES6 引入的高级数据结构,它们的底层实现和特性与传统的对象和数组有显著差异 强弱引用了解: link Set Set对象 是一种用于存储 唯一值 的可迭代集合,可存储任意类型的值(原始值、对象引用等&…...
NSSCTF(MISC)—[HITCTF 2021]PNG
相应的做题地址:https://www.nssctf.cn/problem/819 import zlib from Crypto.Cipher import AES import base64 def decode(data, key, iv): cipher AES.new(key, AES.MODE_CBC, iv) decryptByts base64.b64decode(data) msg cipher.decrypt(decryptByts) msgs…...
只出现一次的数字
这个题目动了点脑筋,由于它们时无序的,所以我们如果去找的话比较费劲,可能要循环嵌套再嵌套,所以我们先利用库中自带的sort函数进行排序,把这些数从小到大以此排列,然后我们进行判断哪个数出现了一次即可。…...
【编程中的框架】
编码中常用的框架及其使用方法和好处 框架(Framework)是一种为解决特定问题而设计的软件架构,它提供了一组预定义的组件、模式和工具,帮助开发者更高效地构建应用程序。框架通常不仅仅是方法库,它们提供了一种结构化的…...
Python-常用关键字
基础值 1. False - 意义:布尔类型假值(首字母大写) - 用法示例: if condition is False: print("条件为假") 2. True - 意义:布尔类型真值(首字母大写) - 用法示例&…...
【计算机网络】DHCP工作原理
DHCP(动态主机配置协议) Dynamic Host Configuration Protocol 基于UDP协议传输 DHCP分配IP地址的过程 (1)DHCP DISCOVER客户机请求 IP 地址: 当一个 DHCP 客户机启动时,客户机还没有 IP 地址,所以客户机要通过 DHC…...
python 原型链污染学习
复现SU的时候遇到一道python原型链污染的题,借此机会学一下参考: 【原型链污染】Python与Jshttps://blog.abdulrah33m.com/prototype-pollution-in-python/pydash原型链污染 文章目录 基础知识对父类的污染命令执行对子类的污染pydash原型链污染打污染的…...
量子计算:未来计算技术的革命性突破
在当今科技飞速发展的时代,量子计算正逐渐从理论走向实践,成为计算技术领域最具潜力的革命性突破之一。与传统计算机基于二进制的计算方式不同,量子计算利用量子比特(qubit)的叠加和纠缠特性,能够在处理复杂…...
Maven:Java项目构建与依赖管理工具
Maven 是什么 Maven 将项目开发过程和管理过程抽象成一个项目对象模型(POM),本质上是一个项目管理工具。Maven 主要用于Java项目的依赖管理、编译、测试、打包和部署等操作。 Maven的核心设计围绕标准化和自动化,通过一系列约定和…...
内积相似系数——内积度量相似系数
内积与相似系数 内积(Inner Product) 内积(Inner Product),也称为点积(Dot Product)或标量积,两个向量点积的结果是一个标量(通常是实数或复数)。 内积&…...
问题:md文档转换word,html,图片,excel,csv
文章目录 问题:md文档转换word,html,图片,excel,csv,ppt**主要职责****技能要求****发展方向****学习建议****薪资水平** 方案一:AI Markdown内容转换工具打开网站md文档转换wordmd文档转换pdfm…...
GET 和 POST 有什么区别
GET 和 POST 是 HTTP 协议中两种最常见的请求方法,它们在用途、安全性、数据传递方式等方面有显著的区别。以下是它们的主要区别: 1. 用途 • GET: • 用于从服务器获取资源(数据)。 • 是一种无状态的操作…...
AI Agent 人工智能相关公开比赛汇总
参与 AI 相关比赛是提升技术能力、接触前沿算法、积累项目经验的绝佳方式。以下是全球知名的比赛,以及适合不同水平选手的竞赛分类。 1. 全球知名 AI & 计算机竞赛 (1) Kaggle 竞赛(Kaggle Competitions) 简介:全球最知名的…...
Java 多线程编程之 Object.wait 方法(工作原理、高级特性、notify 方法与 notifyAll 方法)
一、wait 方法 1、基本介绍 wait 方法是 Java 中每个对象都拥有的方法,它继承自 Object 类 wait 方法使当前线程进入等待状态,直到其他线程调用该对象的 notify 方法或 notifyAll 方法 wait 方法必须在同步代码块中使用,否则抛出 Interrup…...
python下载m3u8格式视频
一、安装 m3u8库 pip install requests pip install requests m3u8 二、编码实现 import os import re import requests import subprocess# 下载ts文件 def down_ts_file(base_url, m3u8_url, download_dir):# 从m3u8文件中获取所有ts的分片名称信息response requests.get…...
3.30 代码随想录第三十天打卡
准备:01背包理论基础(二维) 1.有n个物品每个物品只有一个 2.完全背包是有n个物品每个物品有无限多个 3.多重背包是有n个物品每种物品个数各不相同 (1)题目描述: (2)解题思路; 1…...
01 相机标定与相机模型介绍
学完本文,您将了解不同相机模型分类、内参意义,及对应的应用代码模型 标定的意义 建模三维世界点投影到二维图像平面的过程。标定输出的是相机模型。 相机模型 相机模型可以解理解为投影模型 +...
鸿蒙学习手册(HarmonyOSNext_API16)_应用开发UI设计:相对布局
概述 RelativeContainer 就像个「智能拼图板」,帮你把界面组件像拼图一样自由组合,不用一层套一层地堆叠。每个组件可以直接「贴」到其他组件旁边或容器边缘,省去多层嵌套的麻烦,让复杂界面更高效。 举个接地气的例子 dz…...