自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(35)
  • 收藏
  • 关注

原创 PyQt5结合Yolo框架打包python为exe文件完整流程

一、准备1.安装 pyinstaller更新(初次安装忽略)2.安装 auto-py-to-exe安装打开工具auto-py-to-exe 可视化转换工具:二、打包1.选择主程序路径,配置参数,点击生成2.等待转换完成…

2024-04-14 19:24:21 814

原创 lambda x: None用法本质

被替换为了一个匿名函数,程序不会真正休眠,但调用本身在语法上是有效的,并且不会导致程序崩溃或运行时错误。这在进行单元测试或需要临时屏蔽某些功能的开发阶段特别有用。这种方式破坏了原有的代码结构,因为原本期望是函数调用的地方现在变成了尝试对。这种方式的关键在于,你保留了函数调用的语法。因此,根据你的实际需求选择适当的方法。类型执行调用操作,这在大多数情况下都不是我们想要的行为。这样的函数调用时,Python 解释器会抛出一个。的功能而不影响代码其他部分正常运行时,使用。的类型,它不再是一个函数,而是。

2024-03-31 16:17:14 323

原创 在Jetson Nano上使用TensorRT来加速模型

1. **模型转换**:首先,你需要将训练好的深度学习模型转换为TensorRT支持的格式。例如,如果你的模型是用TensorFlow或PyTorch框架训练的,你可以使用ONNX(Open Neural Network Exchange)格式作为中间步骤,然后将ONNX模型转换为TensorRT优化的模型。2. **优化**:TensorRT会对模型进行一系列的优化操作,包括层融合、精度校准(比如从FP32到FP16或INT8)、内核自动调优等,以提高模型在特定硬件上的执行效率。

2024-03-26 23:05:37 395

原创 计算机视觉中的NMS非极大值抑制

具体来说,会计算这些边界框与置信度最高的边界框的交并比(IoU),如果IoU超过某个阈值(例如0.5),则这些边界框会被认为是对同一个目标的多余检测,并因此被抑制。它的主要目的是减少目标检测过程中的多余的边界框,以便只保留最佳的一个边界框。在目标检测任务中,算法会对图像中可能出现目标的区域进行评分,并为它们生成边界框。3. 从剩下的边界框中再次选择置信度最高的边界框,重复上述过程,直到所有的边界框都被处理完毕。1. 选择置信度最高的边界框(即目标存在的可能性最高的边界框)。

2024-03-26 22:27:30 546

原创 YOLO中的预训练模型是否需要

参数`--weights`后面跟的是预训练模型的权重文件,这里用的是`yolov5s.pt`,其中`yolov5s`代表的是YOLOv5的一个小型版本,适用于在资源有限的设备上进行快速训练和检测。这个命令同样是用于训练YOLOv5模型,但与上面的命令不同的是,这里`--weights`参数后面是空的,意味着训练将从头开始,不使用任何预训练的权重。`--cfg`参数后面跟的是模型的配置文件,这里使用的是`yolov5s.yaml`,该文件定义了模型的架构和其他参数。这里列出的是两个不同情况下的命令行用法。

2024-03-26 22:11:05 459

原创 YOLO版本迭代

3. **YOLOv5的命名争议**:当Ultralytics发布YOLOv5时,它引起了一些争议,主要是因为命名方式突然改变(跳过了v4,因为v4是由另一团队开发的),以及YOLO的原创作者不再参与。4. **逐渐被接受**:随着时间的推移,Ultralytics的YOLOv5由于其性能、易用性和社区支持,逐渐获得了广泛的认可和使用。综上所述,YOLOv5之所以最初不强调“Ultralytics”,是因为它在一个转折点上出现,既是YOLO算法的继承者,也是由一个新的团队在不同的命名和发展背景下推出的。

2024-03-23 16:14:24 199

原创 YOLO中的三个数据集

如果我们只用训练集来调整这些设置,我们可能最终会得到一个对训练数据过度优化(即过拟合)的模型,这样的模型对新数据的预测性能往往会下降。验证集相当于是训练过程中的“模拟测试”,它帮助我们监控模型在未见过的数据上的表现,并据此调整超参数,比如学习率或模型结构的选择等。但是,我们希望这个模型不仅仅在我们用来训练它的数据上表现良好,更重要的是,它也能在新的、未见过的数据上表现良好。总之,验证集的作用就是在训练过程中提供一个独立的性能反馈,帮助我们选择和调整模型配置,以达到在未见过的数据上也能表现良好的目标。

2024-03-23 15:55:03 480

原创 在OpenCV的detectMultiScale方法中,scaleFactor参数

假设你有一个图像,并且你想在这个图像上进行面部检测。面部可能以不同的大小存在于图像中,因此我们需要以不同的尺度来查找面部。这就是发挥作用的地方。

2024-03-23 15:53:55 372

原创 Yolo中的参数:--cfg 参数和 --weights 参数

这些权重可以是随机初始化的,也可以是通过在另一个(通常是相似的)数据集上预训练得到的。使用预训练权重可以帮助模型在新的数据集上更快地收敛,并可能提高最终模型的准确率。这是一种迁移学习的方法,它利用了在一个任务上学到的知识来帮助解决另一个相关的任务。)定义了模型的架构,包括但不限于模型层的数量、类型、尺寸以及其他模型结构相关的配置。提供了“模型开始训练时的知识基础”(即模型参数的初始值)。这两个参数共同决定了训练开始时模型的状态,包括它的结构和参数。指定的是模型训练开始时使用的权重文件的路径,这个文件(如。

2024-03-06 13:06:19 803 1

原创 苹果id使用说明

例如:账号[email protected]密码xxx----邮箱密码xxx----密保----生日xxx-xx-xx----朋友xxxx----工作xxx----父母xx。账号所有信息一经交付,其安全问题自交付之日起由买家承担,买家可自行修改密码、密保、手机号等信息,卖家只保证首次登录成功。千万记住,只有常用号才能消费,否则容易触发风控系统,导致充值成功,但是付款失败,并且苹果不会退钱,余额不能提现;即使是国区绑定支付宝、微信进行支付的账号,长时间不登录,也会提示你验证支付渠道,以保证支付安全;

2023-10-13 12:04:01 315 1

原创 C语言标识符的分类:关键字、预定义标识符、用户定义标识符

C语言中系统预先定义的标识符,如函数库中的函数名、宏定义和类型别名(typedef)。预定义标识符具有见字明义的特点,如函数“格式输出”(英语全称加缩写:printf)、“格式输入”(英语全称加缩写:scanf)、sin、isalnum等等。预定义标识符可以作为用户标识符使用,只是这样会失去系统规定的原意,使用不当还会使程序出错。注:C语言函数库中的函数名可以成为用户定义的变量名!!!允许但不安全!!!关键字不允许定义为用户定义标识符!!!!用户根据需要自己定义的标识符。

2023-09-16 17:41:25 1291 1

原创 printf()函数,指针,字符数组,字符串

注意:在字符指针中p 、*p 和&p的区别:p是指针变量指向字符串首元素(前提对p指针没有进行指针操作),p中存放首元素的地址(一旦被初始化就,系统就为我们分配好了地址,而且地址也不能改变,因为字符指针是一个只读变量,你不能企图对一个初始化好的指针进行内部修改),而*p是对指针变量p进行解引用操作,也就是指针所指向的内容,而&p是对指针变量取地址,所以也就肯定不会和p的值相等,因为字符指针系统会为其分配内存,p的值是字符串首元素的地址。答:是的p肯定是指针变量,它也一定是地址,但是别忘了。

2023-09-14 11:30:56 222

原创 python基础

字典{(元组):“value”},增加了key中的元素,更多区分,比如同名通讯录;字符串长度:无论一个数字、字符、文字、空格都是一个长度,完整的转义字符如/n为一个长度;f = open("路径",模式,encoding=“utf-8”)字典{“key”:"value","key":"value"...}空类型None同样;需要注意的是:w和a模式下不允许读文件,r+模式支持读写操作;1:'' ".format(替换的内容)'' ".format(参数=替换的内容)模式分r、w、a、r+模式。

2023-05-24 21:40:49 50

原创 conda代码常用

安装jupyter(Jupyter Notebook是基于网页的用于交互计算的应用程序,JupyterLab 是 Jupyter 主打的最新数据科学生产工具,某种意义上,它的出现是为了取代Jupyter Notebook)创建名为name的虚拟环境,同时安装python3.6版本。①先 clone 一份 new name 的环境。②删除 old name 的环境。# 查看python版本。进入jupterlab。查看所有已安装虚拟环境。进入notebook。

2023-05-23 20:09:30 237

原创 vscode里面的解释器位置不同,用cv读取图片的图形化界面也不同

如果使用相同的代码和相同的解释器,但在不同的位置上运行,而界面显示仍然不同,这可能是由于其他因素引起的。如果上述检查都没有解决问题,建议提供更多具体细节,例如代码示例和在不同位置上的相关配置,以便更好地理解问题并提供帮助。环境变量:检查在两个位置上是否设置了相同的环境变量。工作目录:确认在两个位置上的工作目录是否相同。版本差异:检查使用的cv库的版本是否相同。不同的版本可能具有不同的默认行为和配置。图像路径:确保在代码中使用的图像路径是正确的,并且可以在两个位置上找到图像。

2023-05-19 22:03:19 126

原创 conda环境安装指定位置的虚拟环境

【代码】conda环境安装指定位置的虚拟环境。

2023-05-19 15:04:28 4243

原创 【无标题】

就是扩展名为.py的文件,里面定义了一些函数和变量。通过使用模块,不仅可以有效地避免命名空间的冲突,还可以将一个较大的程序分为多个文件,提升代码的可维护性和可重用性。在模块之上的概念,为了方便管理而将文件进行打包。包目录下第一个文件必须是__init__.py,否则就是普通股的文件夹目录。然后就是一些模块文件和子目录,假如子目录中也有__init__.py,那么它就是这个包的子包了。

2023-05-18 22:22:02 25

原创 python中import的用法

需要注意的是,导入特定对象可能会导致命名冲突,特别是当你导入的对象名称与当前命名空间中的其他对象名称冲突时。因此,在导入特定对象时,你应该确保没有命名冲突或通过适当的命名约定来避免冲突。关键字,你可以选择性地导入库中的特定对象。这样,你可以直接使用导入的对象而无需使用库名作为前缀。语句导入了整个库,将整个库作为一个对象引入到当前命名空间中。语句可以用于导入整个库(模块)或者导入库中的特定对象(如函数、类、变量等)。语句既可以导入整个库也可以导入库中的特定对象,具体取决于你在。既可以导入库也可以导入对象。

2023-05-18 22:03:44 702

原创 C++三种继承方式的区别

public继承:父类的public和protected属性在子类中不变,public和protected属性在类内可以访问到,private属性在类内不可访问(类外更不可能访问),但public属性在类外可以访问,protected属性在类外不可以访问。protected继承:父类的public和protected属性在子类中变为protected,protected属性在类内可以访问到,private属性在类内不可访问(类外更不可能访问),但protected属性在类内可以访问,类外不可以访问。

2023-05-09 12:01:35 243

原创 深拷贝与浅拷贝

浅拷贝是创建一个新的对象,其中包含了原始对象中的一部分数据,例如列表或字典中的元素对象,但这些元素对象本身仍然是原对象的引用。因此,对于元素对象的修改会反映在原对象和浅拷贝对象中。在拷贝构造函数中,类中有一个指针变量,如果在堆区开辟指针指向的数据,再进行浅拷贝的话,拷贝后的对象的指针同样指向源对象的堆区数据,在执行析构函数后会进行释放,两个对象均释放会报错!深拷贝则是指在复制对象时,不仅复制对象本身的值,还复制了对象包含的所有子对象,即新对象与原对象完全独立,对新对象的任何修改都不会影响原对象。

2023-03-22 11:21:49 108 2

原创 构造函数的调用规则

总之,构造函数是在对象创建时自动调用的特殊函数,用于初始化对象的成员变量。在定义构造函数时,必须遵循特定的规则,以确保对象的正确初始化。在构造函数中,可以使用初始化列表对成员变量进行初始化,也可以在函数体中使用赋值语句进行初始化。如果没有显式定义构造函数,则编译器会提供一个默认的构造函数,该构造函数不接受任何参数。如果显式定义了构造函数,则必须在其中初始化所有成员变量,否则它们将包含未定义的值。构造函数不返回任何值,因为它们的主要目的是初始化对象。当创建一个对象时,会自动调用该对象的构造函数。

2023-03-22 10:31:21 637

原创 拷贝构造函数为什么要传入引用

在拷贝构造函数中,如果我们将参数作为值传递,那么会发生对象复制,这将导致无限递归的调用,因为拷贝构造函数的调用需要创建一个新对象并将其初始化为另一个对象的副本。用MyClass 类实例对象obj2,后面的(obj1)是告诉编译器调用拷贝构造函数,值传递会不断调用构造函数,我们不能控制,因为值传递时会把obj1赋值給临时变量,并调用拷贝构造函数,不断往复。将d1的值传递给dd1,因为是值传递,一旦调用又要产生临时变量ddd1,将d1的值传递给临时变量ddd1,那么问题就很明显了,(我们的本意,最终目的。

2023-03-21 18:06:21 1242

原创 指针传参与数组传参对外部数组的修改

【代码】指针传参与数组传参对外部数组的修改。

2023-03-20 22:59:17 49

原创 new关键字的理解

已经指向了数组的末尾,而非数组的首地址。因此,释放内存时应该使用指向数组首地址的指针,而不是指向数组末尾的指针。new关键字在堆区创建一个地址并放入初值,delete之后指针指向的地址中的内容被清空,指针指向随机地址;在程序中有一个错误:在使用循环输出 arr 数组中的元素后,使用。或者不使用指针,而使用数组下标进行赋值:、

2023-03-20 20:00:12 127

原创 指针传参的目的

可以修改外部数据的值。如果外部数据不可修改,为防止误操作,则需要加入const关键字。相比于值传递的数据复制,指针传参只创建了一个指针,可以节省空间;有struct student *p结构体指针;两者都是常量指针即指针所指向的为常量;

2023-03-20 16:11:36 82

转载 ui->setupUi(this);的本质

版权声明:本文为CSDN博主「Code in my mind」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。查看ui_abc.h头文件,得到类的名字,然后生成ui对象 Ui_form ui;ui对象可以操作所有的子控件对象(因为在ui中的子控件都是public域的)设置ui对象的基类ui.setupUi(&w) ,这里基类的类型是非常重要的。通过设计师设计的UI中的控件都在setUp()接口。Designer创建出来的对象是没有基类的;

2023-03-17 16:39:43 857

原创 Widget::Widget(QWidget *parent)为什么要传入父级指针?

同时,我们也可以通过Ui::Widget命名空间中的成员函数来实现对UI文件中定义的控件和布局的操作和控制,如ui->setupUi()函数就是将UI文件中定义的控件和布局加载到当前窗口对象中的函数。在Qt中,当我们使用ui->setupUi(this)时,this表示当前窗口类的实例对象,也就是将UI文件中的控件和窗口元素加载到当前窗口类的实例对象中。在UI文件中,我们可以定义窗口界面中的控件和布局等元素,而Ui::Widget命名空间中则包含了这些元素的定义和实现。this代表当前类的实例对象。

2023-03-17 16:30:11 1314

原创 QSerialPort *serialPort;怎么理解

但是并没有为该变量分配内存空间。在使用该变量之前,需要先为其分配内存空间,通常使用类似于。由于该变量是一个指针,因此需要使用动态内存分配来为其分配内存空间,通常使用。类是Qt框架中提供的串口通信类,它允许我们在应用程序中通过串口与外部设备通信。类时,需要先声明该类的对象,然后再调用该对象的方法来进行串口通信的设置和数据传输。运算符来表示该变量是一个指针,即该变量存储的是一个内存地址,该地址指向。是一行C++代码,它的意思是声明了一个指向。因此,该行代码的作用是声明了一个指向。在该行代码中,使用了。

2023-03-16 22:19:22 390

原创 类的创建及成员函数的声明

该例在 Student 类中定义了一个构造函数Student(char *, int, float),它的作用是给三个 private 属性的成员变量赋值。要想调用该构造函数,就得在创建对象的同时传递实参,并且实参由( )包围,和普通的函数调用非常类似。在堆上创建对象时,实参位于类名后面,例如new Student("李华", 16, 96)。在C++中,有一种特殊的成员函数,它的名字和类名相同,没有返回值,不需要用户显式调用(用户也不能调用),而是在创建对象时自动执行。李华的年龄是16,成绩是96。

2023-03-15 20:55:59 190

原创 c++中::和.区别

"."用于访问类的非静态成员。在类中定义的静态变量可以被所有类对象共享,它们的内存空间只在程序启动时分配一次,并且可以在类的成员函数之外进行初始化。与普通变量不同,静态变量的生命周期与程序的整个运行期间相同,它们在程序开始运行时被初始化,在程序结束时被销毁。需要注意的是,"."只能用于访问对象的成员,而"::"可以用于访问类和命名空间的静态成员,也可以用于访问全局作用域的变量和函数。在C++中,"::"和"."都是用于访问类的成员(包括成员函数和成员变量)的运算符,但它们有一些重要的区别。

2023-03-15 18:42:46 1825

原创 函数形参为字符指针数组char* a[]怎么理解

因此,当函数形参为字符指针数组时,这个函数可以接受一个指向字符指针数组的指针,也就是一个指向字符串数组的指针,然后可以对这个字符串数组进行操作。在C语言中,字符指针是指向字符数组的指针,因此字符指针数组就是一个由多个字符指针组成的数组。在上面的示例中,通过循环遍历字符指针数组中的每个字符串,并通过第二个循环处理每个字符串中的每个字符。是等价的,它们都表示字符指针数组中的第一个元素,也就是一个指向字符串的指针。,表示字符指针数组中的第一个元素所指向的字符串的第一个字符,即 "h"。

2023-03-15 17:35:20 714

原创 C++中的双冒号::

在C++中,可以使用命名空间来避免名称冲突。如果在不同的命名空间中有同名的函数或变量,则需要使用双冒号运算符来指定使用哪个命名空间中的函数或变量。在C++中,如果要在类的定义外部定义或实现成员函数或静态成员变量,则必须使用双冒号运算符来引用类作用域中的成员。例如,如果有一个类叫做。在C++中,双冒号(::)被用作作用域解析运算符。在上面的示例中,我们使用双冒号运算符来引用。命名空间作用域解析运算符。命名空间中的变量和函数。

2023-03-15 16:21:11 3373

原创 【无标题】

语句中处理文件打开失败的情况。这行代码是在 C 语言中打开文件的一种常见方式。如果文件成功打开,则返回一个指向文件流的指针,它可以用于读取文件中的内容。这段代码的作用是打开名为“file”的文件,并从中读取数据。函数的第一个参数是文件名或路径,第二个参数是打开文件的模式,它可以是。函数打开文件,并将返回的文件指针存储在指针变量。需要注意的是,在使用完文件之后,应该使用。函数将关闭文件,释放与文件关联的资源。是空指针,则表示文件打开失败,应该在。模式,因此打开的是一个只读文件。的文件,并以只读模式。

2023-03-14 22:44:26 134

原创 C语言中 井号#、双井号##

在 C 语言中,井号 "#" 是一个预处理器指令的符号,用于在编译之前处理代码。预处理器指令以 "#" 开始,以换行符结束。

2023-03-14 22:16:31 2723

原创 字符串赋值指针变量与普通变量的区别

需要注意的是,这里的字符串常量是存储在常量区的,不能修改。如果需要修改字符串内容,可以使用动态内存分配来分配一段可写的内存空间,并将指针指向这段内存空间的首地址。特别是数组与字符串,数组名本质上是数组的首地址。在C语言中,不能在结构体定义之后直接使用大括号初始化,必须在创建结构体变量的时候进行初始化。对于普通变量,赋值操作实际上是将一个字符串常量中的字符逐个复制到变量所在的内存空间中,是一个字符数组,而不是字符指针,所以不能将一个字符串常量的地址直接赋值给它。普通变量和指针变量用字符串赋值时是有区别的。

2023-03-12 23:16:31 229 1

Qt5 串口助手请康子哥测试一下

Qt5 串口助手请康子哥测试一下

2023-03-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除