YOLOv10-1.1部分代码阅读笔记-patches.py
patches.py
ultralytics\utils\patches.py
目录
patches.py
1.所需的库和模块
2.def imread(filename: str, flags: int = cv2.IMREAD_COLOR):
3.def imwrite(filename: str, img: np.ndarray, params=None):
4.def imshow(winname: str, mat: np.ndarray):
5.def torch_save(*args, use_dill=True, **kwargs):
1.所需的库和模块
# Ultralytics YOLO 🚀, AGPL-3.0 license
"""Monkey patches to update/extend functionality of existing functions."""import time
from pathlib import Pathimport cv2
import numpy as np
import torch# OpenCV Multilanguage-friendly functions OpenCV 多语言友好函数------------------------------------------------------------------------------
# 将 cv2.imshow 函数赋值给 _imshow 变量。这样做的目的是创建一个对 cv2.imshow 函数的备份引用。在后续的代码中,如果对 cv2.imshow 进行了修改或重写,通过 _imshow 仍然可以访问到原始的 cv2.imshow 函数,从而避免递归错误或其他潜在的问题。
_imshow = cv2.imshow # copy to avoid recursion errors 复制以避免递归错误。
2.def imread(filename: str, flags: int = cv2.IMREAD_COLOR):
# 这段代码定义了一个名为 imread 的函数,用于读取图像文件。
# 定义函数 imread ,它接受两个参数。
# 1.filename :字符串类型,表示要读取的图像文件的路径。
# 2.flags :整数类型,默认值为 cv2.IMREAD_COLOR ,用于指定读取图像的方式,如颜色模式等。
def imread(filename: str, flags: int = cv2.IMREAD_COLOR):# 从文件中读取图像。"""Read an image from a file.Args:filename (str): Path to the file to read.flags (int, optional): Flag that can take values of cv2.IMREAD_*. Defaults to cv2.IMREAD_COLOR.Returns:(np.ndarray): The read image."""# np.fromfile(file, dtype=float, count=-1, sep='', offset=0)# np.fromfile 是 NumPy 库中的一个函数,它用于从二进制文件中读取数据,并将其作为一维数组返回。这个函数特别适合于读取那些以二进制形式存储的数值数据,例如图像文件。# 参数 :# file :文件路径或者一个类似文件的对象。可以是字符串路径或者一个具有 read 方法的对象。# dtype :数组元素的数据类型,默认为 float 。也可以指定为其他类型,如 np.int32 、 np.uint8 等。# count :要读取的元素数量。如果设置为 -1 (默认值),则读取整个文件。# sep :仅当文件是文本文件时使用,指定行与行之间的分隔符。# offset :从文件开头开始读取之前要跳过的字节数。# 返回值 :# 返回一个一维 NumPy 数组,包含从文件中读取的数据。# 注意事项 :# np.fromfile 默认以二进制模式读取文件,因此不需要以 'rb' 模式打开文件。# 如果文件中的数据类型不是 float ,需要正确指定 dtype 参数,以确保数据被正确解释。# 如果文件很大,读取整个文件可能会消耗大量内存。在这种情况下,可以考虑分块读取文件。# np.fromfile 不适用于文本文件。对于文本文件,可以使用 np.loadtxt 或 np.genfromtxt 等函数。# cv2.imdecode(buf, flags)# cv2.imdecode() 是 OpenCV 库中的一个函数,它用于从图像内存缓冲区中解码图像数据。这个函数通常与 cv2.imencode() 搭配使用,用于在内存中处理图像数据,而不是直接读写文件。# 参数 :# buf :一个包含图像数据的内存缓冲区,通常是一个 NumPy 数组。# flags :一个标志,指定解码图像的模式,例如 cv2.IMREAD_COLOR 、 cv2.IMREAD_GRAYSCALE 或 cv2.IMREAD_UNCHANGED 。# 返回值 :# 返回一个包含解码图像的 NumPy 数组,如果解码失败,则返回 None 。# 注意事项 :# cv2.imdecode() 接受的 buf 参数应该是一个一维 NumPy 数组,其中包含了图像的原始字节数据。# 函数的行为取决于 flags 参数,它决定了图像的解码方式和输出格式。例如, cv2.IMREAD_COLOR 表示以彩色模式读取图像, cv2.IMREAD_GRAYSCALE 表示以灰度模式读取图像。# 如果 buf 参数为空或者图像数据损坏, cv2.imdecode() 将返回 None 。# cv2.imdecode() 是处理图像数据流或从网络接收图像时的有用工具,因为它允许在不直接操作文件的情况下对图像进行解码。# 函数的返回语句。# 首先使用 np.fromfile(filename, np.uint8) 读取文件内容,将其转换为 np.uint8 类型的数组,这是因为图像文件通常是以字节形式存储的。# 然后使用 cv2.imdecode() 函数将这个数组解码为图像, flags 参数决定了解码的方式,如是否读取为彩色图像、灰度图像等。最后将解码得到的图像作为函数的返回值。return cv2.imdecode(np.fromfile(filename, np.uint8), flags)
# 这段代码通过自定义 imread 函数,利用 numpy 和 opencv 库,实现了读取图像文件的功能。它能够根据指定的路径和读取方式,将图像文件加载为可以进行后续处理的图像数据。相比直接使用 cv2.imread() ,这种方式可以更好地处理中文路径等特殊情况。
3.def imwrite(filename: str, img: np.ndarray, params=None):
# 这段代码定义了一个名为 imwrite 的函数,用于将图像数据写入到文件中。
# 定义函数 imwrite ,它接收三个参数。
# 1.filename :字符串类型,表示要写入的文件名。
# 2.img : np.ndarray 类型,即图像数据。
# 3.params :可选参数,用于指定图像编码的参数,默认为 None 。
def imwrite(filename: str, img: np.ndarray, params=None):# 将图像写入文件。"""Write an image to a file.Args:filename (str): Path to the file to write.img (np.ndarray): Image to write.params (list of ints, optional): Additional parameters. See OpenCV documentation.Returns:(bool): True if the file was written, False otherwise."""# 开始一个 try 块,用于捕获可能出现的异常。try:# cv2.imencode(ext, img, params=None)# cv2.imencode() 是 OpenCV 库中的一个函数,用于将图像编码为特定格式的内存缓冲区。这个函数常用于准备图像数据以便存储或传输。# 参数 :# ext :一个字符串,指定图像的文件扩展名,例如 .jpg 、 .png 等。这个扩展名决定了编码的格式。# img :要编码的图像,必须是一个有效的图像矩阵。# params :一个元组或列表,包含特定编码格式的参数。例如,对于 JPEG 图像,可以包含压缩质量( [cv2.IMWRITE_JPEG_QUALITY, 90] )。# 返回值 :# 返回一个元组,其中包含两个元素 :# 一个布尔值,表示编码是否成功。# 编码后的图像数据,如果成功,它是一个内存缓冲区(即一个字节数组);如果失败,则为 None 。# 注意事项 :# cv2.imencode() 需要一个有效的图像矩阵作为输入。如果图像未正确加载或为空,编码将失败。# 编码参数 params 是可选的,但对于一些格式(如 JPEG)来说,可能需要提供额外的参数来控制编码过程。# 编码后的图像数据是一个内存缓冲区,可以直接写入文件或通过网络发送,而不需要先保存到磁盘。# cv2.imencode() 返回的布尔值 ret 可以用来检查编码操作是否成功。如果失败,应进行错误处理。# np.ndarray.tofile(fname, sep="", format="%s")# np.ndarray.tofile() 这是一个 NumPy 数组的方法,用于将数组保存到二进制文件中。# 参数 :# fname :要写入的文件名。# sep :(可选)用于分隔数组元素的字符串,默认为空字符串。# format :(可选)用于格式化每个元素的字符串,默认为 "%s" 。# 功能 :# tofile() 方法将 NumPy 数组的内容写入到指定的文件中。该方法按照数组在内存中的布局(通常是行优先顺序)来写入数据。文件被写入的数据是二进制格式的,因此只能使用相同的数据类型和数组形状来读取。# 返回值 :tofile() 方法不返回任何值。# 注意事项 :# tofile() 方法只能用于保存二进制数据,因此读取文件时也必须使用相同的数据类型和形状。# 如果需要保存文本格式的数组,可以使用 numpy.savetxt() 函数。# 文件被写入的数据不包含任何形状或类型的元数据,因此读取时需要确保使用正确的形状和数据类型。# 使用 cv2.imencode 函数对图像进行编码。# Path(filename).suffix 获取文件名的扩展名,用于确定编码格式; img 是待编码的图像数据; params 是编码参数。# cv2.imencode 返回一个元组,其中第二个元素是编码后的图像数据,通过 [1] 获取它,然后调用 tofile 方法将其写入到 filename 指定的文件中。cv2.imencode(Path(filename).suffix, img, params)[1].tofile(filename)# 如果图像写入成功,返回 True 。return True# 捕获 try 块中可能出现的任何异常。except Exception:# 如果出现异常,说明图像写入失败,返回 False 。return False
# 这段代码通过 cv2.imencode 对图像进行编码,并将编码后的图像数据写入到指定文件中。如果过程中出现任何异常,如文件写入错误、图像编码失败等,函数会捕获异常并返回 False ,否则返回 True 表示写入成功。它提供了一种简单的方式来将图像数据保存到文件,同时通过异常处理机制保证了函数的健壮性。
4.def imshow(winname: str, mat: np.ndarray):
# 这段代码定义了一个名为 imshow 的函数,用于显示图像。
# 定义函数 imshow ,它接收两个参数。
# 1.winname :字符串类型,表示显示图像的窗口名称。
# 2.mat : np.ndarray 类型,即要显示的图像数据。
def imshow(winname: str, mat: np.ndarray):# 在指定窗口中显示图像。"""Displays an image in the specified window.Args:winname (str): Name of the window.mat (np.ndarray): Image to be shown."""# 调用 _imshow 函数来实际显示图像。# 首先,对 winname 进行编码和解码操作, winname.encode("unicode_escape") 将窗口名称字符串编码为Unicode转义序列,然后 .decode() 将其解码回普通字符串。这样做的目的是处理窗口名称中可能存在的特殊字符,确保窗口名称在显示时不会出现乱码或其他问题。# 接着,将处理后的窗口名称和图像数据 mat 传递给 _imshow 函数,由 _imshow 函数负责创建窗口并显示图像。_imshow(winname.encode("unicode_escape").decode(), mat)
# 这段代码通过定义 imshow 函数来实现图像的显示功能。它对窗口名称进行了编码和解码处理,以确保窗口名称的正确性,然后调用 _imshow 函数来创建窗口并显示图像数据。这种设计模式使得图像显示功能更加灵活和健壮,同时通过编码解码操作提高了对窗口名称的兼容性。
5.def torch_save(*args, use_dill=True, **kwargs):
# PyTorch functions ----------------------------------------------------------------------------------------------------
# 将 torch.save 函数赋值给 _torch_save 变量。这样做的目的是创建一个对 torch.save 函数的备份引用。在后续的代码中,如果对 torch.save 进行了修改或重写,通过 _torch_save 仍然可以访问到原始的 torch.save 函数,从而避免递归错误或其他潜在的问题。
_torch_save = torch.save # copy to avoid recursion errors# 这段代码定义了一个名为 torch_save 的函数,用于保存 PyTorch 模型或数据,并提供了重试机制以处理可能的保存错误。
# 定义函数 torch_save ,它接收任意数量的位置参数 *args 和关键字参数 **kwargs 。此外,还有一个布尔参数 use_dill ,默认值为 True ,用于指定是否使用 dill 库来代替 pickle 库进行序列化。
def torch_save(*args, use_dill=True, **kwargs):# 可选择使用 dill 序列化 lambda 函数(pickle 不支持),通过 3 次重试和指数对峙来增加稳健性,以防保存失败。"""Optionally use dill to serialize lambda functions where pickle does not, adding robustness with 3 retries andexponential standoff in case of save failure.Args:*args (tuple): Positional arguments to pass to torch.save.use_dill (bool): Whether to try using dill for serialization if available. Defaults to True.**kwargs (any): Keyword arguments to pass to torch.save."""# 开始一个 try 块,用于捕获可能出现的异常。try:# 断言 use_dill 为 True 。如果 use_dill 为 False ,则会触发 AssertionError 。assert use_dill# 如果 use_dill 为 True ,则导入 dill 库,并将其别名为 pickle 。 dill 库比 pickle 库更强大,可以序列化更多类型的对象。import dill as pickle# 捕获 AssertionError 或 ImportError 。如果 use_dill 为 False 或者 dill 库未安装,则会执行此块。except (AssertionError, ImportError):# 如果 use_dill 为 False 或者 dill 库未安装,则导入 pickle 库。import pickle# 检查关键字参数 kwargs 中是否包含 pickle_module 。如果不存在,则设置 pickle_module 为 pickle 。if "pickle_module" not in kwargs:# 将 pickle_module 设置为 pickle ,无论是 dill 还是 pickle 。kwargs["pickle_module"] = pickle# 开始一个循环,最多尝试 4 次(3 次重试)。for i in range(4): # 3 retries# 开始一个 try 块,用于捕获可能出现的异常。try:# 调用 _torch_save 函数,传入所有位置参数 *args 和关键字参数 **kwargs 。如果保存成功,返回 True 。return _torch_save(*args, **kwargs)# 捕获 RuntimeError 异常。这通常是因为设备正在刷新或被杀毒软件扫描,导致保存失败。except RuntimeError as e: # unable to save, possibly waiting for device to flush or antivirus scan# 如果这是第 4 次尝试(即 i == 3 ),则重新抛出异常 e 。if i == 3:raise e# time.sleep(seconds)# time.sleep() 是 Python 标准库 time 模块中的一个函数,用于让当前线程暂停执行指定的秒数。# 参数 :# seconds : 一个浮点数或整数,表示线程暂停的秒数。# 返回值 :time.sleep() 函数没有返回值,它只是简单地让调用它的线程休眠。# 注意事项 :# time.sleep() 函数接受的参数是秒数,可以是整数或浮点数,表示精确的暂停时间。# 在多线程程序中, time.sleep() 只暂停当前线程,不影响程序中的其他线程。# 在某些操作系统上, time.sleep() 的实现可能无法精确到微秒级别,实际的暂停时间可能会比指定的时间长一点点。# 在需要精确控制时间的场合,可能需要结合其他同步机制,如 threading 模块中的 Event 或 Condition 对象。# 如果保存失败,等待一段时间再重试。等待时间采用指数退避策略,分别为 0.5 秒、1.0 秒、2.0 秒。time.sleep((2**i) / 2) # exponential standoff: 0.5s, 1.0s, 2.0s
# 这段代码通过定义 torch_save 函数,提供了一种健壮的方式来保存 PyTorch 模型或数据。它支持使用 dill 库来序列化更多类型的对象,并且在保存过程中提供了重试机制,以处理可能的保存错误。通过指数退避策略,每次重试的等待时间逐渐增加,提高了保存操作的成功率。这种设计模式使得函数在面对不稳定环境(如设备刷新或杀毒软件扫描)时更加健壮。
相关文章:
YOLOv10-1.1部分代码阅读笔记-patches.py
patches.py ultralytics\utils\patches.py 目录 patches.py 1.所需的库和模块 2.def imread(filename: str, flags: int cv2.IMREAD_COLOR): 3.def imwrite(filename: str, img: np.ndarray, paramsNone): 4.def imshow(winname: str, mat: np.ndarray): 5.def tor…...
撤回最近的 git commit
在 Git 中,如果你想撤回最近的 git commit,可以根据不同的需求选择不同的操作。以下是几种常见的撤回方式: 1. 撤回最后一次 commit,但保留修改(soft reset) 如果你想撤销 git commit,但保留修…...
基于DFT与IIR-FIR滤波器的音频分析与噪声处理
基于DFT与IIR-FIR滤波器的音频分析与噪声处理 【完整源码文档报告】 【需要可随时联系博主,常在线能秒回!】 系统功能与实现介绍 功能与实现 音频处理系统界面搭建:利用MATLAB的GUI工具,构建了音频分析界面,包括文件导入、录…...
MySQL主从部署(保姆版)
一、mysql 同步复制有关概述 一般数据库都是读取压力大于写数据压力,主从复制即为了实现数据库的负载均衡和读写分离。通过将Mysql的某一台主机的数据复制到其它主机(slaves)上,主服务器只负责写,而从服务器只负责读。…...
Golang笔记——协程同步
大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的协程同步的实现和应用场景。 文章目录 协程同步是什么?为什么需要协程同步?常见的协程同步机制互斥锁࿰…...
1.14学习
misc buuctf-大白 由提示可以知道这个应该是修改图片的宽高了,下载附件后得到了图片用随波逐流直接修改图片的宽高输出即可 buuctf-乌镇峰会种图 点击下载,出现了一个网页为图片将图片另存为,用随波逐流得到的信息解不了,再试…...
2025 年 JavaScript 入门教程
2025 年 JavaScript 入门教程 在当今数字化时代,JavaScript 作为一门广泛应用于 Web 开发的编程语言,其重要性不言而喻。无论是前端页面的交互实现,还是后端服务器的逻辑处理,JavaScript 都发挥着关键作用。本教程旨在帮助初学者…...
paddle——站在巨人肩膀上及背刺二三事
飞桨AI Studio - 人工智能学习与实训社区 飞桨PaddlePaddle-源于产业实践的开源深度学习平台 先抛结论,对于想要快速了解某一领域有哪些比较适合落地的算法的从业人员来说,是一个很好的参考系统。从中可以知道从哪些模型里选型、如何轻量化、如何加…...
nvim , neovim , Lua 语法, text object
说明 : 了解一下 nvim 中的基本的 文本的类型。 基本类型有几种, 1 word , sentence , paragragh 2 (), {}, ,"", 3 就是 html 中的 tag 标签。 然后就是选中的类型。 1 i : 待变 inner 2 a: 代表around , 基本的动作有 &…...
6.2 MySQL时间和日期函数
以前我们就用过now()函数来获得系统时间,用datediff()函数来计算日期相差的天数。我们在计算工龄的时候,让两个日期相减。那么其中的这个now函数返回的就是当前的系统日期和时间。 1. 获取系统时间函数 now()函数,返回的这个日期和时间的格…...
批量识别图片型PDF指定区域内容识别保存表格+PDF批量改名:技术难题与项目实战总结
相关项目实战: 一、引言 在当今数字化办公环境中,批量处理PDF文件中的表格数据并进行改名是一项常见但具有挑战性的任务。无论是从大量的财务报销凭证、学术研究报告还是项目文档中提取表格信息,都可能遇到各种各样的技术难题。 二、批量提…...
【MySQL】索引(一)
索引 一、磁盘1、物理结构2、示意图3、定位扇区4、读写操作的基本方式 二、页1、介绍2、示例3、作用与结构4、类型(1)数据页(2)其他 5、组织与管理6、性能优化7、示意图(B树) 三、索引1、作用2、注意事项 四…...
缩放 对内外参的影响
当你对图像进行同比例缩小时,图像的内参需要相应地变化,但外参通常保持不变。 相机内参 相机内参(内参矩阵)描述了相机的固有属性,包括焦距和主点(光轴与图像平面的交点)的坐标。 当你对图像…...
excel设置好的可选择列数据后,如何快速输入到单元格中?
当设置好列的【数据】-【数据有效性】-【序列】后,在单元格中输入可选择数据的开头,就会提示出对应的可选择数据,然后,按一下键盘上的【↓】键,再按回车,即可快速输入到单元格中。...
设计一个流程来生成测试模型安全性的问题以及验证模型是否安全
要使用 Ollama 运行 llama3.3:70b 模型,并设计一个流程来生成测试模型安全性的问题以及验证模型是否安全,可以按照以下步骤进行设计和实现。整个过程包括环境配置、设计安全测试提示词、执行测试以及分析结果。以下是详细的步骤和指导: 1. 环…...
vue3学习日记5 - 项目起步
最近发现职场前端用的框架大多为vue,所以最近也跟着黑马程序员vue3的课程进行学习,以下是我的学习记录 视频网址: Day2-11.项目起步-静态资源引入和ErrorLen安装_哔哩哔哩_bilibili 学习日记: vue3学习日记1 - 环境搭建-CSDN博…...
ESP32,uart安装驱动uart_driver_install函数剖析,以及intr_alloc_flags 参数的意义
在 uart_driver_install 函数中,参数 RX_BUF_SIZE * 2 指定了接收缓冲区(RX buffer)的大小。这个参数对于 UART 驱动程序来说非常重要,因为它决定了可以存储多少接收到的数据,直到应用程序读取它们为止。下面是对该函数…...
android源码编译后,为什么emulator一直黑屏或者停止android界面
一、前言 最近编译了android12的源码,但是编译完成之后,emulator命令一直卡在android界面上,不会进入系统。经过我多方面的研究,终于找到解决方案。记录下来,希望对遇到这个问题的朋友有所帮助。 二、解决方案 网上…...
ubuntu22.04降级安装CUDA11.3
环境:主机x64的ubuntu22.04,原有CUDA12.1,但是现在需要CUDA11.3,本篇文章介绍步骤。 一、下载CUDA11.3的run文件 下载网址:https://developer.nvidia.com/cuda-11-3-1-download-archive?target_osLinux&target_…...
hive知识体系
hive知识体系 hive知识体系 链接: 1Hive概览 链接: 2Hive表类型 链接: 3Hive数据抽样 链接: 4Hive计算引擎 链接: 5Hive存储与压缩 链接: 6Hive Sql 大全 链接: 6Hive Sql 大全-Hive 函数 链接: 6Hive Sql 大全-窗口函数 链接: 7Hive执行计划 链接: 8Hive SQL底层执行原理 链接…...
【ASP.NET学习】Web Forms创建Web应用
文章目录 什么是 Web Forms?ASP.NET Web Forms - HTML 页面用 ASP.NET 编写的 Hello RUNOOB.COM它是如何工作的?经典 ASP ASP.NET Web Forms - 服务器控件经典 ASP 的局限性ASP.NET - 服务器控件ASP.NET - HTML 服务器控件ASP.NET - Web 服务器控件ASP.N…...
【Qt】QThread总结
目录 成员函数创建方式方式一方式二方式三注意 example总结参考文章 成员函数 创建方式 方式一 QThread 静态成员create auto thd QThread::create([]{});方式二 继承QThread类,重写run run函数它作为线程的入口,也就是线程从run()开始执行&#…...
常见的安全测试漏洞详解
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、SQL注入攻击 SQL 注入攻击主要是由于程序员在开发过程中没有对客户端所传输到服务器端的参数进行严格的安全检查,同时 SQL 语句的执行引用了该参…...
代理模式和适配器模式有什么区别
代理模式(Proxy Pattern)和适配器模式(Adapter Pattern)都是结构型设计模式,它们有不同的应用场景和目标,虽然在某些方面看起来相似,但它们的意图和实现方式有显著的区别。 1. 代理模式&#x…...
机器学习头歌(第三部分-强化学习)
一、强化学习及其关键元素 二、强化学习的分类 三、任务与奖赏 import numpy as np# 迷宫定义 maze np.array([[0, 0, 0, 0, 0],[0, -1, -1, 0, 0],[0, 0, 0, -1, 0],[-1, -1, 0, -1, 0],[0, 0, 0, -1, 1] ])# 定义强化学习的参数 gamma 0.8 # 折扣因子 alpha 0.5 # 学习率…...
【Hive】新增字段(column)后,旧分区无法更新数据问题
TOC 【一】问题描述 Hive修改数据表结构的需求,比如:增加一个新字段。 如果使用如下语句新增列,可以成功添加列col1。但如果数据表tb已经有旧的分区(例如:dt20190101),则该旧分区中的col1将为…...
智能化的城市管理解决方案,智慧城管执法系统源码,微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术
智慧城管执法系统是一种高度信息化、智能化的城市管理解决方案,它利用现代信息技术,如微服务架构、Java编程语言、Spring Boot框架、Vue.js前端技术、Element UI组件库、UniApp跨平台开发工具以及MySQL数据库等,构建了一个综合性的执法管理平…...
【区间DP】【hard】力扣1312. 让字符串成为回文串的最少插入次数
加粗样式给你一个字符串 s ,每一次操作你都可以在字符串的任意位置插入任意字符。 请你返回让 s 成为回文串的 最少操作次数 。 「回文串」是正读和反读都相同的字符串。 示例 1: 输入:s “zzazz” 输出:0 解释:字…...
android刷机
android ota和img包下载地址: https://developers.google.com/android/images?hlzh-cn android启动过程 线刷 格式:ota格式 模式:recovery 优点:方便、简单,刷机方法通用,不会破坏手机底层数据࿰…...
web-前端小实验8
实现以上图片中的内容 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"wid…...
C++实现设计模式---单例模式 (Singleton)
单例模式 (Singleton) 概念 单例模式 确保一个类在整个程序生命周期中只有一个实例,并提供一个全局访问点。 它是一种创建型设计模式,广泛用于需要共享资源的场景。 使用场景 配置管理器:程序中需要一个全局的配置对象。日志系统ÿ…...
【大数据】机器学习-----线性模型
一、线性模型基本形式 线性模型旨在通过线性组合输入特征来预测输出。其一般形式为: 其中: x ( x 1 , x 2 , ⋯ , x d ) \mathbf{x}(x_1,x_2,\cdots,x_d) x(x1,x2,⋯,xd) 是输入特征向量,包含 d d d 个特征。 w ( w 1 , w 2 , ⋯ ,…...
C#类型转换
C#是静态类型的语言,变量一旦声明就无法重新声明或者存储其他类型的数据,除非进行类型转换。本章的主要任务就是学习类型转换的知识。类型转换有显式的,也有隐式的。所谓显式,就是我们必须明确地告知编译器,我们要把变…...
OpenCV相机标定与3D重建(55)通用解决 PnP 问题函数solvePnPGeneric()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据3D-2D点对应关系找到物体的姿态。 cv::solvePnPGeneric 是 OpenCV 中一个更为通用的函数,用于解决 PnP 问题。它能够返回多个可能…...
NVIDIA CUDA Linux 官方安装指南
本文翻译自:https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html#post-installation-actions NVIDIA CUDALinux安装指南 CUDA工具包的Linux安装说明。 文章目录 1.导言1.1.系统要求1.2.操作系统支持政策1.3.主机编译器支持政策1.3.1.支持的C方言…...
C++中的STL
STL(标准模板库)在广义上分为:容器,算法,迭代器 容器和算法之间通过迭代器进行无缝衔接 STL大体上分为六大组件:分别为容器,算法,迭代器,仿函数,适配器,空间…...
前端进程和线程及介绍
前端开发中经常涉及到进程和线程的概念,特别是在浏览器中。理解这两个概念对于理解浏览器的工作机制和前端性能优化非常重要。以下是详细介绍: 1. 什么是进程和线程? 进程: 是操作系统分配资源的基本单位。一个程序启动后…...
本地用docker装mysql
目录 拉取镜像查看镜像 启动容器查看运行中的容器连接到 MySQL 容器其他一些操作 装WorkBench链接mysql——————————————允许远程登录MySql 拉取镜像 docker pull mysql查看镜像 docker image lsREPOSITORY TAG IMAGE ID CREATED SIZE mysq…...
设计模式 行为型 责任链模式(Chain of Responsibility Pattern)与 常见技术框架应用 解析
责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许将请求沿着处理者链进行发送。每个处理者对象都有机会处理该请求,直到某个处理者决定处理该请求为止。这种模式的主要目的是避免请求的发送者和接收者之间…...
Apache Spark中与数据分区相关的配置和运行参数
Apache Spark中与数据分区相关的配置和运行参数涉及多个方面,包括动态分区设置、分区数设置、Executor与并行度配置等。合理配置这些参数可以显著提高Spark作业的执行效率和资源利用率。在实际应用中,建议根据业务需求和计算集群的特性进行相应的调整和测…...
“深入浅出”系列之设计模式篇:(0)什么是设计模式
设计模式六大原则 1. 单一职责原则:一个类或者一个方法只负责一项职责,尽量做到类的只有一个行为原因引起变化。 核心思想:控制类的粒度大小,将对象解耦,提高其内聚性。 2. 开闭原则:对扩展开放…...
【Git版本控制器--1】Git的基本操作--本地仓库
目录 初识git 本地仓库 认识工作区、暂存区、版本库 add操作与commit操作 master文件与commit id 修改文件 版本回退 撤销修改 删除文件 初识git Git 是一个分布式版本控制系统,主要用于跟踪文件的更改,特别是在软件开发中。 为什么要版本…...
如何在Jupyter中快速切换Anaconda里不同的虚拟环境
目录 介绍 操作步骤 1. 选择环境,安装内核 2. 注册内核 3. 完工。 视频教程 介绍 很多网友在使用Jupyter的时候会遇到各种各样的问题,其中一个比较麻烦的问题就是我在Anaconda有多个Python的环境里面,如何让jupyter快速切换不同的Pyt…...
Python自学 - “包”的创建与使用(从头晕到了然)
<< 返回目录 1 Python自学 - “包”的创建与使用(从头晕到了然) 相对于模块,包是一个更大的概念,按照业界的开发规范,1个代码文件不要超过1000行,稍微有点规模的任务就超过这个代码限制了,必然需要多个文件来管…...
ElasticSearch 同义词匹配
synonym.txt 电脑, 计算机, 主机 复印纸, 打印纸, A4纸, 纸, A3 平板电脑, Pad DELETE /es_sku_index_20_20250109 PUT /es_sku_index_20_20250109 {"settings": {"index": {"number_of_shards": "5","number_of_replicas&quo…...
android 官网刷机和线刷
nexus、pixel可使用google官网线上刷机的方法。网址:https://flash.android.com/ 本文使用google线上刷机,将Android14 刷为Android12 以下是失败的线刷经历。 准备工作 下载升级包。https://developers.google.com/android/images?hlzh-cn 注意&…...
Vue环境变量配置指南:如何在开发、生产和测试中设置环境变量
-## 前言 Vue.js是一个流行的JavaScript框架,它提供了许多工具和功能来帮助开发人员构建高效、可维护的Web应用程序。其中一个重要的工具是环境变量,它可以让你在不同的环境中配置不同的参数和选项。在这篇博客中,我们将介绍如何在Vue应用程…...
蓝桥杯_B组_省赛_2022(用作博主自己学习)
题目链接算法11.九进制转十进制 - 蓝桥云课 进制转换 21.顺子日期 - 蓝桥云课 时间与日期 31.刷题统计 - 蓝桥云课 时间与日期 41.修剪灌木 - 蓝桥云课 思维 51.X 进制减法 - 蓝桥云课 贪心 61.统计子矩阵 - 蓝桥云课 二维前缀和 71.积木画 - 蓝桥云课 动态规划 82.扫雷 - 蓝桥…...
【干货】交换网络环路介绍
定义 以太网交换网络中为了提高网络可靠性,通常会采用冗余设备和冗余链路,然而现网中由于组网调整、配置修改、升级割接等原因,经常会造成数据或协议报文环形转发,不可避免的形成环路。如图7-1所示,三台设备两两相连就…...
unity——Preject3——面板基类
目录 1.Canvas Group Canvas Group 的功能 Canvas Group 的常见用途 如何使用 Canvas Group 2.代码 3.代码分析 类分析:BasePanel 功能 作用 实际应用 代码解析:hideCallBack?.Invoke(); 语法知识点 作用 虚函数(virtual)和抽象类(abstract)的作用与区别 …...