自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 VSCODE调试程序

(1)把路径改成真正执行的程序的绝对路径(${workspaceFolder}这个代表就是项目根目录)把前面讲过的launch.json中的preLaunchTask修改成Build。下面两个意思一个是重新开始、一个是结束调试。记得把make中的mingw32-make改成make。这个就是进入函数里面,它前面那个是跳过函数调试。(2)然后先注释preLauchTask。(3)重新编译一下文件,make一下。(4)打断点,然后按F5,开始调试。上面是完整的task.json。3、进阶(自动化调试)

2024-08-06 10:44:29 288

原创 cmake基本介绍及使用

(1)版本号(一般在终端查自己安装的版本号,这里比小于等于那个安装的就行)(3)编译生成可执行文件(这里生成叫helloWord_cmake)(2) 项目名称(自己取,这里就叫HELLOWORLD)上面这句其实就是等价于在终端执行。然后使用外部构建方法运行就行啦。5、cmake两种构建方法。3、cmake常用变量。6、cmake项目实战。

2024-08-06 09:50:31 233

原创 GDB调试器

按下回车键,会运行上次的指令(比如你运行continue,你再回车,就会下一个continue)display i (这样每一次continue后,就会显示当前变量i的值)continue(继续执行程序,他就会运行到下一个断点,简写是c)i b (这个也可以看断点,这是break 和 info的简写)1、生成能调试的执行文件(一定要加-g)执行gdb 执行文件(会报下面这个 )b 14 (b是break的简写 )p i (就print i 的简写)print i (打印变量i的值)r (就是run的缩写)

2024-08-06 08:55:12 241

原创 deepstream应用示例1详解

/"nvv4l2decoder": 元素的类型,是一个 NVIDIA 硬件加速的视频解码器(nvv4l2decoder),用于解码 H.264 编码的视频流。//"h264parse": 元素的类型,是一个 H.264 解析器(h264parse),用于解析 H.264 编码的视频流。//"nvdsosd": 元素的类型,是一个显示元素(nvdsosd),用于在视频帧上绘制对象边界框、标签和其他元数据。*"filesrc": 元素的类型,这里是一个文件源(filesrc),用于读取文件。

2024-07-29 10:25:16 566

原创 RTMP推流

写上面定义的read_u8()、read_u*()函数。接上在ret前}后 加上packet的信息。2)应该是读完9个字节,再接着读4字节。完善(分配内存、建立连接有可能失败)1)写入flv文件地址和rtmp地址。1)创建RTMPPacket对象。2)连接RTMP服务器函数。3)send data函数。2)在flv文件中读数据。2、连接RTMP服务器。1)打开flv文件函数。3、RTMP消息格式。3)避免音视频不同步。

2024-07-25 10:26:31 177

原创 H264视频编码

NV12存储格式在前面讲,因为是YYYYYYYY UVVU格式存储,Y个数有640*480=307200个。出现花屏(在主函数中加个int base = 0;创建编码器,得到上下文返回(即返回enc_ctx的地址)注意编码完成后要再调用一次,这样就不会漏数据在缓冲区了。2、使用的时候调用上面函数就行(例如下图)在函数中继续的给enc_ctx设置参数。注意,定义一下ret,在函数里面最开头。3、进行数据编解码需要下面两个函数。在需要的函数中调用上面方法即可。接上(获取转换好的数据)有个错printf写错。

2024-07-24 21:46:37 196

原创 视频处理基础知识2

1)分辨率2)帧相关5、分析工具。

2024-07-24 20:53:23 229

原创 视频处理基础知识1

1)帧的分类(I帧/P帧/B帧,实时通信一般使用I帧跟P帧,因为B帧解码需要占用过多cpu;GOP就是将相似的图像分成一组,比如向下面这几个图,背景基本一样,主要就望远镜区别,基本就可以保存变化的地方就行。图像的组成:像素、RGB(每个像素由三个发光二极管组成)、分辨率(横纵向像素的个数乘积)帧率:每秒钟采集/播放的图像的个数(动画25帧/s ,实时通信一般15帧/s就够了)码流(下面格式乘以8,因为传输的是比特,下面计算的是字节)音频是:0 ,摄像头是0,桌面是1,摄像头及音频是0:0。

2024-07-24 20:43:35 340

原创 音频处理过程

(实时音频,直播教育这些,基本上使用OPUS(新出的)。运用最广ACC编码器,也是广泛运用于直播)网上评测结果OPUS>ACC>Ogg。3)用ffmpeg获取acc(xxx.mp4代表MP4文件,3.acc就是输出文件)重采样--》转换成AVFrame --》创建编码器--》编码--》AVPacket。哈夫曼编码(将出现频率高的用短的编码代替,出现频率低的用长的编码代替)编码前一般使用AVFrame,编码后使用AVPacket。1)有损压缩(频域或者时域遮蔽,过滤掉不用的音频)2)无损压缩(熵编码)

2024-07-24 19:04:52 409

原创 安装deepstream流程

1、安装NVIDIA驱动和CUDA 12.4。

2024-07-24 14:38:20 1924

原创 pcl特征提取相关代码

/注意Harris的输出点云必须是有强度(I)信息的 pcl::PointXYZI,因为评估值保存在I分量里 pcl::PointCloud<pcl::PointXYZI>// /*为了处理点云中包含多个模型,我们在一个循环中执行该过程,并在每次模型被提取后,我们保存剩余的点,进行迭代。// /* 为了从点云索引向量中分割出每个聚类,必须迭代访问点云索引,每次创建一个新的点云数据集,并且将所有当前聚类的点写入到点云数据集中 *///创建点云索引向量,用于存储实际的点云信息。

2024-07-18 08:12:18 445

原创 使用vcXsrv可视化pcl文件

export MESA_GL_VERSION_OVERRIDE=3.3 #(前面步骤二git拉取的测试项目需要的版本是3.3)export DISPLAY=192.168.1.100:0.0 #(192.168.1.100是我windows的ip)unset LIBGL_ALWAYS_INDIRECT #(不能少,有这一句上面那一句才生效)3、按上面操作后,在运行菜单就能看到它在运行了。# 设置连接windows的VcXsrv。# 修改OpenGL版本和项目版本一致。4、去wsl中配置,即设置环境变量。

2024-07-17 11:08:13 295

原创 音视频推流

注意:ffmpeg不具备直接使用效果,他只是可以操作音频数据(PCM)和视频数据(YUV),通过设备(显示器和喇叭才能听到和看见)

2024-07-17 11:01:40 106

原创 在自己项目中使用PCL

8、最后通过pcl_viewer test_pcd.pcd可以看到最终生成的可视化图。5、进入build文件夹,对上一级进行编译,使用cmake ..6、在bulid文件夹下,运行make指令,生成真正的可执行文件。生成一个文件名为test_pcd.pcd的pcd文件。1、创建文件目录pcpcd_write。3、创建CMakeLists.txt文件。得到真正的可执行文件pcd_write。2、在进入文件目录,创建cpp文件。7、使用./pcd_write运行。并在cpp文件中写入代码。

2024-07-14 15:20:22 231

原创 智能家居小程序

WIFI模块:ESP8266-015。系统板:STM32F103C8T6。立创EDC画板子,然后微立创下单。光照度传感器: BH1750。温湿度传感器:DHT11。

2023-11-16 21:48:05 139

原创 BMS系统项目

(2)项目实现的shell命令解读(RT-Thread)1、通过电压监测是否冲满,通过电压可以监测是否放完电。欠压保护(百分之几得电,快关机了)过压恢复(百分之90多)欠压恢复(就是欠压之上)

2023-11-16 09:11:12 210

原创 STM32-创建项目流程

(2)添加库函数,项目中创建Library文件夹,然后去库文件-->Libraries-->STM32F10x_StdPeriph_Driver-->src文件下所有的文件全部选中,复制到项目中的Library文件夹中;打开库文件--> Libraries --> CMSIS --> CM3 --> DeviceSupport --> ST --> STM32F10x --> startup --> arm (里面全部文件)5、添加工程必要文件(打开刚刚下载的库文件夹)创建文件夹,存放启动文件。

2023-11-02 20:26:44 322

原创 51单片机-点阵屏led

offest作为偏移量,count作为计时。count=10,偏移量加1,就相当于得到下一帧的图案表示。1、使用文字摸提取文件,提取图案的16进制表示数组。进行位选,段清零,这样就不会影响多列同时了。这样就能选择每一列哪个亮了。

2023-10-29 17:14:29 422

原创 51单片机-串口

RI==1表示电脑发送数据了(因为发送会触发中断)然后复位为0。使用SUBF进行发送,TI==0代表结束,结束后需要复位。设置波特率(根据这个代码,去配置urt_Init())参照上面配置下面这个,然后删掉上面这个代码。电脑发送数据给串口,串口又发回给电脑。下载、打开串口,设置波特率和校验位。连续发送(容易有误差,给个延迟)二、直接在串口处操控led。电脑与单片机通过串口交互。

2023-10-28 22:10:47 461

原创 51单片机定时器

key值=1,按一下向一个方向,再按一下,向另一个方向。设置独立按键(这个是为了,控制左移还是右移的标志)cror代表循环右移一位,到边界还会循环。2、下面代表每1秒执行一次P2_0赋值。crol代表循环左移一位。

2023-10-28 21:13:00 115

原创 矩阵按键简单使用

1、写矩阵按键(下面在按这个格式把别的行也写入进去)

2023-10-28 20:44:34 117

原创 模块化编程

1、函数单独写在一个文件中.c,然后声明也写在一个文件中.h,在mian.c中引用。2、安装目录下面的文件夹用<>,在自己文件夹目录下就是""3、创建自己的(先把函数放在c文件,再创建头h文件)

2023-10-28 19:49:51 107

原创 嵌入式-数码管控制

一、数码管显示数字,P2_4, P2_3,P2_2,这三个组合起来代表1-8的二进制表示代表1-8个led。P0代表要显示的数字的16进制表示。比如要显示数据6,那就是0111 1101,那么16进制就是0x7D,所以p0=0x7D。这个图就是表示led灯,二、数码管,动态扫描。

2023-10-28 19:40:52 547

原创 嵌入式项目电灯

1、原理,电灯有个正负极,当正确接入电源正负极就能点亮(如正极5v,负极0v),单两边同时接入正极,就不会亮(两端都是5v),所以通过控制电平,来实现控制led等的亮暗。cpu通过给寄存器写入1,则赋予高电平,写0赋予低电平,即可达到控制目的。进入刚刚的工程文件,但是发现里面是空的,是因为kiel默认不生成文件下载文件,所以需要设置一下。3、控制第一盏灯,让它亮应该为二进制 1111 1110,但是需要转换成16进制。4、打开单片机软件(STC-ISP)重新打开(单片机的开关)这样就不会重复执行函数。

2023-10-28 13:18:16 130

原创 创建一个Keil项目

5、就会得到下面这个,可以在Source Group 1下面编写代码了。3、选择型号(因为没有STC,用下面这个替代,功能差不多)6、右键source Group 1,添加c语言文件。2、选择存放的文件夹,还有设置项目名。7、取名字(第一个应该都叫main)第二个build,建立工程的意思。4、选择不用启动文件。

2023-10-28 12:50:09 147

原创 商品秒杀系统整理

7、在消息队列中,我们处理信息,查数据库(1、如果我们查到数据库库存为空,并且返回库存不足。2、如果处理下单成功,将订单信息缓存并返回订单)8、前端就通过回调getResult()方法,查到订单就返回订单id,如果库存为空就返回-1,0就代表还在排队中。5、使用lua脚本进行秒杀资格判断(将库存和用户下单成功后的订单写入到缓存中,每次进来先用lua脚本进行判断)6、将信息放入消息队列中,然后直接返回0表示排队中,后续客户端轮询查看结果。2、互斥锁解决缓存击穿问题,用缓存空值解决缓存穿透问题。

2023-09-25 15:42:26 575

原创 商品秒杀系统思路

2、又发现问题,一个用户可以下好几单,所以想到用商品id和用户id做个唯一索引,解决了,但是后面发现,我再开同一个商品的秒杀,之前的用户不能抢到了。Spring中事务是通过代理对象去实现的事务的,但是现在这个相当于是用this调用的,所以事务会失效。4、解决用互斥锁解决缓存击穿问题(使用秒杀商品id做一个分布式锁)seckGood:+"GoodId"但是会出现释放错锁的问题(生成有一个uuid,与线程id做个拼接,获取释放锁的时候进行判断)3、优化(使用lua脚本预扣库存,如果有,并加入消息队列里面)

2023-09-25 10:44:18 211

原创 评测管理的业务逻辑

6、循环遍历该问题的选项,然后与5中获取到的对象所选这个题目的选项进行对比,如果一样,把isChoose设置为真(isChoose只在实体类中出现,表中没有的,因为我们只是要返回一个结果集。1、一次性查询所有题库里的问题和答案(将题库获得题库里面所有id的List<id>)5、获取到问题人做该题的细节(通过传入做问卷的id、问题id)答题人每个问题的选项都得查一遍(问题次数,有多少个问题就得查多少次)题库里面的每个问题要查一次选项(有多少问题就得查多少次)2、 把题库分开,然后一个题库一个题库处理(循环)

2023-09-16 01:08:20 139

原创 分布式锁使用

但还是可能会出现问题,因为需要跟redis通信,你获取到redis中的值后,执行判断后,如果恰好别的线程获取到了锁,还是会错删别人的锁(所以查询锁和判断锁应该是原子操作)但是如果执行业务时间过长,锁被自动删了,等业务执行完了,删除的锁可能是别的业务获取到锁后执行的,所以,还要加个判断。1、在微服务项目中,上面的锁方法只能锁住一个单体的,分布式需要使用分布式锁。但是,如果进入判断后,还没执行到过期时间语句就断电,那也会死锁,所以应该使用。可以通过lua脚本解决删除。redis中的setnx。

2023-09-10 19:41:50 184

原创 商城系统优化

但还是可能会出现问题,因为需要跟redis通信,你获取到redis中的值后,执行判断后,如果恰好别的线程获取到了锁,还是会错删别人的锁(所以查询锁和判断锁应该是原子操作)6、给数据加锁解决缓存击穿问题,给查询数据库的语句里面的代码块加锁,进去后再判断一下缓存里面有没有存在,然后就查询,查到后放入缓存中。但是如果执行业务时间过长,锁被自动删了,等业务执行完了,删除的锁可能是别的业务获取到锁后执行的,所以,还要加个判断。2、上面三个中,主要是使用合理的数据库查询语句,减少数据库查询次数,然后使用缓存。

2023-09-10 19:39:25 220

原创 ElasticSearch

二、match查询 (就像mysql中 where account_number = 20),但是他使用的是倒排索引,只要包含内容,就都能检索到,有点像模糊查询,他会按评分进行排序(评分就是匹配度)在索引下更新字段(没法,只能把数据迁移到别的索引 get /老索引/_mapping 就能获取老的索引,然后复制到新的,并适当修改)(4)倒排索引(索引表,就是把句子进行拆分,做成一个索引表,句子中有相关的单词就把句子加入到记录中,最后再进行相关性得分)

2023-09-10 16:53:13 113

原创 git使用

5、配置ssh免密连接(xxx@xxx.com就是码云上注册的邮箱)8、创建好项目后,把一些文件忽略掉(我们只提交我们的代码就行)7、去idea进行项目管理,创建新项目,并由此仓库管理。添加公钥(标题随便自己取,公钥就是刚刚复制的那个)commit and push是提交到码云。3、右键进入git bash进行配置。4、配置用户名,邮箱(码云上的邮箱)2、git官网下载git客户端。9、把需要的文件,加入版本控制。把刚刚复制的地址复制过来。复制到码云里面进行配置。1、在码云上注册账号。

2023-08-31 16:37:27 662

原创 Docker容器

有了docker,可以获取各种软件的镜像,将软件的镜像下载到linux中,基于这个镜像就能够去启动这个容器,这个容器就是这个镜像的完整运行环境,比如mysql、redis、nginx,还能秒级启动他们。容器间也是相互隔离的。

2023-08-31 16:02:54 431

原创 RabbitMQ

binding:exchange和queue之间的虚拟连接,binding中可以包含routing key,Binding信息被保存到exchange中的查询表中,用于message的分发依据。vitual host:当多个不同的用户使用同一个RabbitMQ Server提供服务时,可以划分出多个vhost,每个用户在自己的vhost创建exchange/queue等。2、工作模式 (生产者发送大量消息给队列,来不及处理,所以用多个工作线程来处理)3、发布确认(单个发布确认,批量发布确认、异步发布确认)

2023-08-29 23:55:19 1965

原创 项目部署(前后端分离)

1、前端项目 (打包成dist文件,放到nginx的html目录下面),然后配置nginx。使用之前的shell脚本(然后赋予用户权限),最后运行脚本。

2023-08-06 22:53:56 359

原创 Nginx

过程(访问100:82端口会转发到101:8080,也可以直接通过101:8080访问的)使用下面方法配置,使得可以在任意目录下执行./nginx -s reload。4、具体运用,反向代理。

2023-08-06 22:33:03 198

原创 git开发过程中的使用

1、先创建本地分支,然后修改代码。回到master分支。

2023-08-06 22:09:28 395

原创 读写分离实现sharding-jdbc

查询策略(轮询,指定哪个是主库哪个是从库)二、使用sharding-JDBC实现。2、配置文件(名字要对应)允许bean定义覆盖。

2023-08-06 22:02:00 145

原创 Mysql主从复制

6、从库登录mysql执行下面操作(这个user跟password就是之前配置的,那个master_log_pos值为上面查到那个位置值),然后start slave。2、主库开启二进制日志(binlog),然后重启mysql,systemctl restart mysqld。Mysql主从复制(主要是监听主库的binlog日志,然后去进行相应的操作)4、登录mysql,记录数据值。3、登录数据库执行下面SQL。5、从库配置文件,然后重启。

2023-08-06 21:46:55 145

原创 Redis

Redis是键值对key-value存储,它的value有5种数据类型。当有菜品更新时,可以清理全部菜品缓存或者那个类的菜品缓存。3、使用(这个缓存是基于内存的,当关闭进程后,就没了)1、Spring-cache在这个依赖里面就有。2、配置(redis,及缓存过期时间)2、启动类加注解EnableCache。查询时先查缓存有无,没有的话加入缓存中。1、使用redis缓存登录验证码,二 SpringCache框架。有序集合sorted set。1、value五种数据类型。改造成Redis作为缓存。

2023-08-06 18:53:32 1312

空空如也

空空如也

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

TA关注的人

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