RV1126画面质量四:GOP改善画质
一. 什么是 GOP
GOP 实际上就是两个 I 帧的间隔,比方说分辨率是 1920 * 1080 50 帧,假设 GOP 为 5,那就是大概 2s 插入一个 I 帧。我们再
回顾下,H264/H265 的帧结构。H264/H265 分别分为三种帧类型:I 帧、P 帧、B 帧。
- I 帧:全称是帧内编码图像帧,意思是它不需要其他参考帧,只需要利用本帧就可以知道具体的信息
- P 帧:全称是预测编码图像帧,需要利用前面的 I 帧或者 P 帧,采用运动预测的方式去进行编码。P 帧的压缩比高于 I 帧
- B 帧:全称是双向预测编码图像帧,B 帧提供了最高的压缩比,它既需要参考前面的 P 帧或 I 帧、也需要参考后面的 P 帧、I 帧
按照字节数来说, I 帧> P 帧 > B 帧。在码率不变的情况,一个 GOP 的值越大,P、B 帧的数量就会越多,画面质量就会相对较好。 所以在开发中,我们可以适当增加 GOP 的长度去改善画面质量。但是值得注意的是,GOP 的长度不适合设置太长,由于 P 帧、B 帧复杂度远比 I 帧高。若过长的 GOP 就会使得 P 帧、B 帧数量非常多,从而导致编码器压力较大编码效率降低。通
常来说,GOP_SIZE 要设置成帧率的 1-10 倍。
为什么 GOP 较大时画面质量较好?
-
长时间内的视觉连续性:当 GOP 较大时,I 帧的数量减少,但 P 帧和 B 帧通过差异编码的方式,提供了更多的“相似性”信息,使得视频在相邻的帧之间能够保持较高的画面质量,尤其是在动作较为平稳或者变化不大的场景中。
-
B 帧和 P 帧的高效编码:P 帧和 B 帧通常相对较小,因为它们只是记录和前后帧之间的差异,不需要完整的图像数据。这使得它们相对来说更加节省带宽。因此,GOP 较大时,会有更多的 P 和 B 帧来提高编码效率和压缩效果
-
在网络推流中尽量不要引入b帧,本地的4k视频就可以。
二. RV1126 中的 GOP 模式
在 RV1126 中,GOP 分为两种常见模式。一种是普通 GOP 模式,另外一种是智能编码 GOP 模式。下面我们都分别介绍一下:
2.1. 普通 GOP 模式:
普通的 GOP 模式,也是我们最常见的场景。就是每隔一段 GOP_SIZE 就会插入一个 I 帧,如下图所示:
上图没有B帧,因为网络中传播不需要I帧,I帧的解码时间就,要参考前后的I帧P帧。
假设我的 GOP_SIZE = 5,就相当于每隔 5 个 P 帧(这里假设没有 B 帧)插入一个 I 帧,这种场景下。编码模块只能适用在那种切换不频繁的场景,如一个画面大部分是运动场景,或者大部分是静止,它不能很好处理那种场景切换很好的场景。
2.2. 智能编码 P 模式:
这种模式下,分成两种 I 帧。一种是普通 I 帧,另外一种是虚拟 I 帧(也称之为 SMARTP 模式)。
普通 I 帧主要是检测画面的静止区域,当检测到静止区域的时候,编码器将会利用长参考帧的相关性,大幅度降低码率,并且尽量防止了静止画面的呼吸效应。 假设码率是5M,会把码率拉低到1M。因为禁止的画面远远低于远动画面,因为运动画面的细节比较多。所以要加大码率。上图就是长参考的I帧。
这里的P帧是短的参考帧,参考上一帧,作用就是在这里检查是否有运动画面产生。所以运动画面是有这些普通P帧检测的,如果有运动画面就插入 SMARTP帧
SMARTP并且把码率从5M提高到和合适的码率,检查运动画面
而在运动区域,利用短期参考帧(P帧)进行运动估计,并插入虚拟 I 帧,SMARTP直接参考I帧,就是长参考。这样可最大拉长 I 帧间隔让其提高码率并最大限度提高画面质量。(注意:SMARTP 和虚拟 I 帧是同样的意思)。
但是这样的也有一个问题,就是消耗cpu的能力,因为算力比较高,看实际选择。
三. RV1126 中的 GOP 模式的设置
RK_S32 RK_MPI_VENC_SetGopMode(VENC_CHN VeChn, VENC_GOP_ATTR_S GopMode);
- 第一个传参数:编码通道号
- 第二个传参数:VENC_GOP_ATTR_S 的结构体
- 返回值:0 成功,非 0 失败
VENC_GOP_ATTR_S 数据结构,作用是定义编码器 GOP 属性结构体。
- enGopMode:编码 Gop 类型填SMARTP和NORMALP多
- u32GopSize:编码 Gop 大小
- s32IPQpDelta:I 帧相对 P 帧对 QP 差值。比如这个花,消除马赛克和用于调节呼吸效应,默认值 6。6 代表的是打开纹理级别的编码,比如窗帘上面的一些花纹,如果你不打开这个可能是编码不出来的;当关闭的时候为 2,
- u32BgInterval:长期参考帧的间隔,若选中 SMARTP 则填这个值,否则不填。
- s32ViQpDelta:虚拟 I 帧相对于普通 P 帧的 QP 差值。用于调节呼吸效应,默认值 6。6 代表的是打开纹理级别的编码;当关闭的时候为 2
编码普通模式下参数的配置:
VENC_GOP_ATTR_S venc_gop_attr;
venc_gop_attr.enGopMode = VENC_GOPMODE_NORMALP; //不要虚拟帧,就是普通帧
venc_gop_attr.s32ViQpDelta = 0; //没有虚拟帧这些都不要
venc_gop_attr.s32IPQpDelta = 6; //这个可以减少调节呼吸效应,代表的是打开纹理级别的编码;
venc_gop_attr.u32BgInterval = 0; //没有虚拟I帧,所以不填
venc_gop_attr.u32GopSize = 30; //大小30
ret = RK_MPI_VENC_SetGopMode(venc_id, &venc_gop_attr);
注意:在普通模式下,u32BgInterval = 0,u32GopSize 是我们配置的 GOPSIZE 的值
智能 P 帧参数的配置:
VENC_GOP_ATTR_S venc_gop_attr;
venc_gop_attr.enGopMode = VENC_GOPMODE_SMARTP; //选择虚拟I帧
venc_gop_attr.s32ViQpDelta = 6; //用于调节呼吸效应和纹理级别的编码
venc_gop_attr.s32IPQpDelta = 6; //用于调节呼吸效应和纹理级别的编码 基本一样
venc_gop_attr.u32BgInterval = 180; //一般是Gop_size的6~10倍
venc_gop_attr.u32GopSize = 30; //大小30
ret = RK_MPI_VENC_SetGopMode(venc_id, &venc_gop_attr);
注意:在 SMARTP 模式下,有两个重要的参数配置 u32BgInterval 指的是长参考帧,一般都是 GOP_SIZE 的整数倍。u32GopSize 就是 GOPSIZE。u32BgInterval 具体填多少,要根据经验值进行判断,一般是 6-10 倍。
编码: 这里的编码用普通模式,因为我这里没有频繁切换的场景,改变不同的gop_size,看看画质
#include <stdio.h>
#include "rkmedia_public.h"void *collect_venc_thread(void *args)
{pthread_detach(pthread_self());MEDIA_BUFFER mb;FILE *h264_file = fopen("./test_output_smart_gop.h264", "w+");while (1){mb = RK_MPI_SYS_GetMediaBuffer(RK_ID_VENC, 0, -1);if (!mb){printf("Get Venc Buffer Break....\n");break;}printf("mmmmmm\n");//采集到的文件保存到文件中fwrite(RK_MPI_MB_GetPtr(mb), RK_MPI_MB_GetSize(mb), 1, h264_file);RK_MPI_MB_ReleaseBuffer(mb);}return NULL;
}int main()
{RK_U32 u32Width = 1920;RK_U32 u32Height = 1080;RK_CHAR *pDeviceName = "rkispp_scale0";RK_CHAR *pOutPath = NULL;RK_CHAR *pIqfilesPath = NULL;CODEC_TYPE_E enCodecType = RK_CODEC_TYPE_H264;RK_CHAR *pCodecName = "H264";RK_S32 s32CamId = 0;RK_U32 u32BufCnt = 3;//isp的配置rk_aiq_working_mode_t hdr_mode = RK_AIQ_WORKING_MODE_NORMAL;SAMPLE_COMM_ISP_Init(hdr_mode, RK_FALSE);SAMPLE_COMM_ISP_Run();SAMPLE_COMM_ISP_SetFrameRate(30);int ret;RK_MPI_SYS_Init(); //初始化rkmedia//VI模块VI_CHN_ATTR_S vi_chn_attr;vi_chn_attr.pcVideoNode = pDeviceName;vi_chn_attr.u32BufCnt = u32BufCnt;vi_chn_attr.u32Width = u32Width;vi_chn_attr.u32Height = u32Height;vi_chn_attr.enPixFmt = IMAGE_TYPE_NV12;vi_chn_attr.enBufType = VI_CHN_BUF_TYPE_MMAP;vi_chn_attr.enWorkMode = VI_WORK_MODE_NORMAL;ret = RK_MPI_VI_SetChnAttr(s32CamId, 1, &vi_chn_attr);ret |= RK_MPI_VI_EnableChn(s32CamId, 1);if (ret){printf("ERROR: create VI[0] error! ret=%d\n", ret);return 0;}//VENC模块VENC_CHN_ATTR_S venc_chn_attr;memset(&venc_chn_attr, 0, sizeof(venc_chn_attr));venc_chn_attr.stVencAttr.enType = RK_CODEC_TYPE_H264;venc_chn_attr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;venc_chn_attr.stRcAttr.stH264Cbr.u32Gop = 5;venc_chn_attr.stRcAttr.stH264Cbr.u32BitRate = u32Width * u32Height * 3;// frame rate: in 30/1, out 30/1.venc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateDen = 1;venc_chn_attr.stRcAttr.stH264Cbr.fr32DstFrameRateNum = 30;venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateDen = 1;venc_chn_attr.stRcAttr.stH264Cbr.u32SrcFrameRateNum = 30;venc_chn_attr.stVencAttr.imageType = IMAGE_TYPE_NV12;venc_chn_attr.stVencAttr.u32PicWidth = u32Width;venc_chn_attr.stVencAttr.u32PicHeight = u32Height;venc_chn_attr.stVencAttr.u32VirWidth = u32Width;venc_chn_attr.stVencAttr.u32VirHeight = u32Height;venc_chn_attr.stVencAttr.u32Profile = 77;ret = RK_MPI_VENC_CreateChn(0, &venc_chn_attr);if (ret){printf("ERROR: create VENC[0] error! ret=%d\n", ret);return 0;}//配置gop模式VENC_GOP_ATTR_S venc_gop_attr;venc_gop_attr.enGopMode = VENC_GOPMODE_NORMALP; //普通gop模式venc_gop_attr.u32BgInterval = 0;venc_gop_attr.u32GopSize = 5;//5 60 这里大家可以试试一下,分别用60和50,看看效果venc_gop_attr.s32IPQpDelta = 6;venc_gop_attr.s32ViQpDelta = 0;ret = RK_MPI_VENC_SetGopMode(0, &venc_gop_attr);if (ret != 0){printf("Gop Mode Success.....\n");return -1;}else{printf("Gop Mode Failed.....\n");}//绑定vi和vencMPP_CHN_S stSrcChn;stSrcChn.enModId = RK_ID_VI;stSrcChn.s32DevId = 0;stSrcChn.s32ChnId = 1;MPP_CHN_S stDestChn;stDestChn.enModId = RK_ID_VENC;stDestChn.s32DevId = 0;stDestChn.s32ChnId = 0;ret = RK_MPI_SYS_Bind(&stSrcChn, &stDestChn);if (ret){printf("ERROR: Bind VI[0] and VENC[0] error! ret=%d\n", ret);return 0;}//开启线程采集pthread_t pid;ret = pthread_create(&pid, NULL, collect_venc_thread, NULL);if (ret != 0){printf("Create Venc Thread Failed....\n");}while (1){sleep(20);}return 0;
}
效果演示后面不回来,开发板坏了,要寄回修了,没办法做实验
gop调节效果 < QP调节效果的,因为qp调节直接把编码器的一些细致弄出来。所以效果没有qp那么好,如果在码率不够的情况下也是经常可以用到的。以后得用那一种做开发,应该根据情况。
相关文章:
RV1126画面质量四:GOP改善画质
一. 什么是 GOP GOP 实际上就是两个 I 帧的间隔,比方说分辨率是 1920 * 1080 50 帧,假设 GOP 为 5,那就是大概 2s 插入一个 I 帧。我们再 回顾下,H264/H265 的帧结构。H264/H265 分别分为三种帧类型:I 帧、…...
手机app如何跳过无障碍权限实现弹框自动点击-ADB连接专题
手机app如何跳过无障碍权限实现弹框自动点击 --ADB连接专题 一、前言 我们在前期的时候,在双SIM卡进行协同外呼和SIM卡切换时,对如何在手机中“执行批处理脚本做自动点击”的内容进行预研,力图使用事件触发和坐标点击等方式来实现手机安装…...
kafka-保姆级配置说明(consumer)
bootstrap.servers #deserializer应该与producer保持对应 #key.deserializer #value.deserializer ##fetch请求返回时,至少获取的字节数,默认值为1 ##当数据量不足时,客户端请求将会阻塞 ##此值越大,客户端请求阻塞的时间越长&…...
c语言中的数组(上)
数组的概念 数组是⼀组相同类型元素的集合; 数组中存放的是1个或者多个数据,但是数组元素个数不能为0。 数组中存放的多个数据,类型是相同的。 数组分为⼀维数组和多维数组,多维数组⼀般⽐较多⻅的是⼆维数组。 数组创建 在C语言…...
20250122-正则表达式
1. 正则标记 表示一位字符:\\ 表示指定的一位字符:x 表示任意的一位字符:. 表示任意一位数字:\d 表示任意一位非数字:\D 表示任意一个字母:[a-zA-Z](大写或小写) 表示任意一个…...
(回溯法 子集)leetcode78
#include<iostream> #include<string> #include<vector> //只有子集需要在每个结点收集结果,其余在叶子结点收集结果 using namespace std; vector<vector<int>>ans; vector<int>combine; void backtracking(int index,vector&…...
Pyecharts之图表组合与布局优化
在数据可视化中,我们经常需要将多个图表组合在一起,以展示不同维度的数据或者进行对比分析。同时,合理的布局能够提升图表的可读性和用户体验。Pyecharts 提供了强大的组件和方法,让我们可以轻松实现图表的组合和布局优化。本篇将…...
代码随想录训练营第五十六天| 108.冗余连接 109.冗余连接II
108.冗余连接 题目链接:卡码网题目链接(ACM模式) (opens new window) 讲解链接:代码随想录 并查集可以解决什么问题:两个节点是否在一个集合,也可以将两个节点添加到一个集合中。 引自代码随想录ÿ…...
私有包上传maven私有仓库nexus-2.9.2
一、上传 二、获取相应文件 三、最后修改自己的pom文件...
二叉搜索树中的搜索(力扣700)
首先介绍一下什么是二叉搜索树。 二叉搜索树是一个有序树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;它的左、右子树也分别为二叉…...
社区养老服务平台的设计与实现(代码+数据库+LW)
摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对信息管理混乱,出错率高,信息安全性差&#…...
高速光模块中的并行光学和WDM波分光学技术
随着AI大模型训练和推理对计算能力的需求呈指数级增长,AI数据中心的网络带宽需求大幅提升,推动了高速光模块的发展。光模块作为数据中心和高性能计算系统中的关键器件,主要用于提供高速和大容量的数据传输服务。 光模块提升带宽的方法有两种…...
python生成图片和pdf,快速
1、下载安装 pip install imgkit pip install pdfkit2、wkhtmltopdf工具包,下载安装 下载地址:https://wkhtmltopdf.org/downloads.html 3、生成图片 import imgkit path_wkimg rD:\app\wkhtmltopdf\bin\wkhtmltoimage.exe # 工具路径,安…...
浅谈在AI时代GIS的发展方向和建议
在AI时代,GIS(地理信息系统)的发展正经历着深刻的变革,随着人工智能技术的进步,GIS不再仅仅是传统的地图和空间数据处理工具,而是向更加智能化、自动化、精准化的方向发展。作为一名GIS开发工程师ÿ…...
【25考研】中科院软件考研复试难度分析!
中科院软件复试不需要上机!且对专业综合能力要求较高!提醒同学一定要认真复习! 一、复试内容 二、参考书目 官方并未明确给出,建议同学参考初试书目: 1)《数据结构(C语言版)》严蔚…...
【2024年华为OD机试】 (A卷,200分)- 计算网络信号、信号强度(JavaScriptJava PythonC/C++)
一、问题描述 题目解析 问题描述 我们有一个 m x n 的二维网格地图,每个格子可能是以下几种情况之一: 0:表示该位置是空旷的。x(正整数):表示该位置是信号源,信号强度为 x。-1:表示该位置是阻隔物,信号无法直接穿透。信号源只有一个,阻隔物可能有多个。信号在传播…...
SpringBoot整合Swagger UI 用于提供接口可视化界面
目录 一、引入相关依赖 二、添加配置文件 三、测试 四、Swagger 相关注解 一、引入相关依赖 图像化依赖 Swagger UI 用于提供可视化界面: <dependency><groupId>io.springfox</groupId><artifactId>springfox-swagger-ui</artifactI…...
C语言:数据的存储
本文重点: 1. 数据类型详细介绍 2. 整形在内存中的存储:原码、反码、补码 3. 大小端字节序介绍及判断 4. 浮点型在内存中的存储解析 数据类型结构的介绍: 类型的基本归类: 整型家族 浮点家族 构造类型: 指针类型&…...
OpenFGA
1.什么是OpenFGA Fine-Grained Authorization 细粒度关系型授权 2.什么是细粒度授权 细粒度授权 (FGA) 意味着能够授予特定用户在特定资源中执行特定操作的权限。 精心设计的 FGA 系统允许您管理数百万个对象和用户的权限。随着系统不断添加对象并更新用户的访问权限&#…...
Kafka 入门与应用实战:吞吐量优化与与 RabbitMQ、RocketMQ 的对比
前言 在现代微服务架构和分布式系统中,消息队列作为解耦组件,承担着重要的职责。它不仅提供了异步处理的能力,还能确保系统的高可用性、容错性和扩展性。常见的消息队列包括 Kafka、RabbitMQ 和 RocketMQ,其中 Kafka 因其高吞吐量…...
单链表算法实战:解锁数据结构核心谜题——链表的回文结构
题目如下: 解题过程如下: 回文结构举例: 回文数字:12521、12321、1221…… 回文字符串:“abcba”、“abba”…… 并不是所有的循环嵌套的时间复杂度都是O(n^2) 可以用C写C程序: C里可以直接使用ListNode…...
【2024年 CSDN博客之星】我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾
我的2024年创作之旅:从C语言到人工智能,个人成长与突破的全景回顾 引言 回望2024年,我不仅收获了技术上的成长,更收获了来自CSDN平台上无数粉丝、朋友以及网友们的支持与鼓励。在这条创作之路上,CSDN不仅是我展示技术成…...
Qt Enter和HoverEnter事件
介绍 做PC开发的过程中或多或少都会接触到鼠标的悬停事件,Qt中处理鼠标悬停有Enter和HoverEnter两种事件 相同点 QEvent::Enter对应QEnterEvent,描述的是鼠标进入控件坐标范围之内的行为,QEnterEvent可以抓取鼠标的位置;QEvent…...
Python:元组构造式和字典推导式
(Python 元组构造式和字典推导式整理笔记) 1. 元组构造式 1.1 创建元组 使用圆括号: tuple1 (1, 2.5, (three, four), [True, 5], False) print(tuple1) # 输出: (1, 2.5, (three, four), [True, 5], False) 省略圆括号: tup…...
科普篇 | “机架、塔式、刀片”三类服务器对比
一、引言 在互联网的世界里,服务器就像是默默运转的超级大脑,支撑着我们日常使用的各种网络服务。今天,咱们来聊聊服务器家族中的三位 “明星成员”:机架式服务器、塔式服务器和刀片式服务器。如果把互联网比作一座庞大的城市&…...
数据结构——概念与时间空间复杂度
目录 前言 一相关概念 1什么是数据结构 2什么是算法 二算法效率 1如何衡量算法效率的好坏 2算法的复杂度 三时间复杂度 1时间复杂度表示 2计算时间复杂度 2.1题一 2.2题二 2.3题三 2.4题四 2.5题五 2.6题六 2.7题七 2.8题八 四空间复杂度 1题一 2题二 3…...
centos7 配置国内镜像源安装 docker
使用国内镜像源:由于 Docker 的官方源在国内访问可能不稳定,你可以使用国内的镜像源,如阿里云的镜像源。手动创建 /etc/yum.repos.d/docker-ce.repo 文件,并添加以下内容: [docker-ce-stable] nameDocker CE Stable -…...
PyCharm配置Python环境
1、打开PyCharm项目 可以从File-->Open-->选择你的项目路径-->OK,或者直接点击Open,找到项目路径-->OK,如图所示(点击Ok后可能有下面的弹窗,选择“Trust Project”即可,然后选择“New Window”打开项目) …...
Linux(Centos、Ubuntu) 系统安装jenkins服务
该文章手把手演示在Linux系统下如何安装jenkins服务、并自定义jenkins数据文件位置、以及jenkins如何设置国内镜像源加速,解决插件下载失败问题 安装方式:war包安装 阿里云提供的war下载源地址:https://mirrors.aliyun.com/jenkins/war/?s…...
本地大模型编程实战(02)语义检索(1)
文章目录 准备加载文档分割文档嵌入矢量存储查询矢量库检索返回评分先嵌入查询文本再检索 检索器总结代码 我们在百度、必应、谷歌等搜索引擎中使用的检索都是基于字符串的:用户输入字符串后,搜索引擎先对搜索内容进行分词,然后在已经进行了倒…...
使用 Redis 实现分布式锁的基本思路
使用 Redis 实现分布式锁的基本思路 在分布式系统中,多个进程或服务可能会同时访问共享资源(如数据库、缓存、文件等),这可能会导致数据不一致或并发冲突。Redis 由于其高性能和单线程模型,是实现分布式锁的一个常见选…...
SQL-leetcode—1193. 每月交易 I
1193. 每月交易 I 表:Transactions ---------------------- | Column Name | Type | ---------------------- | id | int | | country | varchar | | state | enum | | amount | int | | trans_date | date | ---------------------- id 是这个表的主键。 该表包含…...
【MYSQL】mysql 常用命令
文章目录 1. 数据库管理命令2. 表管理命令3. 数据操作命令4. 数据查询进阶5. 用户与权限管理6. 使用脚本操作数据库 1. 数据库管理命令 -- 查看所有数据库 SHOW DATABASES;-- 创建数据库 CREATE DATABASE 数据库名;-- 选择数据库 USE 数据库名;-- 删除数据库 DROP DATABASE 数…...
linux 内核学习方向以及职位
### 学习路径 1. 基础阶段: - C语言高级特性 - 指针和内存管理 - 数据结构实现 - 位操作 - 多线程编程 - Linux系统编程 - 文件I/O操作 - 进程管理 - 信号处理 - IPC机制 - Socket编程 - 必备知识 - 操作系统原理 - 计算机体系结构 - …...
DeepSeek火爆,参数量、激活参数 和 预训练 token 量 是什么?
最近DeepSeek火爆,爆出了几个关键参数,分别是参数量、激活参数 和 预训练 token 量。 这里用通俗的语言给大家解释一下~ 首先要知道1B 是 Billion(十亿)的缩写 参数量:671B(6710 亿) 想象你…...
设计新的 Kibana 仪表板布局以支持可折叠部分等
作者:来自 Elastic Teresa Alvarez Soler, Hannah Mudge 及 Nathaniel Reese 在 Kibana 中构建可折叠仪表板部分需要彻底改造嵌入式系统并创建自定义布局引擎。这些更新改进了状态管理、层次结构和性能,同时为新的高级仪表板功能奠定了基础。 我们正在开…...
vscode如何安装vue语法支持
在VSCode中安装Vue语法支持非常简单。1、你需要安装“Vetur”扩展,这是一个专门为Vue.js开发设计的扩展;2、你可以通过VSCode的扩展市场轻松找到并安装它;3、安装完成后,你还可以根据需要进行一些配置,以优化你的开发体…...
从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑
文章目录 从零安装 LLaMA-Factory 微调 Qwen 大模型成功及所有的坑一 参考二 安装三 启动准备大模型文件 四 数据集(关键)!4.1 Alapaca格式4.2 sharegpt4.3 在 dataset_info.json 中注册4.4 官方 alpaca_zh_demo 例子 999条数据, 本机微调 5分…...
easyexcel-导入(读取)(read)-示例及核心部件
文章目录 导入(读取)(read)-示例及核心部件导入(读取)(read)-核心部件EasyExcel(EasyExcelFactory) # 入口read() # read()方法用于构建workbook(工作簿)对象,new ExcelReaderBuilder()doReadAll()这里选XlsxSaxAnalyser这个实现类吧然后到这个类XlsxRowHandler&…...
10 Hyperledger Fabric 介绍
简介 HypeLedger(超级账本)是由Linux基金会2015年创建的首个面向企业应用场景的开源分布式账本平台。 HypeLedger Fabric是HypeLedger种的区块链项目之一HypeLedger Fabric引入权限管理在架构设计上支持可插拔、可扩展是首个面向联盟链场景的开源项目 …...
第28章 测试驱动开发模式:深入绿条模式及相关技术
写在前面 这本书是我们老板推荐过的,我在《价值心法》的推荐书单里也看到了它。用了一段时间 Cursor 软件后,我突然思考,对于测试开发工程师来说,什么才更有价值呢?如何让 AI 工具更好地辅助自己写代码,或许…...
PTMD2.0-疾病相关的翻译后修饰数据库
翻译后修饰(PTMs,post-translational modifications)通过调节蛋白质功能参与了几乎所有的生物学过程,而 PTMs 的异常状态常常与人类疾病相关。在此,PTMD 2.0展示与疾病相关的 PTMs 综合数据库,其中包含 93 …...
gradle生命周期钩子函数
文章目录 0. 总结表格1. 构建初始阶段gradle.settingsEvaluated()gradle.projectsLoaded() 2. 配置阶段gradle.beforeProject()gradle.afterProject()gradle.projectEvaluated()gradle.afterEvaluate()gradle.taskGraph.whenReady 3. 执行阶段gradle.taskGraph.beforeTaskgradl…...
操作系统(Linux Kernel 0.11Linux Kernel 0.12)解读整理——内核初始化(main init)之内存的划分
前言 MMU:内存管理单元(Memory Management Unit)完成的工作就是虚拟地址到物理地址的转换,可以让系统中的多个程序跑在自己独立的虚拟地址空间中,相互不会影响。程序可以对底层的物理内存一无所知,物理地址可以是不连续的&#x…...
WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel
WPF基础 | WPF 布局系统深度剖析:从 Grid 到 StackPanel 一、前言二、Grid 布局:万能的布局王者2.1 Grid 布局基础:构建网格世界2.2 子元素定位与跨行列:布局的精细操控2.3 自适应布局:灵活应变的秘诀 三、StackPanel…...
C++红黑树详解
文章目录 红黑树概念规则为什么最长路径不超过最短路径的二倍?红黑树的时间复杂度红黑树的结构插入叔叔节点情况的讨论只变色(叔叔存在且为红)抽象的情况变色单旋(叔叔不存在或叔叔存在且为黑)变色双旋(叔叔不存在或叔叔存在且为黑…...
【经验分享】ARM Linux-RT内核实时系统性能评估工具
【经验分享】ARM Linux-RT内核实时系统性能评估工具 前言下载和编译方法常用工具介绍总结 前言 最近在研究Linux-RT实时系统,介绍下常用的实时系统的性能评估工具。 下载和编译方法 用git下载 git clone git://git.kernel.org/pub/scm/utils/rt-tests/rt-tests.…...
【kong gateway】5分钟快速上手kong gateway
kong gateway的请求响应示意图 安装 下载对应的docker 镜像 可以直接使用docker pull命令拉取,也可以从以下地址下载:kong gateway 3.9.0.0 docker 镜像 https://download.csdn.net/download/zhangshenglu1/90307400, postgres-13.tar http…...
Vue入门(Vue基本语法、axios、组件、事件分发)
Vue入门 Vue概述 Vue (读音/vju/,类似于view)是一套用于构建用户界面的渐进式框架,发布于2014年2月。与其它大型框架不同的是,Vue被设计为可以自底向上逐层应用。Vue的核心库只关注视图层,不仅易于上手,还便于与第三…...
【可实战】Linux 系统扫盲、 Shell扫盲(如何写一个简单的shell脚本)
一、Linux系统扫盲 1.Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议 2.Linux 的发行版说简单点就是将 Linux 内核与应用软件做一个打包。 目前市面上较知名的发行版有:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE、Arch Linux、SolusOS 等…...