自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 [Leetcode笔记] 动态规划相关

写题目写到了一些和动态规划相关的内容,所以在这里记录一下。

2024-04-02 10:37:09 198

原创 [Leetcode笔记] 滑动窗口相关

这道题很显然需要用到滑动窗口,肯定不是让你傻乎乎一遍一遍去遍历数组的内容然后遍历尝试。Leetcode 2269 找到一个数字的K美丽值。

2024-04-01 16:52:54 422

原创 [音视频学习笔记]八、FFMpeg结构体分析 -上一个项目用到的数据结构简单解析:AVFrame、AVFormatContext、AVCodecContext

上次我们做了一个简单的视频解码,这一次简单对这个代码进行一个剖析,对其中的数据结构进行一个解析。

2024-03-25 17:01:43 751

原创 喜欢我中文编程吗?这么喜欢中文编程哥们给你来点关键字呗

【代码】喜欢我中文编程吗?这么喜欢中文编程哥们给你来点关键字呗。

2024-03-25 11:01:36 135

原创 [音视频学习笔记]七、自制音视频播放器Part2 - VS + Qt +FFmpeg 写一个简单的视频播放器

话不多说,重走霄骅登神路前一篇文章。

2024-03-22 16:25:36 1024

原创 [音视频学习笔记]六、自制音视频播放器Part1 -新版本ffmpeg,Qt +VS2022,都什么年代了还在写传统播放器?

参考了雷神的自制播放器项目,100行代码实现最简单的基于FFMPEG+SDL的视频播放器(SDL1.x)不过老版本的代码参考意义不大了,我现在准备使用Qt + VS2022 + FFmpeg59重写这部分代码,具体的代码仓库如下:LeventureQys/MediaPlay-FFmpeg开发环境:Visual Studio 2022 + Qt 5.14.2 + FFmpeg 59首先我们Visual Studio 2022 + qt是准备好的,这里不做过多介绍了。这里简单说说我在做这一块的时候,为什么没

2024-03-21 23:09:27 570

转载 [音视频学习笔记]五、FLV格式及音频码流

Tag Header里存放的是当前tag的类型、数据区(tag data)的长度等信息。一个FLV文件,每种类型的tag都属于一个流,也就是一个flv文件最多只有一个音频流,一个视频流,不存在多个独立的音视频流在一个文件的情况。格式0与格式3的不同之处只有一点:格式0存储16位采样数据,采用的大小端顺序是创建FLV文件的平台所使用的大小端顺序。因此,不应使用格式0,而应使用格式3。格式11,Speex,音频以16 kHz采样率压缩为单声道,采样率字段值应为0,采样位深字段值应为1,声音类型字段值应为0。

2024-03-20 14:27:39 31

转载 [[音视频学习笔记]四、ACC格式及音频码流

ADIF:Audio Data Interchange Format 音频数据交换格式。这种格式的特征是可以确定的找到这个音频数据的开始,不需进行在音频数据流中间开始的解码,即它的解码必须在明确定义的开始处进行。故这种格式常用在磁盘文件中。是AAC音频的传输流格式。这种格式的特征是它是一个有同步字的比特流,解码可以在这个流中任何位置开始。总结:ADTS可以在任意帧解码,也就是说它每一帧都有头信息。ADIF只有一个统一的头,所以必须得到所有的数据后解码。

2024-03-20 09:42:51 314

原创 Linux-Arm环境下配置编译qt-everywhere及交叉编译环境

最近在搞交叉编译的事,手上拿了个同事的香橙派玩交叉编译,现在来到了第一步,就是先在arm上配置qt的开发环境。当然了Qt没有直接提供qt on arm,而是需要自行在arm环境下编译一个qt环境出来,所以这里需要使用到qt提供的qt everywhere套件在板载系统上编译。

2024-03-20 00:12:14 833

转载 [音视频学习笔记]三、H.264视频码流解析

1、编码是为了将数据进行压缩,这样在传输的过程中就不会使资源被浪费。2、用一个简单的例子来说明编码的必要性:当你此刻显示器正在播放一个视频,分辨率是1280720,帧率是25,那么一秒所产生正常的数据大小为:1280720(位像素)*25(张) / 8(1字节8位)(结果:B) / 1024(结果:KB) / 1024 (结果:MB) = 2.75MB。显然一秒这么大的数据你是无法接受的,需要将数据进行压缩。

2024-03-15 17:18:43 68

转载 [音视频学习笔记]二、什么是PCM音频?一些常见的PCM处理

PCM(Pulse Code Modulation)也被称为脉冲编码调制。PCM音频数据是未经压缩的音频采样数据裸流,它是由模拟信号经过采样、量化、编码转换成的标准的数字音频数据。

2024-03-15 15:54:46 44

转载 [音视频学习笔记]一、YUV和RGB像素数据的常见处理

YUV 是一种颜色编码方法,和它等同的还有 RGB 颜色编码方法。因为RGB颜色编码的方式是我们从小看到大的,所以先简单聊聊RGB颜色编码。

2024-03-15 14:43:27 64

原创 Linux学习笔记(一)Linux基本指令

本文旨在自学Linux相关知识,这里简单聊聊记录一下。

2024-03-12 14:25:46 484

原创 [旧日探幽]我们常说的TCP协议,究竟有哪些细节?

面向连接是相对于另一个传输层协议UDP(User Datagram Protocol, 用户数据报协议)而言的。TCP在开始传输数据前要先经历三次握手建立连接,并通过连接一对一发送消息,传输结束后通过四次挥手断开连接。而UDP是无连接的,发送方在发送数据之前不需要与接收方建立连接,即刻可以传输数据,每个UDP数据包都是独立的,相互之间没有关联,因此UDP可以一对一、一对多或多对多发送消息。是否可靠也是相对于UDP而言的。

2024-02-21 23:45:08 746

原创 全流程点云机器学习(二)使用PaddlePaddle进行PointNet的机器学习训练和评估

这不是高支模项目需要嘛,他们用传统算法切那个横杆竖杆流程复杂耗时很长,所以想能不能用机器学习完成这些工作,所以我就来整这个工作了。工欲善其事,必先利其器,在正式开始之前,我们先要搞懂如何切分数据集。本系列文章所用的核心骨干网络代码主要来自原文的代码有点问题,这里做了一点修改,主要应用了paddlepaddle进行的pointNet进行分割任务。

2024-02-21 11:41:04 703

原创 全流程点云机器学习(一)使用CloudCompare自制sharpNet数据集

我们可以在网站上下载到SharpNet的数据集和标签,我们下载下来解压看看里面的结构以下是训练集点云文件组以下是训练集点云的标签组也就是说实际上是一个pts文件对应一个.seg文件。其中pts文件好理解,就是一个个的明文点云,内容如下:打开seg文件,里面行数和同名的pts文件行数相同,这个.seg文件中代表的意思就是对应行数的点所对应的label标签,通常以一个数字来表示,比如1是背景,2,3,4代表各种各样的对象,具体每个数字对应的对象是什么。

2024-02-21 09:28:20 915

原创 全流程机器视觉工程开发(四)PaddleDetection C++工程化应用部署到本地DLL以供软件调用

这个是因为在opencv新版本中将这些标识符都改名了,现在将这些未定义的标识符从CV_xxx_xxx改成cv::xxx_xxx即可,比如:改为:把报错的地方都改一下就可以了。

2024-01-31 22:30:43 1532

原创 全流程机器视觉工程开发(三)任务前瞻 - 从opencv的安装编译说起,到图像增强和分割

最近开始做这个裂缝识别的任务了,大大小小的问题我已经摸得差不多了,然后关于识别任务和分割任务我现在也弄的差不多了。现在开始做正式的业务,也就是我们说的裂缝识别的任务。作为前言,先来说说场景:我们现在如果说想直接使用这个图片来进行图片识别的话,会有很多的问题。其中最主要的问题就是图片实在是过大,5120x5120的图片会导致图片不论是训练还是推理期都太长了,并且为了更好地处理图片,我们都会要求图片的训练期和推断图片都必须是比较小的,这样才有利于我们后续不论是实例分割还是目标识别任务。

2024-01-31 21:42:30 1104

原创 全流程机器视觉工程开发(二)PaddleDetection:拉框,然后开始训练模型

我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做一个全流程机器视觉工程开发,不涉及过多理论。书接上文,我们在先前的文章中说明了如何准备PaddleDetection环境和Labelme工具,现在我们来做后续的开发工作。到这里开始我们就可以开始尝试训练模型了。

2024-01-19 14:10:42 980

原创 全流程机器视觉工程开发(一)环境准备,paddledetection和labelme

我现在在准备做一个全流程的机器视觉的工程,之前做了很多理论相关的工作。大概理解了机器视觉的原理,然后大概了解了一下,我发现现在的库其实已经很发展了,完全不需要用到非常多的理论,只需要知道开发过程就可以了,甚至paddlex已经直接有了傻瓜式模型训练的软件,所以我现在准备来做一个全流程机器视觉工程开发,不涉及过多理论。

2024-01-18 16:28:02 1168

原创 简易机器学习笔记(十一)opencv 简易使用-人脸识别、分类任务

刚刚说了两种,一个是划分区域,一个是打标签,那么能不能即划分区域,又打上标签呢?当然是可以的,接下来就简单说说怎么做。

2024-01-13 00:30:15 1157 1

原创 简易机器学习笔记(十)Windows下 PaddlePaddle配置CUDA加速环境

大伙既然都来做这个了,那配个CUDA环境肯定是必不可少的了吧(笑)最前面的最前面,

2024-01-05 23:29:40 1660 1

原创 简易机器学习笔记(九)LeNet实例 - 在眼疾识别数据集iChallenge-PM上的应用

我们需要读取两部分数据,分别是训练集和评估集,这两个集是分开的首先我们需要进行一个预处理部分:# 对读入的图像数据进行预处理# 将图片尺寸缩放道 224x224# 读入的图像数据格式是[H, W, C]# 使用转置操作将其变成[C, H, W]# 将数据范围调整到[-1.0, 1.0]之间return img定义一个训练集数据读取器类似之前的,我们需要将训练集划分batch,还需要将其打乱进行。至于Label,则是由名称决定的分组读取完毕之后,# 定义训练集数据读取器。

2024-01-04 16:06:06 1069 1

原创 简易机器学习笔记(八)关于经典的图像分类问题-常见经典神经网络LeNet

图像分类是根据图像的语义信息对不同类别图像进行区分,是计算机视觉的核心,是物体检测、图像分割、物体跟踪、行为分析、人脸识别等其他高层次视觉任务的基础。图像分类在许多领域都有着广泛的应用,如:安防领域的人脸识别和智能视频分析等,交通领域的交通场景识别,互联网领域基于内容的图像检索和相册自动归类,医学领域的图像识别等。这里简单讲讲LeNet我的推荐是可以看看这个视频,可视化的查看卷积神经网络是如何一层一层地抽稀获得特征,最后将所有的图像展开成一个一维的轴,再通过全连接神经网络预测得到一个最后的预测值。

2024-01-03 17:12:09 717 2

原创 简易机器学习笔记(七)计算机视觉基础 - 常用卷积核和简单的图片的处理

这里实际上涉及到了挺多有关有关理论的东西,可以详细看一下paddle的官方文档。不过我这里不过多的谈有关理论的东西。在代码中,我们实际上是用不同的卷积核来造成不同的影响,我这里也是paddle中对于卷积核的几个比较简单的应用。实际上你也可以理解成通过卷积算子对图像进行了处理,而输出的参数矩阵也就是卷积核,卷积核会决定对图像的处理结果。卷积核对图像造成的影响可以参考上方常见卷积核汇总。飞桨卷积算子对应的API是paddle.nn.Conv2D,用户可以直接调用API进行计算,也可以在此基础上修改。

2024-01-03 14:04:35 1668 2

原创 简易机器学习笔记(六)不同优化算法器

我们之前不是说了有关梯度下降公式的事嘛,就是那个这样梯度下降公式涉及两个问题,一是梯度下降的策略,二是涉及到参数的选择,如果我们选择固定步长的时候,就会发现我们求的值一直在最小值左右震荡,很难选择到我们期望的值。假设上图中,x0为我们期望的极小值,yB = xA - yA’xA的时候,xB实际上蹿到了极小值的右侧去了,当我们yC = xB - yB’xB的时候,我们求的yC又跑到极小值的左边去了,反正就是一直会在极小值x0附近震荡。

2024-01-02 23:31:15 805

原创 机器学习笔记(五)更换损失函数:交叉熵

前言我们之前用的是均方差作为我们神经网络的损失函数评估值,但是我们对于结果,比如给定你一张应该是0的照片,它识别成了6,这个时候这个均方差表达了什么特别的含义吗?显然你识别成6并不代表它比识别成1的情况误差更大。所以说我们需要一种全新的方式,基于概率的方案来对结果进行规范。也就是我们说的交叉熵损失函数。至于什么是交叉熵损失函数,由于本文不涉及实际的数学论证,感兴趣可以看这个简单的小视频:你...

2024-01-02 23:12:00 532

原创 简易机器学习笔记(五)更换损失函数:交叉熵

我们之前用的是均方差作为我们神经网络的损失函数评估值,但是我们对于结果,比如给定你一张应该是0的照片,它识别成了6,这个时候这个均方差表达了什么特别的含义吗?显然你识别成6并不代表它比识别成1的情况误差更大。所以说我们需要一种全新的方式,基于概率的方案来对结果进行规范。也就是我们说的交叉熵损失函数。

2024-01-02 23:06:22 739

原创 机器学习笔记(四)初识卷积神经网络

前言第一次写卷积神经网络,也是照着paddlepaddle的官方文档抄,这里简单讲解一下心得。首先我们要知道之前写的那些东西都是什么,之前写的我们称之为简单神经网络,也就是简单一层连接输出和输出,通过前向计算和逆向传播,以及梯度下降的方式让结果慢慢滑向我们期望的终点。这种方法固然好,但是它的限制也是显而易见的:需要我们提供损失函数需要对数据进行相当大量的计算只能处理线性函数,而对非...

2024-01-02 09:35:00 942

原创 简易机器学习笔记(四)初识卷积神经网络

第一次写卷积神经网络,也是照着paddlepaddle的官方文档抄,这里简单讲解一下心得。首先我们要知道之前写的那些东西都是什么,之前写的我们称之为简单神经网络,也就是简单一层连接输出和输出,通过前向计算和逆向传播,以及梯度下降的方式让结果慢慢滑向我们期望的终点。ok为了解决以上的这些问题,人们又研发出了全连接神经网络和卷积神经网络,当然了全连接神经网络作为老黄历,本身在paddle教程中相当于是一个对于卷积神经网络更好的理解的渐进式的介绍,这里也简单聊聊。

2024-01-02 01:10:26 1570

原创 简易机器学习笔记(三)简单手写识别

训练过程采用二层循环嵌套方式,训练完成后需要保存模型参数,以便后续使用。#数据处理部分之前的代码,加入部分数据处理的库。前期需要将库导入,还需要进行一些初始化操作。然后我们画个图试试就行。综上就是模型训练过程。

2023-12-25 17:10:44 760

原创 机器学习笔记(三)简单手写识别

目标实现一个简单的手写识别的脚本,同样的,流程分五步走:读入数据初始化模型训练模型训练样本集乱序校验数据有效性前期准备前期需要将库导入,还需要进行一些初始化操作数据处理部分之前的代码,加入部分数据处理的库点击查看代码#加载飞桨和相关类库import paddlefrom paddle.nn import Linearimport paddle.nn.functi...

2023-12-25 17:10:00 457

原创 简易机器学习笔记(二)使用paddlepaddle,再探波士顿房价预测

点击查看代码#self代表对象自身#初始化父类的参数#定义一层全连接层,输入维度是13,输出维度是1#网络的前向计算函数return x在上面这个类中,不论是前向计算还是初始化,都是继承了这个paddle.nn.Layer类,用其内部的成员函数执行的。

2023-12-22 17:21:24 1421

原创 简易机器学习笔记(一)从波士顿房价预测开始,梯度下降

其实这一章节比较简单,主要是概念,首先在波士顿房价这个问题中,我们假设了一组线性关系,也就是如图所示我们假定结果房价和这些参数之间有线性关系,即:然后我们假定这个函数的损失函数为均方差,即:那么就是说,我们现在是已知y和x,来求使得这个损失函数Loss最小化的一个w和b的组合读取数据这里主要需要注意两点,就是对数据进行归一化。所谓归一化就是将指定变量按照其在整个数据集中的上下限,投影出一个0-1之间的值,并以此来作为计算的标准。这样做的好处是方便计算,而且后面能更好地评估值的影响。还有一件事就是划

2023-12-22 14:13:23 895 1

原创 引发C++异常的常见原因(一)从报错地址到错误症状

在进行C++软件开发的过程中,会遇到很多问题,网上差不到,或者查到了也没什么信息可以用,所以这里想到了就将一些常见的问题放在一起,归纳整理一下。本文主要的内容来源于CSDN的大佬文章:https://blog.csdn.net/chenlycly/article/details/125529931 ,我主要是做个笔记常见问题1.变量未初始化有的时候,有的编译器对Debug下会自动对一些变...

2023-11-23 14:57:00 1154

原创 C++跨DLL内存所有权问题探幽(三)导致堆问题的可能性

这里提供一个可能性,不一定是内存所属地址冲突的问题,除了MT和 MD编译,还有可能是你调用库的头文件和实际上头文件不一致。比如我这里有一个lib文件,还有一个头文件,这个lib文件和头文件如果对不上就有可能出现这个问题。0xC0000374: 堆已损坏。(参数: 0x00007FFA1E9787F0)。_Mem 是 nullptr。

2023-11-22 15:54:15 418 1

原创 C++跨DLL内存所有权问题探幽(二)CRT中MT和MD混用导致的堆损坏

在C++中,MD(Multi-threaded DLL)和MT(Multi-threaded)是Microsoft Visual C++编译器提供的不同的运行时库选项。它们在处理线程、内存管理和链接方式上有所不同。

2023-11-10 11:07:56 639 2

原创 C++跨DLL内存所有权问题探幽(一)DLL提供的全局单例模式

最近在开发的时候,特别是遇到关于跨DLL申请对象、指针、内存等问题的时候遇到了这么一个问题。

2023-11-10 10:27:44 685 1

原创 [框架设计之道(二)]设备、任务设置及业务流程

以这样的文件夹形式存放各个设备的参数信息,所有的信息都是以本地文件的形式存放的,所有的文件都需要热取用,因为随时可能会发生中途设备信息修改等等,所以再接口getConfigContain中,需要每次打开文件进行读取,而不是提前读取好了放在本地。对于配置文件管理模块,我不希望提供过多和过花哨的接口。但是这里有问题,值得注意的一点是,扫描仪的并不是提前可以通过扫描获得的,而是只能通过提前设定好ip、sn和key来尝试连接的,所以扫描仪设备和所有的设备都不一样,需要在跳过设备信息之前提前确定扫描仪的信息。

2023-09-11 14:18:53 204

原创 [框架设计之道(一)]软件基础框架

中间经历了几次波折,最终才算是有时间把软件开发的框架确定下来了。现在开发才终于算是开始有了个起头。其实在使用Qt做大型软件的时候会遇到一些问题,为此也要不得不做一些妥协。关于这个,我觉得你可能需要看一下这两篇文章[Qt开发思想探幽]QObject、模板继承和多继承[Qt开发探幽(二)]浅谈关于元对象,宏和Q_ENUM越是深入开发越需要注意一点:Qt只是一个库,一个开发框架,它和boost库,MFC库并没有本质区别,它并不一定能撑起你整个的开发框架,你甚至可能要中途引入很多各种各样的库。

2023-09-04 15:48:15 108 1

空空如也

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

TA关注的人

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