自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(293)
  • 资源 (1)
  • 收藏
  • 关注

原创 图像格式解读

2023-06-20 16:18:06 127

原创 TDA4算法部署

2023-06-20 14:35:52 301

原创 tensorRT 模型部署

一般来说,推理过程中,权重值的数量远小于激活值,仅仅对权重执行量化的方法能带来的压缩力度和加速效果都一般。浮点数=量化缩放scale 因子 *量化定点数, 量化的过程就是得到一个最优的scale(实数和整数的对应关系)和zero point (表示实数中的0经过量化后的对应整数)去取代浮点数, 这个任务就落到了怎么去选最优的量化阈,量化阈就是上面说的阈值 当S取大时,可以扩大量化域,但同时,单个INT8数值可表示的FP32范围也变广了,因此INT8数值与FP32数值的误差(量化误差)会增大;

2023-06-20 14:17:12 1515 2

原创 yolov7 - pose 系列CUDA 前后处理

【代码】yolov7 - pose 系列CUDA 前后处理。

2023-04-28 14:15:44 648 1

原创 重建二叉树

【代码】重建二叉树。

2023-04-25 16:03:47 76

原创 模型部署三、支持多维动态batch设置

模型转换支持多维度动态batch设置。

2023-04-18 14:01:55 246

原创 模型部署二 、模型导出方法

【代码】模型部署二 、模型导出方法。

2023-04-18 13:58:41 203

原创 模型部署一

模型部署

2023-04-18 11:30:51 1144

原创 tensorRT 多batch 推理

tensorrt 多batch 推理

2023-02-27 18:27:02 1041 1

原创 tensorRT资料

2022-01-08 14:35:28 1145

原创 【无标题】https://github.com/NVIDIA/TensorRT/tree/7.1.3/samples/opensource

保存

2022-01-08 14:29:48 316

原创 SPS和PPS

sps 能够获取到哪些信息?proflie 编码等级 压缩方面level 图像相关分辨率参考帧GOP 帧数显示帧顺序

2021-01-05 21:00:39 579 1

转载 说得清的Epoll原理

分享一篇epoll原理文章,自认为说得很透彻呢。本文核心思想是:要让读者清晰明白 Epoll 为什么性能好。文章会从网卡接收数据的流程讲起,串联起 CPU 中断、操作系统进程调度等知识;再一步步分析阻塞接收数据、Select 到 Epoll 的进化过程;最后探究 Epoll 的实现细节。从网卡接收数据说起下边是一个典型的计算机结构图,计算机由 CPU、存储器(内存)与网络接口等部件组成,了解 Epoll 本质的第一步,要从硬件的角度看计算机怎样接收网络数据。下图展示了网卡接收数据的..

2021-01-02 09:26:49 257

原创 基于ffmpeg 的树莓派摄USB像头视频采集,编码保存为h264和YUV格式数据

#include <stdio.h>#include <string.h>#define V_WIDTH 640#define V_HEIGTH 480extern "C" {#include "libavutil/avutil.h"#include "time.h"#include "libavdevice/avdevice.h"#include "libavformat/avformat.h"#include "libavcodec/avcodec.h".

2021-01-01 20:20:18 1188 3

原创 libavutil/error.h:132:58: error: taking address of temporary array av_make_error_string..

libavutil/error.h:132改成如下/*** Convenience macro, the return value should be used only directly in* function arguments but never stand-alone.*///#define av_err2str(errnum) \// av_make_error_string((char[AV_ERROR_MAX_STRING_SIZE]){0}, AV_ERROR_...

2021-01-01 18:51:30 1240

原创 C++引用ffmpeg出错#error missing -D__STDC_CONSTANT_MACROS / #define __STDC_CONSTANT_MACROS

在报错对应的libavutil/common.h开头添加如下代码:#ifdef __cplusplus#define __STDC_CONSTANT_MACROS#ifdef _STDINT_H#undef _STDINT_H#endif# include "stdint.h"#endif#ifndef INT64_C#define INT64_C(c) (c ## LL)#define UINT64_C(c) (c ## ULL)#endif...

2021-01-01 18:46:40 363

原创 树莓派ffmpeg 编译

安装x264 编码器cd /root/mkdir ffmpegcd ffmpeggit clone https://code.videolan.org/videolan/x264.gitcd x264/ls./configure --prefix=/usr/local/ffmpeg_install --enable-shared --enable-debug=3make install安装ffmpeggit clone https://git.ffmpeg.org/ffmpeg.git

2021-01-01 18:38:54 637 1

原创 H264中的proflie 和level

proflieH264 proflie对视频压缩特性的描述,profile越高,就说额明采用了越高级的压缩特性。H264 level对视频的描述,level 越高,视频的码率、分辨率、FPS,越高。Main proflie 初期只支持B 帧,支持CABAC 压缩特性hight 中支持了对色彩的量化,支持了4:0:0格式hight10 采样位数变成了9到10位,图像更清晰了。hight422 支持4:2:2 格式hight444支持4:4:4 格...

2020-12-29 12:14:19 820

原创 H264码流

分层NAL 层(网络抽象层)用于网络传输的层纠错、乱序、知道包的起始和结束VCL层(视屏数据编码层)视屏帧序列一般一个图像一个slice, 但也可以一张图像可以分很多slice,方便传输。涉及到很多编码的东西。一个视频有很多帧组成,帧是压缩后的图像。每个帧是由一个或多个slice组成,每个slice有多个宏块组成。码流的基本概念SODB 原始数据流,长度不一定是8的整数倍RBSP 字节对齐流,SODB 字节流不对齐(8的整数倍)补1或补多个0NALUNAL Header(1.

2020-12-29 12:14:07 534

原创 H264 无损压缩及编解码流程

一个视频经过有损压缩之后还不够小还要经过无损压缩。无损压缩之后数据量继续变小.第一步、DCT变换有关DCT 变换: 傅里叶里面说任何信号都可以有多个不同振幅和频率的正弦波或者余弦波信号叠加而成,如果采用的是余弦的话那就叫CT变换(Cosine Transform),如果输入信号是离散(Discrete )的,那么就叫DCT变换。DCT变换参考图像中采用DCT变换主要是将离散的时域图像信息转换成频域,之后可以看到一张图像大部分的信息都是在低频段,而高频的信息非常少,这样的话呢就将图像的内容集中了.

2020-12-25 18:22:01 1851 1

原创 H264帧间压缩技术整理

帧间压缩是指同一个GOP 之间的压缩参考帧(后面的帧参考前面的帧进行编码)运动估计(宏块匹配+运动矢量)通过宏块匹配的方法找到运动矢量,宏块匹配是方法手段,目的是找到运动矢量。运动补偿(解码找到残差值)如上图相邻的三帧,第一张是I帧的话,图像编码时只要将望远镜部分分割成很小的宏块,根据宏块匹配方法找到第二张图像对应的宏块(宏块匹配),求出运动矢量。宏块查找将一张图划分成很多的小宏快,抽出相邻的两帧,记录前一帧小球的宏块(坐标位置),逐行扫描查找相邻帧的宏块,找相似度最高的宏块认为是同一.

2020-12-24 17:47:54 1024 1

原创 H264 帧内压缩技术整理

帧内压缩,解决的是空域数据冗余问题(一张图片内部的数据压缩问题)。比如:一张天然色背景图片的压缩,背景天然色是可以用一部分很小的数据量存储,解压缩时可以通过很少的数据量还原回去。对于帧内的物体也有实际的算法。帧间压缩,解决的是时域数据冗余问题随着时间推移每个时间段是有帧数据的,他们是有参考的。整数离散余弦变换(DCT),将空间上的相关性变为频域上无关的数据然后进行量化CABAC压缩宏块宏块是视频压缩的基本单元帧内、帧间的基本单元将原始图像划分成很多个宏块单元,如果有很多细节的图片.

2020-12-24 16:14:58 1977 1

原创 H264压缩码率与GOP

H264压缩比条件:1、YUV格式YUV420 2、分辨率为640X480 3、帧率为 15建议码流: 500kbp压缩比:1/100GOP帧进行分组:根据相关性进行分组。同组帧相关性强,可压缩编码性强I/P/B 帧I 帧:(intraframe frame) 关键帧,采用帧内压缩技术,IDR帧是GOP 的第一帧,属于I帧。P帧(forward predicted frame),向前参考帧。压缩时,只参考已经处理的帧,...

2020-12-24 13:13:54 1087

原创 图像基础知识整理

每个像素由红绿蓝三个发光二极管组成

2020-12-24 10:46:31 202

原创 音频WAV格式

PCM 数据:纯的音频数据,没有文件格式WAV格式数据,存储了原始的数据,在PCM数据基础上套了一个头,方便播放浅蓝部分:4字节 RIFF 协议4 字节chunk 大小4 字节 WAVE 协议绿色部分:4字节 fmt 表示该部分为格式相关数据4 字节chunk 大小2 字节音频格式PCM2 字节通道数4 字节采样率4 字节码率2 字节对齐2 字节位深度红色部分:4 字节表示数据标志 “data”4 字节chunk 大小每4个字节表示一个采样,左右通道采样..

2020-12-23 15:11:20 331

原创 AAC编码器

AAC (advanced audio coding)先进的音频编码由fraunhofer IIs、杜比实验室、AT&T、sony 等公司共同开发,目的是取代MP3格式。AAC 规格AAC LC: (Low complexity) 低复杂度规格,码流是128k,音质好。AAC HE: 等于AAC LC + SBR(spectral band replication),其核心思想是按频谱分保存,高频单独放大编码保存音质。码流在64k左右。AAC HE V2 :等于AAC LC +.

2020-12-23 12:06:51 332

原创 常见的音频编码器

常见的音频编码器OPUSAACOggSpeex 包括混音消除iLBCAMRG.711等Ogg:收费,应用比较少AAC 在直播系统中应用的比较广泛,嵌入式设备中,ffmpeg中,WebRTC中OPUS 是比较新的音频编码,延迟小,压缩率高,实时通讯,在线教育webRTC 默认使用OPUS固话一般用G.711系列OPUS 具有低延时,全带宽,编码质量高的优点,适合实时通讯AAC延时比较大,不太适合实时通讯。...

2020-12-23 11:17:04 1227 4

原创 音频无损编码

无损编码:压缩不损失原始数据。哈夫曼编码:用很小的的一串01二进制数代替特别长的字符。频率越低的编码越长,频率越高的编码越小。根据使用频率去计算具体在哪个位置,比如上图右边40 所代表的的东西出现次数高,用01(1)代表,160使用次数少,则编码为10(2)。用短的编码代替高频词,长的代表低频词,那么压缩率就比较高了。算术编码:二进制小数来编码。香农编码:自己查查资料。红色部分:将各种频段的声音傅里叶转换成各种频段的数据,交予量化器黄色部分: 将人体不能感知的声音给去掉,遮蔽部分的声音也

2020-12-23 10:59:41 1113

原创 音频有损压缩技术

频域遮蔽:对于环境中的各种声音(复合声音),将时间域中的声音通过傅里叶变换成频域范围的声音。频率相近的,声音强的遮蔽掉声音弱的。时域遮蔽:时间内声强高的遮蔽掉声强低的声音。...

2020-12-23 10:40:25 436

原创 音频基础知识整理

PCM->AAC/MP3->MP4/FLVMP4/FLV->AAC/MP3_PCM声音的产生:物体运动通过空气、固体、液体等进行运输振动耳膜HZ: 1秒钟振动的次数量化后的十进制计算机可识别的二进制数据PCM 原始数据WAV 存储原始数据,在PCM数据上加了一个头部信息。采样大小:也称位深,位深越大,描述的音量峰值越大。采样率:采样的频率、次数,采样次数越大,描述声音越...

2020-12-23 10:14:25 135

原创 在相邻的不相同的字符后面插入字符的个数

#include <QCoreApplication>//在不同字符后面插入字符的个数char* transformation(char* str){ if(str == NULL) return NULL; int len = strlen(str); char* buf = new char[len + 1]; char* p = str; char* q = p + 1; int count = 1; while(*q != .

2020-12-22 12:55:37 228

原创 loopmove

#include <QCoreApplication>//移动后面n个字节到前面,前面字符串后移。比如"123456", n = 3,//运行结果456123char* loopmove(char* str, int n){ if(str == NULL) return NULL; char* head = str; char* head2 = str; char* buf = (char *)malloc(n); int strLen = st.

2020-12-22 12:42:29 354

原创 选择排序

#include <QCoreApplication>#include <iostream>using namespace std;//选择排序,大循环每次选择一个数与后面元素逐个比较void mysort(char* src,int len){ int tem =0; int exchanged = 1;//交换标志位 for(int i = 0; i < len && exchanged; i++){ //每轮.

2020-12-18 17:25:57 98 2

原创 插入排序

#include <QCoreApplication>#include <iostream>using namespace std;/*插入排序,默认从小到大1、元素拿出来,形成空位2、满足条件的元素后移*/void InsertionSort(int in[], int len)//O(n*n){ int i = 0; int j = 0; int k = 0;//存放插入点的位置 int temp;//存放拿出来的数 /.

2020-12-18 14:22:34 76

原创 冒泡排序

#include <QCoreApplication>#include <iostream>using namespace std;//从小到大void bubbleSort(int*in , int len) {//O(n*n) int i,j,t; int exchanged = 1;//交换标志位 //i 是比较的轮次,如果上一轮发生了交换则启动下一轮,否者无需交换 for (i = 0; (i < len) &&am.

2020-12-18 14:15:44 122

原创 int2str

#include <QCoreApplication>#include <iostream>using namespace std;//将整数转换成字符串,比如-1234//转换成-1234的字符串void int2str(int n, char* pStr){ if(pStr == nullptr) return; char buf[20] = {'\0'}; int i = 0, len = 0; int t = n > 0 ?.

2020-12-17 15:39:11 1009

原创 str2int

#include <QCoreApplication>int str2int(char *pStr, int* i){ if(pStr == nullptr) return 0; bool flag = false; char* pTem = pStr; int temp = 0; if(*pStr == '+' || *pStr == '-'){ pTem++; } //遍历字符串 while(pTem !=.

2020-12-17 15:16:20 1141

原创 revStr

#include <QCoreApplication>#include <iostream>using namespace std;void swap_(char* pstr, char* end){ char t; t = *pstr; *pstr = *end; *end = t; return;}void swap(char& a, char& b){ a = a + b; b .

2020-12-17 15:10:58 189

原创 strcpy 和memcpy

#include <QCoreApplication>#include <assert.h>char* strCpy(char* dest, const char* src ){ if(dest == NULL || src == NULL) return NULL; char* start = dest; char* pt= dest; while( (*pt++ = *src++) != '\0'); return s.

2020-12-17 15:03:08 76

原创 strcmp

//将两个字符串都进行比较一遍,当发现他们存在不同的值时停止循环,根据最后//一个字符的大小返回相应的结果int myStrcmp(const char* src, const char* dst){ int ret = 0; while( *dst != '\0'){ ret = *src - *dst; if(ret != 0) {//第一个不相等的数就决定了字符串的大小了 break; } .

2020-12-17 14:58:58 80

设计模式 XXXXXXX

xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

2017-09-03

空空如也

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

TA关注的人

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