自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Centos 7环境下安装MYSQL5.7

(提取码: b30a):mysql57-community-release-el7.rpm,后选择 mysql57-community-release-el7.rpm。6.配置mysqld密码使得mysql能登录。2.卸载mysqld与mariadb。1.切换成root用户。5.启动mysqld。

2024-01-19 22:22:22 409

原创 【Stm32-F407】GPIO输出-使用寄存器点亮LED

GPIO 英文全名为 General Purpose Intput Output,中文译为 通用输入输出端口。GPIO是芯片上的引脚,可通过软件来控制这些引脚的高低电平,从而实现与外部通信等功能。Stm32-F407ZGT6芯片图:以Stm32-F407ZGT6芯片为例,A、B、C、D四个区域共有144个引脚,这144个引脚中就有若干引脚是GPIO。①电源管脚: 引脚图中的 VDD、VSS、VREF+、VREF-、VSSA、VDDA 等都属于电源引脚;②。

2023-12-28 23:32:13 1735

原创 【Stm32-F407】全速DAP仿真器下载程序

1)全速DAP仿真器简介DAP全称 Data Acquisition Processor,是一种用于数据采集和实时控制的设备。本文使用的全速DAP仿真器遵循ARM公司的CMSIS-DAP标准,支持所有基于Cortex-M内核的的单片机,但该DAP仿真器仅支持SW模式,不支持JTAG模式。

2023-12-18 22:23:03 1119

原创 【Stm32-F407】Keil uVision5 下新建工程

①双击鼠标左键打开Keil uVision5,选择 Project 下的 New uVision Project ;②在期望的文件夹下创建一个工程,并按如下要求操作;③添加文件类型,按如下要求操作④如有需要可添加相关启动文件在工程文件夹下并添加到 Source Group 1中⑤对Keil uVision5做适应性配置,按如下要求操作

2023-12-14 22:01:12 1016 1

原创 【Stm32-F407】Keil uVision5 的安装

Keil uVision5 的安装要比 Keil uVision4 多一个步骤3),在Keil uVision5 版本中将芯片包与软件分开了,必须添加芯片包,不然没法使用。STM32芯片包需要可以去KEIL的。,提取码: 48yz。

2023-10-04 18:03:57 3944 2

原创 Centos下进程地址空间

给进程控制块创建的虚拟地址空间就叫进程地址空间。如果不使用进程地址空间,那么使用的就一定是真实的物理内存空间,真实的物理内存空间是没有访问权限设置的,这意味着物理内存上若有3个进程,理论上通过其中任何一个进程的地址都能访问其他进程内容,甚至能修改进程上内容。所以现代计算机,提出了下面的计算方式,给每一个进程的进程控制块task_struct创建一个进程地址空间(或者叫虚拟地址空间),再通过映射机制“页表”将虚拟地址空间映射到真实的内存地址最终实现程序的运行,这个页表相对于Python中的键值对。

2023-04-28 10:53:12 122

原创 Centos下环境变量

2)假定上面的程序最终形成可执行程序file,那么 ./file -a -b -1 -i表示执行可执行程序file,并传入参数 -a -b -1 -i,参数 -a -b -1 -i 传入到哪里呢?添加环境变量的一个好处就是以后/A/B下的可执行程序不需要带路径了,直接写可执行程序名回车命令就可执行成功,系统会先去环境变量PATH中去找有没有你写的可执行程序,有就执行,事实上你的程序在添加到环境变量的那个路径里,所以执行肯定会成功,如果没有那么就会报错。echo是查看的意思,export是导入的意思。

2023-04-19 10:50:34 1501

原创 Centos下进程控制块详解

ps axj | head -1表示显示头部名称,相当于表中第一行的标题,ps axj | grep test1表示显示可执行文件test1的进程,ps axj | grep test1 | grep -v grep中的| grep -v grep表示过滤掉grep进程。标识符,说直白点就是每个进程的唯一ID号,相当于人的身份证识别码,这一部分主要讲解如何创建一个进程并获取它的标识符(PID与PPID),最后利用标识符结束进程。表示这个进程刚刚被创建出来,还不能被运行,也还没有放进运行队列中排队的状态。

2023-03-23 15:53:01 186

原创 【Centos】操作系统的宏观认识与进程相关概念

⑤:操作系统的接口使用有一定的难度,针对程序员,设计了第三方库(即⑤,它相当于一个服务层)来进一步降低使用难度,为了使得库的调用更简单,出现了C、C++、Java、Python等语言,他们的使用难度逐渐降低;针对小白,设计了Shell外壳程序来降低使用难度,不光是Shell外壳,像图形化界面也行,与Shell外壳处于同一级。④:为了保护操作系统,操作系统使用时只提供接口,要想使用操作系统,必须通过接口。②:对下协调硬件,对上获取Linux的指令,相当于传话人。③:Linux操作系统。

2023-03-22 13:58:49 97

原创 OCR简介

OCR,全称Optical Character Recognition,中文名为光学字符识别,是一种文字识别技术,一般用于文本检测、文本识别、端到端文本识别、文档分析。

2023-03-04 00:34:17 432

原创 Deepsort原理分析

匹配轨迹指的是当检测框与卡尔曼滤波预测框的IOU匹配符合要求时,卡尔曼滤波马上会刷新一下新的预测框,一直符合要求就一直这样继续下去。总而言之,最核心最关键的还是匈牙利算法,之所以用匈牙利算法是因为一幅画面面中有多个目标检测框和预测框,我们是需要知道他们之间的映射关系的,匈牙利算法解决的是(最优)分配问题,具体看下图,用到目标检测中就是每一个目标检测框和卡尔曼滤波预测出来的检测框的IOU距离越大越好。

2023-03-03 23:49:13 674

原创 YOLO基本原理

5)还有一种情况,当猫与狗的物体中心都落在一个格子里怎么办呢,如下图所示,做法是再增加一个向量,最终一个格子向量由7X1变为14X1,如下第二张图所示,实际上当格子分割很小时是很难遇到这种情况的。YOLO使用的是IOU交并比,如下图所示,IOU会有一个参考标准,IOU大于某个标准则这个边界框保留,否则丢弃,最终选择IOU最大的,这种方法称为NMS,即非极大值抑制。4)一般情况下,为了得到较精确的效果,YOLO会对一个物体预测出多个边界框,这就需要选择最合适的边界框,如下图所示图片该如何做呢?

2023-03-02 18:38:06 376

原创 【戴口罩高精度识别项目】神经网络搭建

3)layer1-layer4每层都有ResBlock1、ResBlock2,每个模块都经过两次2维卷积,每个模块可能会经历下采样与尺寸通道的变化,具体见layer1-layer4架构细节图ResBlock1、ResBlock2每个模块都会经历卷积、BN算法(解决层数多了后收敛慢的问题)、激活的过程,具体见各层关系对应图。2)layer0层有1层卷积、BN、激活、池化两个部分,卷积核大小为7X7,通道为64,步长为2,池化层大小为 3x3,步长为2;1)一开始的输入大小设置为:(224,224,3)

2023-02-26 17:29:18 168

原创 【戴口罩高精度识别项目】神经网络

Facenet能解决的问题是:她是谁,是同一个人吗,找到同一个人。inception_resent的特点在于使用多个不同大小的卷积核进行卷积后进行拼接,这样获得的尺度信息更多,同时为了降低运算量再较大的卷积核之前还会设置一个1X1的卷积核,后来又进行了卷积替换,也是为了降低计算量,如3X3卷积核换成1X3和3X1的卷积核。含有残差学习和短路连接的卷积神经网络叫ResNet网络。ResNet网络(残差网络)1)ResNet网络。

2023-02-26 12:11:28 162

原创 【C++继承】多继承、菱形继承、虚继承

有公共祖先的继承叫菱形继承,即子类的多个父类有一个共同的父类,则这个子类叫菱形继承,这个时候最底层的子类会包含多份祖先的数据,访问祖先的数据时还是加作用域确定访问的是哪一个。多继承遇到同名问题时,访问仍然是加作用域访问,

2023-02-25 14:07:23 138

原创 Simple RNN、LSTM、GRU序列模型原理

RNN一般用在数据集比较小的模型训练上比较合适,数据集比较大用Transformer encoder更合适。RNN神经网络有3个变种,分别为Simple RNN、LSTM、GRU。用于处理序列数据的神经网络就叫循环神经网络。序列数据说直白点就是随时间变化的数据,循环神经网络它能够根据这种数据推出下文结果。了解Simple RNN、LSTM、GRU序列模型的原理。1)simple RNN、LSTM、GRU序列模型的原理。3)CNN-RNN/VIT视频分类方法。1.循环神经网络RNN。

2023-02-24 23:12:46 642

原创 人脸考勤机项目

然后在过道或者入口处装置人脸考勤机,当有人经过时,摄像头抓取人脸并上传服务器,对抓取到的人脸进行人脸识别,判断此人身份,若此人在信息比对库中且第一次考勤,则考勤成功,并显示考勤人员姓名与比对距离,如非第一次考勤,并在一定时间隔外则更新考勤。2. 人脸识别:将检测的人脸特征与feaure.csv人脸特征作比较,如果比中把考勤记录写入attendance.csv。2. 人脸识别:将检测的人脸特征与feaure.csv人脸特征作比较,如果比中把考勤记录写入attendance.csv。④将考勤记录写入文件。

2023-02-24 10:12:52 706

原创 【C++继承】继承

继承用如下格式表述,继承规则是,所有父类私有在子类中不可访问,公共继承保持不变,保护继承变保护,私有继承变私有。当我们构建子类的时候,其实是先把子类所对应的父类给构造出来,再构造对象成员的构造函数,然后再构造子类自身的空间,析构这与其相反。一句话总结,构造:父成子(父类-成员(变量,函数,类的对象)-子类);子类实例化对象时,会自动调用成员对象默认构造、父类对象默认构造,即默认掉用都是无参构造,子类只有使用初始化列表才能调用成员对象,父类的有参构造。3)子类调用父类的成员对象、父类的有参构造。

2023-02-22 18:30:13 96

原创 【C++封装】重载运算符

重载的++和--运算符有点让人不知所措,因为我们总是希望能根据他们出现在所作用对象的前面还是后面来调研不同的函数。重载运算符就是对已有的运算符进行重定义,赋予另一种功能,目的是为了适应不同的数据类型。定义重载运算符就想定义函数,只是该函数的名字是operator@,这里的@代表被重载的运算符。类的对象可以用 全局函数实现(不推荐),成员函数实现(推荐,少一个参数),其他的则只能用全局函数实现。当对象和()结合会触发重载函数调用运算符。1. 弄懂运算符的运算对象个数,因为个数决定了重载函数的参数个数;

2023-02-19 22:40:45 212

原创 【C++封装】C++面向对象模型

C++实现了封装,数据(-变量)和处理数据的操作(-函数)是分开存储的,C++中的非静态数据成员直接内含在类对象中,成员函数虽然内含在class声明之内,去不出现在对象中,每一个非内联。从上述图中我们会有一个疑问,共享的成员函数是如何区分哪个对象在调用自己的呢?成员函数只会诞生一份函数实例。3)const修饰成员函数。1)成员变量和函数的存储。成员变量和函数的存储。

2023-02-18 23:58:44 282

原创 【C++封装】单例模式设计

make并没有报错,说明这样设计是成功的。

2023-02-18 17:28:11 131

原创 【C++封装】动态对象与静态成员

动态对象的创建说白了就是去堆区创建一个对象,给这个对象分配空间是按照空间需求来分配的,说直白点就是要多少用多少,不至于空间大了浪费,空间小了溢出。C语言也有动态空间的开辟,但是不如C++好。C++创建对象一般发生2件事,给对象分配内存,构造函数初始化,析构函数清理。而C语言中的malloc,calloc,realloc紧紧是得到空间,一块空间没有初始化和释放是非常麻烦也是十分容易导致程序运行出错的。

2023-02-18 14:39:35 123

原创 【人脸考勤项目】人脸检测的5种方式

minNeighbors指每个人脸框最小的候选数量,算法为了检测人脸,可能会在一个人物照片的多个地方去检测人脸,最后会识别出多个地方可能都是人脸,这时minNeighbors会对这些识别结果进行排序取出最可能是人脸的地方,试想一下,如果所有的方框都集中在某一个区域,那么是不是代表这个区域内是人脸的可能性更高,当然是这样,这个方框集中在某一个区域的数量就叫做人脸框的候选数量用minNeighbors表示,显然minNeighbors较大比较好,太大了会出现漏检。第4步,检测器开始检测人脸。

2023-02-17 14:56:25 1438

原创 【C++封装】类与对象

一般情况下,类中有一个空的析构函数就够了,即析构函数里什么内容都不需要写,但是如果一个类中有指针成员,那么这个类必须手写析构函数,释放指针成员所指向的空间,因为析构只会只会释放对象本身的空间,一般情况下对象的空间也只包含它自身的空间,所以当有指针时,指针指向的空间在对象外,这时需要释放指针指向的空间,用默认析构的话释放不了指针指向的空间就算了,还会把对象中指针存的地址给干掉了。当类实例化对象的时候,系统会自动调用构造函数,并完成对象的初始化,详细的说是先给对象开辟空间,然后再初始化。

2023-02-16 21:27:06 76

原创 用Opencv玩转图像和视频

Opencv读取、缩放、翻转、写入图像。2)Opencv读取、缩放、翻转、写入图像。3)Opencv在图像上绘制文字、几何图形。安装好后进入pthon3.8环境后输入。若输出版本号,则Opencv安装成功。4)Opencv视频操作。1)安装Opencv。

2023-02-14 23:21:52 149

原创 图像的本质

图像本质上就是数组,灰度图片就是一个二维数组,是通过亮度值来显示图片的,彩色图片本质上是一个三维数组,通过RGB三色叠加显示图片的,例如图片大小为540*480实际上指540(宽-行)*480(长-列),所以一行有480个像素高度,一列有540个像素宽度,通道数为3,记为(480,540,3)计算机并不知道哪一个通道是红色,它只知道有3个表达颜色数值的通道,也就是3个灰度表达不同的颜色,所以我们处理图像时需要告诉计算机一个通道对应的是属于哪一个颜色,每一个通道本质是等同于一张灰度图。

2023-02-14 22:25:26 393

原创 Python入门知识点

自己写一个1.py文件,在同一目录下还有另外一个2.py文件,那么在2.py文件中可以使用ipmort 1表示导入了自己写的1.py模块,嫌弃1名字长可以使用as换一个名字,写法为ipmort 1 as 2表示给1.py模块的名字1取名字为2,在2.py中一样可以使用2名字调用1.py中的函数。import re 表示导入正则表达式模块,所谓模块,就是一个文件,这个文件里有许多定义好的函数,怎么调用呢,用re.就会显示出来这个模块(文件)里的所有函数,选择一个,就是用了这个文件里的某个函数。

2023-02-14 18:11:30 94

原创 【Conda-pip】Conda下Python环境配置

本文使用Conda + pip配置Python环境,使用Conda是因为Conda安装的包兼容性好,使用pip是因为Conda包的数量比pip少得多,有些小众的包还是需要借助pip安装,据统计,Conda安装包约1500种,而pip的安装包至少有15万种。当Conda与pip都无法安装时,我们推荐使用编译安装,即本文优先使用的Python运行环境是:用Conda创造虚拟环境Python安装包的原则是:Conda > pip > 编译环境。1.安装opencv,,优先使用conda安装,利用指令。

2023-02-14 12:26:27 2320

原创 C++对C的扩展

老是使用命名空间名字加上标识符来查找某一个标识符这当然没有问题,但是也是会很麻烦的,C++提供了一种较为简单的方法,即使用using声明某个表示符,那么下次使用时这个标识符时不需要说明谁属于谁,但这种使用也是有代价的,即把马甲脱了是会出现名字一样时无法区分的问题,所以脱掉马甲之前一定要确认这个标识符名字是不是唯一的。什么意思呢,当命名空间名字太长时,可以去个短的别名,以后可以用这个别名去访问命名空间的成员,当然原来的名字仍然是可以访问的,并不会失效。作用域运算符::谁是谁的谁,解决的是归属问题。

2023-02-12 23:47:34 98

原创 Centos下部分专有名词解释

echo $BASH出来的结果是/bin/bash,说明外壳程序是bash,bash是一个文件,实际上bash是一个死循环文件,可以理解成while死循环文件,像Linux中的提示符[root@VM-12-11-opencloudos ~]就是bash提供的,可以理解为是while循环中的scanf函数的提示符,每次提示完然后你输入程序,至于结果bash会交给其他子进程处理,并不是bash自己处理。如果进程A正在被运行,那么CPU的寄存器里面,一定保存的是进程A的临时数据。看到的是先执行sleep(1);

2023-02-10 19:13:54 118

原创 Centos下文件解压缩与上传下载

表示创建一个压缩包名字为project.tgz,压缩的是project文件, -czvf中c表示创建,z表示压缩,f表示创建一个文件,即压缩包,v表示显示压缩过程。Linux中可以通过安装lrzsz将Linux中的文件下载到Windows中,也可以将Windows中的文件上传到Linux中。表示解压缩包project.tgz到/home/路径下,指定路径时-C必须添加上。表示将Linux中的文件下载到Windows中。表示将Windows中的文件上传到Linux中。2)Centos下文件的上传与下载。

2023-02-10 18:52:59 995

原创 线性回归的实现

random.shuffle(indices)表示打混indices列表中的元素的顺序,假设最终取出的元素是1,5,2,9,则最终去X中去取第1,5,2,9个元素,yield features[batch_indices],labels[batch_indices]就是做这件事,yield表示不停地返回一组又一组数据。X = torch.normal(0,1,(num_examples,len(w)))表示生成1000组X,每组X均值为0,方差为1,且长度为len(w)产生batch_size批量数据。

2023-01-21 15:02:42 140 1

原创 深度学习常用API

​ %matplotlib inline这一句经常出现在使用Jupyter中,使用%matplotlib inline 的唯一原因是即使未调用plt.show() 函数也可以渲染任何matplotlib 图表。但是,即使不使用%matplotlib inline,Jupyter 仍会将 Matplotlib 图显示为一个对象,在控制台中会出现 matplotlib.lines.Line2D object at 0x0392A9D0 之类的内容。5.设置横轴、纵轴字体大小。

2023-01-20 22:51:02 269

原创 Windows与Centos下的深度学习部署

第5步,输入pip install jupyter d2l安装相关的包,安装完输入jupyter notebook就可以运行jupyter实例了。一路默认安装即可,安装好后在anaconda的shell中输入python --version查看python的版本。2)Centos下部署深度学习,Windows作为可视化界面,利用Centos的CPU跑深度学习-CPU版本。第1步,win r输入dxdiag查看本地机器有没有安装英伟达GPU,如果没有,则Windows下无法操作。下载Pytorch的。

2023-01-16 13:46:59 448 1

原创 3.8 ·模板·STL

5.对于非模板函数和同名函数模板,如果其他条件都相同,在调动时会优先调用非模板函数而不会从该模板产生出一个实例。如果模板可以产生一个具有更好匹配的函数, 那么将选择模板.4. 一个非模板函数可以和一个同名的函数模板同时存在,而且该函数模板还可以被实例化为这个非模板函数.1.模板:可以使同一函数传递不同类型的值,即编写与类型无关的通用代码,也称为泛型编程。3. 用不同类型的参数使用函数模板时,称为函数模板的实例化。模板函数不允许自动类型转换,但普通函数可以进行自动类型转换!2.模板分为:函数模板、类模板。

2022-11-06 13:17:56 70

原创 Centos下常见指令讲解

echo "-a -l -i" |表示把字符-a -l -i给管道,此时管道里的-a -l -i都是字符,| ls表示ls从管道里读数据,ls会不会读我们不清楚,即使读了读出来的也是字符-a -l -i,而ls -a -l -i中的-a -l -i是命令行参数,因此这样写显然不行,因此加了个xargs,表示把管道里读出来的字符当做命令行参数送到ls中,因此写成了| xargs ls,最终是echo "-a -l -i" | xargs ls。tail -3 file.txt拿取file.txt的后3行。

2022-10-11 15:34:44 621

原创 3.7、内存管理(new·delete)

针对内置类型,new/delete 跟 malloc/free 没有本质区别,只有用法的区别,new/delete用法简化了!其实C++中的new、delete是为自定义类型准备的,不仅在堆中申请出空间,还会用构造函数和析构函数。内置类型中的new并不会自己初始化创建的变量,需要人工初始化;(文件映射、动态库、匿名映射)(可执行代码/只读常量)(全局数据、静态数据)(用户代码不能读写)

2022-10-11 10:44:21 142

原创 3.6 ·初始化列表·explicit·隐式类型转换·匿名对象·static·友元

声明为static的类成员称为类的静态成员,用static修饰的类的成员变量称为类的静态成员变量,用static修饰的类的成员函数,称为类的静态成员函数,类的静态成员变量一定要在类外进行初始化。建议能使用初始化列表就使用初始化列表初始化,使用初始化列表基本上没有什么问题,初始化列表的初始化顺序是按照申明的顺序来的,类中的内置类型的缺省实际上是给初始化列表的,初始化列表无法初始化类中的静态成员,初始化列表可以认为是类中成员变量定义的地方。:将一个类B变成另一个类A的友元(函数),这个类B的定义不在A里面。

2022-10-05 23:01:04 164

原创 3.5 类的默认6个成员函数

为了防止这种情况的发生,C++建立了析构函数,对于上述的情况就可以将析构函数的内容写成释放内存的代码。所谓的“对象实例化时编译器自动调用对应的构造函数” 是指你在类里面写了一个具体的构造函数代码,当你实例化(执行一个具体的值)时,系统会自动将你的实例形式与构造函数的形式比对,如果形式一致则将你实例中的具体参数值传给构造函数,经过构造函数给出结果。需要注意的是构造函数并不初始化内置类型成员,若还看见类中有内置类型成员被“赋值”这只是在给这个内置成员一个缺省值,并不是赋值,这是C++打的补丁。

2022-09-03 17:20:45 302

原创 3.4 如何判断变量是申明还是定义·如何计算类的对象的大小·this指针·命名规则·C++类型

一些基本的知识需要知道,如全局变量开辟了空间,类中的变量是没有开辟空间的,当你用值来赋值给类中的变量时,此时类中的变量就开辟了空间。你可以理解为类中的变量是图纸,当你赋值时,类中的变量这个图纸给你做了一栋房子,然后把你的值放进去这个房子里了。计算类的大小时,不考虑申明的函数的大小,因为申明的函数在公共代码区,如果一定要考虑大小,那么这个函数的大小要么是4字节要么是8字节,因为函数以指针形式存在!空类是指没有成员变量的类,但是可以有成员函数,这1字节是占位,标识对象存在,不存储实际数据。

2022-09-03 14:44:00 292

空空如也

空空如也

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

TA关注的人

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