当前位置: 首页 > news >正文

树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率

树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率

  • 1. 设定分辨率
  • 2. 设定帧率
  • 3. 设定分辨率代码解析
  • 4. 获取与设定帧率代码解析
  • 5. 实测

1. 设定分辨率

使用如下代码设定摄像头的分辨率:

#define CAMERA_RESOLUTION_WIDTH    (         1280u)
#define CAMERA_RESOLUTION_HEIGHT   (          720u)
/*********************************************** other codes * ********************************************/
/*******************************************************************************
- Function    : __SetCameraResolution
- Description : 本函数设置摄像头输出格式。
- Input       : void
- Output      : null
- Return      : void
- Others      :
*******************************************************************************/
void __SetCameraResolution(void)
{struct v4l2_format     stFormat ;memset(&stFormat, 0, sizeof(stFormat)) ;/* 设置输出格式 */stFormat.type                = V4L2_BUF_TYPE_VIDEO_CAPTURE ;stFormat.fmt.pix.width       = CAMERA_RESOLUTION_WIDTH ;stFormat.fmt.pix.height      = CAMERA_RESOLUTION_HEIGHT ;stFormat.fmt.pix.pixelformat = V4L2_PIX_FMT_YUYV ;             /* 根据需要的格式填写 */if(-1 == ioctl(g_iFDVideo, VIDIOC_S_FMT, &stFormat)) {printf("ioctl VIDIOC_S_FMT error.\n") ;exit(-1) ;}/* 检查设置效果 */stFormat.type = V4L2_BUF_TYPE_VIDEO_CAPTURE ;if(-1 == ioctl(g_iFDVideo, VIDIOC_G_FMT, &stFormat)){printf("ioctl VIDIOC_G_FMT error.\n") ;exit(-1) ;}else{printf("--Set format result---------------------------------------\n") ;printf("-- Resolution width  : %d\n""-- Resolution height : %d\n""-- Pixel format      : %c%c%c%c\n",stFormat.fmt.pix.width, stFormat.fmt.pix.height,stFormat.fmt.pix.pixelformat & 0xFF,(stFormat.fmt.pix.pixelformat >> 8) & 0xFF,(stFormat.fmt.pix.pixelformat >> 16) & 0xFF,(stFormat.fmt.pix.pixelformat >> 24) & 0xFF);printf("----------------------------------------------------------\n\n\n") ;}return ;
}

2. 设定帧率

使用如下代码设定摄像头的输出帧率:

#define CAMERA_FPS                 (           30u)
/*********************************************** other codes * ********************************************/
/*******************************************************************************
- Function    : __SetCameraFPS
- Description : 本函数设置摄像头输出格式。
- Input       : void
- Output      : null
- Return      : void
- Others      :
*******************************************************************************/
void __SetCameraFPS(void)
{struct v4l2_streamparm stStreamParm ;stStreamParm.type = V4L2_BUF_TYPE_VIDEO_CAPTURE ;/* 获取当前设置 */if(-1 == ioctl(g_iFDVideo, VIDIOC_G_PARM, &stStreamParm)){printf("ioctl VIDIOC_G_PARM error.\n") ;exit(-1) ;}else{printf("--Previous camera stream param----------------------------\n") ;printf("-- Capability        : %08x\n""-- Capturemode       : %08x\n""-- Numerator         : %d\n""-- Denominator       : %d\n",stStreamParm.parm.capture.capability, stStreamParm.parm.capture.capturemode, stStreamParm.parm.capture.timeperframe.numerator, stStreamParm.parm.capture.timeperframe.denominator) ;printf("----------------------------------------------------------\n\n\n") ;}/* 修改FPS */stStreamParm.parm.capture.timeperframe.numerator   = 1 ;stStreamParm.parm.capture.timeperframe.denominator = CAMERA_FPS ;if(-1 == ioctl(g_iFDVideo, VIDIOC_S_PARM, &stStreamParm)){printf("ioctl VIDIOC_S_PARM error.\n") ;exit(-1) ;}/* 获取新设置 */if(-1 == ioctl(g_iFDVideo, VIDIOC_G_PARM, &stStreamParm)){printf("ioctl VIDIOC_G_PARM error.\n") ;exit(-1) ;}else{printf("--Current camera stream param-----------------------------\n") ;printf("-- Capability        : %08x\n""-- Capturemode       : %08x\n""-- Numerator         : %d\n""-- Denominator       : %d\n",stStreamParm.parm.capture.capability, stStreamParm.parm.capture.capturemode, stStreamParm.parm.capture.timeperframe.numerator, stStreamParm.parm.capture.timeperframe.denominator) ;printf("----------------------------------------------------------\n\n\n") ;}    return ;
}

3. 设定分辨率代码解析

使用命令 VIDIOC_S_FMT 来设定输出格式。命令原型为:

#define VIDIOC_S_FMT		_IOWR('V',  5, struct v4l2_format)

可见,需要一个 v4l2_format 结构体。结构体的定义如下:

/*** struct v4l2_format - stream data format* @type:	enum v4l2_buf_type; type of the data stream* @pix:	definition of an image format* @pix_mp:	definition of a multiplanar image format* @win:	definition of an overlaid image* @vbi:	raw VBI capture or output parameters* @sliced:	sliced VBI capture or output parameters* @raw_data:	placeholder for future extensions and custom formats* @fmt:	union of @pix, @pix_mp, @win, @vbi, @sliced, @sdr, @meta* 	    and @raw_data*/
struct v4l2_format {__u32	 type;union {struct v4l2_pix_format		pix;     /* V4L2_BUF_TYPE_VIDEO_CAPTURE */struct v4l2_pix_format_mplane	pix_mp;  /* V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE */struct v4l2_window		win;     /* V4L2_BUF_TYPE_VIDEO_OVERLAY */struct v4l2_vbi_format		vbi;     /* V4L2_BUF_TYPE_VBI_CAPTURE */struct v4l2_sliced_vbi_format	sliced;  /* V4L2_BUF_TYPE_SLICED_VBI_CAPTURE */struct v4l2_sdr_format		sdr;     /* V4L2_BUF_TYPE_SDR_CAPTURE */struct v4l2_meta_format		meta;    /* V4L2_BUF_TYPE_META_CAPTURE */__u8	raw_data[200];                   /* user-defined */} fmt;
};

结构体中:
type 应指定为:V4L2_BUF_TYPE_VIDEO_CAPTURE
联合体中,使用 v4l2_pix_format。该结构体的定义如下:

struct v4l2_pix_format {__u32			width;__u32			height;__u32			pixelformat;__u32			field;		/* enum v4l2_field */__u32			bytesperline;	/* for padding, zero if unused */__u32			sizeimage;__u32			colorspace;	/* enum v4l2_colorspace */__u32			priv;		/* private data, depends on pixelformat */__u32			flags;		/* format flags (V4L2_PIX_FMT_FLAG_*) */union {/* enum v4l2_ycbcr_encoding */__u32			ycbcr_enc;/* enum v4l2_hsv_encoding */__u32			hsv_enc;};__u32			quantization;	/* enum v4l2_quantization */__u32			xfer_func;	/* enum v4l2_xfer_func */
};

这里主要填写 widthheightpixelformat三个成员。
width 指输出图像的宽度;
height指输出图像的高度;
pixelformat指输出图像的像素格式。根据需要填写 V4L2_PIX_FMT_XXXX

设置执行后,未必能执行成功。需要读出再检查。读出设置,使用 VIDIOC_G_FMT 命令。该命令的原型为:

#define VIDIOC_G_FMT		_IOWR('V',  4, struct v4l2_format)

返回值同样为 struct v4l2_format 类型。

4. 获取与设定帧率代码解析

使用命令 VIDIOC_G_PARM 来获取当前摄像头的参数(包含帧率)。该命令的原型是:

#define VIDIOC_G_PARM		_IOWR('V', 21, struct v4l2_streamparm)

该命令需要一个 struct v4l2_streamparm 类型的参数。

struct v4l2_streamparm {__u32	 type;			/* enum v4l2_buf_type */union {struct v4l2_captureparm	capture;struct v4l2_outputparm	output;__u8	raw_data[200];  /* user-defined */} parm;
};

对于摄像头,type 仍然填写 V4L2_BUF_TYPE_VIDEO_CAPTURE
联合体中,对于摄像头而言,应该取 struct v4l2_captureparm capture。该结构体的定义如下:

struct v4l2_captureparm {__u32		   capability;	  /*  Supported modes */__u32		   capturemode;	  /*  Current mode */struct v4l2_fract  timeperframe;  /*  Time per frame in seconds */__u32		   extendedmode;  /*  Driver-specific extensions */__u32              readbuffers;   /*  # of buffers for read */__u32		   reserved[4];
};

和帧率有关的是其中的结构体成员 struct v4l2_fract timeperframe 。其定义如下:

struct v4l2_fract {__u32   numerator;__u32   denominator;
};

参数 timeperframe ,意指每一帧图像的输出时间。成员 numerator (分子)和 denominator (分母)参数决定了具体的值。例如:

numerator   = 1
denominator = 30

则表明每一帧的时间为1/30秒,则相当于30fps输出。此外:

numerator   = 100
denominator = 3000

效果是一样的。
需要注意的是,摄像头未必能按照设定的参数来输出。主要有2点:

  1. 设置未必生效。如果设置的FPS过大,设置下去后,重新读回配置,会发现参数 numeratordenominator 被修改为一个受限制的值。
  2. 即使能够设置下去,输出帧率和硬件还有关系,例如,对于同一个CMOS,MIPI-CSI的2-lane和4-lane所能支持的最大帧率是不同的。

使用命令 VIDIOC_S_PARM 来设置设定的参数。命令的定义:

#define VIDIOC_S_PARM		_IOWR('V', 22, struct v4l2_streamparm)

同样还是需要结构体 struct v4l2_streamparm

同设定输出格式一样,也需要检查是否设定成功。

5. 实测

材料:

  1. Raspberry Pi 4B计算机;
  2. IMX219摄像头组件。
    运行上述代码,打印结果:
--Set format result---------------------------------------
-- Resolution width  : 1280
-- Resolution height : 720
-- Pixel format      : YUYV
------------------------------------------------------------Previous camera stream param----------------------------
-- Capability        : 00001000
-- Capturemode       : 00000000
-- Numerator         : 1000
-- Denominator       : 30000
------------------------------------------------------------Current camera stream param-----------------------------
-- Capability        : 00001000
-- Capturemode       : 00000000
-- Numerator         : 1
-- Denominator       : 30
----------------------------------------------------------

可以看到,在设置帧率之前, Numerator 参数和 Denominator参数,分别是1000和30000,即帧率是30fps。设置后仍然是30fps。
上述代码中,如果修改帧率设置:

numerator   = 1
denominator = 100

则打印信息为:

--Current camera stream param-----------------------------
-- Capability        : 00001000
-- Capturemode       : 00000000
-- Numerator         : 1
-- Denominator       : 90
----------------------------------------------------------

可见,Denominator 参数被修改为了90,相当于最大输出90fps。此时尝试连续捕获,最终计算帧率为:

FPS : 90.25 

相关文章:

树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率

树莓派学习专题<9>:使用V4L2驱动获取摄像头数据--设定分辨率和帧率 1. 设定分辨率2. 设定帧率3. 设定分辨率代码解析4. 获取与设定帧率代码解析5. 实测 1. 设定分辨率 使用如下代码设定摄像头的分辨率: #define CAMERA_RESOLUTI…...

模态链:利用视觉-语言模型从多模态人类视频中学习操作程序

25年4月来自谷歌 DeepMind 和斯坦福大学的论文“Chain-of-Modality: Learning Manipulation Programs from Multimodal Human Videos with Vision-Language-Models”。 从人类视频中学习执行操作任务,是一种很有前景的机器人教学方法。然而,许多操作任务…...

JAVAEE初阶01

个人主页 JavaSE专栏 JAVAEE初阶01 操作系统 1.对下(硬件)管理各种计算机设备 2.对上(软件)为各种软件提供一个稳定的运行环境 线程 运行的程序在操作系统中以进程的形式存在 进程是系统分配资源的最小单位 进程与线程的关…...

【网络安全】用 Linux 命令行 CLI 日志文件处理指南

Linux 命令行 CLI 神技回忆录:日志文件处理指南(以 Zeek Logs 为例) 1. CLI简介2. 基础操作3. 文件读取4. 查找与筛选5. 进阶操作6. Zeek 日志骚操作7. 结语 1. CLI简介 在数据分析的世界里,图形界面(GUI)…...

[C++] 高精度乘法

目录 引入: 大整数比较比较方法例题1-青蛙计数题目描述 输入描述输出描述输入输出样例AC代码 高精度乘法模版高精度运算小合集(这集乘法上集加法) 注意: 若还没有学过高精度运算的话先去看高精度加法 引入: 大整数比较 比较方法 大整数比较可以使用此方法比较(注释有讲解): …...

反事实——AI与思维模型【82】

一、定义 反事实思维模型是一种心理认知模型,它指的是人们在头脑中对已经发生的事件进行否定,然后构建出一种可能性假设的思维活动。简单来说,就是思考“如果当时……,那么就会……”的情景。这种思维方式让我们能够超越现实的限制,设想不同的可能性和结果,从而对过去的…...

Java学习手册:Java开发常用的内置工具类包

以下是常用 Java 内置工具包。 • 日期时间处理工具包 • java.time包(JSR 310):这是 Java 8 引入的一套全新的日期时间 API,旨在替代陈旧的java.util.Date和java.util.Calendar类。其中的LocalDate用于表示不带时区的日期&…...

JAVA多线程(8.0)

目录 线程池 为什么使用线程池 线程池的使用 工厂类Executors(工厂模式) submit 实现一个线程池 线程池 为什么使用线程池 在前面我们都是通过new Thread() 来创建线程的,虽然在java中对线程的创建、中断、销毁、等值等功能提供了支持…...

通过门店销售明细表用Python Pandas得到每月每个门店的销冠和按月的同比环比数据

假设我在本地有Excel销售表,包含ID主键、门店ID、日期、销售员姓名和销售额,需要用Pandas统计出每个月所有门店和各门店销售额最高的人,不一定是一个人,以及他所在的门店ID和月总销售额。 步骤1:导入数据并处理日期 …...

详解最新链路追踪skywalking框架介绍、架构、环境本地部署配置、整合微服务springcloudalibaba 、日志收集、自定义链路追踪、告警等

1.skywalking介绍 多种监控手段,可以通过语言探针和service mesh 获得监控数据支持多种语言自动探针,包含java/net/nodejs轻量高效,无需大数据平台和大量的服务器资源模块化,UI、存储、集群管理都有多种机制可选支持告警优秀的可…...

【OSG学习笔记】Day 11: 文件格式与数据交换

OSG 常用文件格式简介 在开始转换前,先了解 OSG 生态中常见的文件格式: .osg:OSG 标准二进制格式,存储场景图数据,体积小、加载快,适合实时渲染。 .ive:OSG 标准文本格式,可读性强,便于手动编辑或调试场景图结构(本质是 XML 格式的文本描述)。 .osgb:OSG 二进制格…...

2025.04.26-美团春招笔试题-第二题

📌 点击直达笔试专栏 👉《大厂笔试突围》 💻 春秋招笔试突围在线OJ 👉 笔试突围OJ 02. 曼哈顿距离探测器 问题描述 K小姐正在研发一种城市交通探测器,该探测器能够检测城市中任意两个位置之间的曼哈顿距离是否恰好为特定值。曼哈顿距离是在直角坐标系中,两点之间…...

搭建基于火灾风险预测与防范的消防安全科普小程序

基于微信小程序的消防安全科普互动平台的设计与实现,是关于微信小程序的,知识课程学习,包括学习后答题。 技术栈主要采用微信小程序云开发,有下面的模块: 1.课程学习模块 2.资讯模块 3.答题模块 4.我的模块 还需…...

05--Altium Designer(AD)的详细安装

一、软件的下载 Altium Designer官网下载 1、临近五一的假期,想着搞个项目,且这个项目与PCB有关系,所以就下这个软件来玩玩。下面保姆级教大家安装。 2、选择适合自己的版本下载(我安装的是24的) 3、软件安装 1.下…...

药监平台上传数据报资源码不存在

问题:电子监管码上传药监平台提示“导入的资源码不存在” 现象:从生产系统导出的关联关系数据包上传到药监平台时显示: 原因:上传数据包的通道的资源码与数据包的资源码不匹配。 解决方法:检查药监平台和生产系统的药…...

DeepSeek预训练追求极致的训练效率的做法

DeepSeek在预训练阶段通过多种技术手段实现了极致的训练效率,其中包括采用FP8混合精度训练框架以降低计算和内存需求 ,创新性地引入Multi-head Latent Attention(MLA)压缩KV缓存以提升推理效率,以及基于Mixture-of-Experts(MoE)的稀疏计算架构以在保证性能的同时显著降低…...

Windows11系统中GIT下载

Windows11系统中GIT下载 0、GIT背景介绍0.0 GIT概述0.1 GIT诞生背景0.2 Linus Torvalds 的设计目标0.3 Git 的诞生(2005 年)0.4 Git 的后续发展0.5 为什么 Git 能成功? 1、资源下载地址1.1 官网资源1.2 站内资源 2、安装指导3、验证是否下载完…...

Maven的概念与初识Maven

目录 一、Maven的概念 1. 什么是Maven 2. 项目构建:从代码到部署的标准化流程 2.1 Maven构建生命周期 2.2 传统构建 vs Maven构建 3. 依赖管理:解决“JAR地狱”的利器 3.1 依赖声明 3.2 依赖传递与冲突解决 4. Maven仓库:依赖的存储…...

【Android】app调用wallpaperManager.setBitmap的隐藏权限

这是一个杞人忧天的问题,app中,可以通过wallpaperManager.setBitmap来设置壁纸, private void setWallpaper() {// 获取 WallpaperManager 实例WallpaperManager wallpaperManager WallpaperManager.getInstance(getApplicationContext());t…...

ORACLE数据库备份入门:第四部分:2-备份场景举例

下面以4个常见的场景为例,介绍如何规划备份方案。备份方案没有标准答案,需要根据实现情况来制定,也和管理员的个人使用习惯有很大相关性。 1 交易型数据库备份 以银行的交易系统为例,除了前一章节提到的关于RPO和RTO的指标外&am…...

STL中emplace实现原理是什么?

template <class... Args>void emplace_back (Args&&... args);这个是vector的emplace_back方法&#xff0c;用到的c11的语法有三个&#xff0c;分别是万能引用、完美转发、参数包。 参数包中的参数是用来构造vector<T>中的T对象。 假如我直接传的就是一个…...

血泪之arduino库文件找不到ArduinoJSON.h: No such file or directory错误原因

#include <ArduinoJson.h> 始终报这个错误&#xff0c; C:\techxixi_project\Arduino\test\camer\camertoserver\camertoserver.ino:6:10: fatal error: ArduinoJSON.h: No such file or directory 6 | #include <ArduinoJSON.h> | ^~~~~~~~~…...

通过门店销售明细表用PySpark得到每月每个门店的销冠和按月的同比环比数据

假设我在Amazon S3上有销售表的Parquet数据文件的路径&#xff0c;包含ID主键、门店ID、日期、销售员姓名和销售额&#xff0c;需要分别用PySpark的SparkSQL和Dataframe API统计出每个月所有门店和各门店销售额最高的人&#xff0c;不一定是一个人&#xff0c;以及他所在的门店…...

【前后端分离项目】Vue+Springboot+MySQL

文章目录 1.安装 Node.js2.配置 Node.js 环境3.安装 Node.js 国内镜像4.创建 Vue 项目5.运行 Vue 项目6.访问 Vue 项目7.创建 Spring Boot 项目8.运行 Spring Boot 项目9.访问 Spring Boot 项目10.实现 Vue 与 Spring Boot 联动11.安装 axios12.编写请求13.调用函数请求接口14.…...

图解 Redis 事务 ACID特性 |源码解析|EXEC、WATCH、QUEUE

写在前面 Redis 通过 MULTI、EXEC、WATCH 等命令来实现事务功能。Redis的事务是将多个命令请求打包&#xff0c;然后一次性、按照顺序的执行多个命令的机制&#xff0c;并且在事务执行期间&#xff0c;服务器不会中断事务而该去执行其他客户端的命令请求。 就像下面这样&#…...

w~嵌入式C语言~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/13870307 一、单片机多任务事件驱动 单片机的ROM与RAM存贮空间有限&#xff0c;一般没有多线程可用&#xff0c;给复杂的单片机项目带来困扰。 经过多年的单片机项目实践&#xff0c;借鉴windows消息机制的思想&#xff…...

CMCC RAX3000M CH EC 算力版刷机(中国移动 RAX3000M 算力版)刷机

刷机前面的工作参考&#xff1a; https://blog.csdn.net/asdcls/article/details/147434218 刷机 eMMC Flash instructions: 1. SSH to RAX3000M, and backup everything, especially factory part. (data partition can be ignored, its useless.) 2. Write new GPT tabl…...

cron定时任务

cron定时任务 一、Cron表达式的定义 基础结构 Cron表达式是由空格分隔的6或7个字段组成的字符串&#xff0c;格式为&#xff1a; 秒 分 时 日 月 星期 [年]其中&#xff0c;年通常可以被省略 字段说明&#xff1a; 秒&#xff08;0-59&#xff09; 秒字段表示每分钟的哪一…...

1.4 大模型应用产品与技术架构

目录 一&#xff0c;产品架构 1.1 AI Embedded产品架构 1.2 AI Copilot产品架构 1.3 AI Agent产品架构 二&#xff0c;技术架构 2.1 纯Prompt 2.2 Agent Function Calling 2.3 RAG &#xff08;Retrieval-Augmented Generation 检索增强生成&#xff09; 2.4 Fine-tu…...

Android HAL HIDL

1 Android HAL HIDL 1.1 Android中查看有哪些HIDL HAL HIDL是Treble Interface的一部分。 adb root adb shell # lshal 1.2 Android打印C调用栈 #include <utils/CallStack.h> 在需要打印的地方加如下的定义。 android::CallStack stack("oem"); logcat | g…...

std::mutex底层实现原理

std::mutex是一个用于实现互斥访问的类&#xff0c;其具备两个成员函数——lock和unlock 锁的底层实现原理 锁的底层实现是基于原子操作的&#xff0c;这些原子操作是由指令支持的&#xff0c;因为单个指令是不能被中断的 一些与锁的实现有关的原子指令为&#xff1a; 待补充…...

性能提升手段--池化技术

看到hadoop代码里有ByteBufferPool,使用池子来避免频繁创建、销毁ByteBuffer,减轻GC压力,提高性能。 顺便总结一下池化技术 一、什么是池化技术?​​ ​​池化(Pooling)​​ 是一种资源管理策略,通过​​预先创建并复用资源​​(如数据库连接、线程、内存对象等)来提…...

精益数据分析(28/126):解读商业模式拼图与关键指标

精益数据分析&#xff08;28/126&#xff09;&#xff1a;解读商业模式拼图与关键指标 在创业和数据分析的探索旅程中&#xff0c;每一次深入研究都可能带来新的启发和突破。今天&#xff0c;我们依旧带着共同进步的初心&#xff0c;深入解读《精益数据分析》中关于商业模式的…...

QT6 源(52)篇二:存储 c 语言字符串的类 QByteArray 的使用举例,

&#xff08;3&#xff09; &#xff08;4&#xff09; 谢谢...

工业摄像头通过USB接口实现图像

工业摄像头系列概览&#xff1a;类型与应用 工业摄像头系列涵盖了多种类型&#xff0c;以满足不同行业和应用的需求。以下是对工业摄像头系列的一些介绍&#xff1a; 一、主要类型与特点 USB工业摄像头 &#xff1a;这类摄像头通常通过USB接口与计算机连接&#xff0c;适用于…...

【BBDM】main.py -- notes

命令行接口 python main.py [OPTIONS]参数 参数类型默认值说明-c, --configstr"BBDM_base.yml"配置文件路径-s, --seedint1234随机种子&#xff0c;用于结果复现-r, --result_pathstr"results"结果保存目录-t, --trainflagFalse训练模式开关&#xff1a;…...

X86物理机安装iStoreOS软路由

目录 安装前准备 制作启动盘 安装系统到硬盘 启动与初始配置 常见问题与注意事项 参考资料 安装前准备 硬件设备 X86物理机&#xff08;如普通电脑、J4125/N5105等小主机&#xff09; U盘&#xff08;建议容量≥2GB&#xff09; 显示器、键盘&#xff08;用于初始配置…...

QML Date:日期处理示例

目录 引言相关阅读QML Date对象知识概要格式化选项 DateExamples示例解析代码解析示例1&#xff1a;日期格式化示例2&#xff1a;不同地区的日期显示示例3&#xff1a;日期解析示例4&#xff1a;自定义格式示例5&#xff1a;日期与时间戳转换 运行效果总结下载链接 引言 在Qt …...

python 与Redis操作整理

以下是使用 Python 操作 Redis 的完整整理&#xff0c;涵盖基础操作、高级功能及最佳实践&#xff1a; 1. 安装与连接 (1) 安装库 pip install redis(2) 基础连接 import redis# 创建连接池&#xff08;推荐复用连接&#xff09; pool redis.ConnectionPool(hostlocalhost, …...

【Linux】环境监控系统软件框架

目录 tasks.h type.h main.c tasks.c makefile 运行结果 调用多线程框架&#xff0c;在主函数写好环境监控文件的函数&#xff0c;使用结构体封装环境指标的参数 最后使用makefile管理工程文件 tasks.h #include<pthread.h>#ifndef __TASK_H__ #define __TASK_H_…...

WPF实现数字孪生示例

WPF 数字孪生系统实现示例 数字孪生(Digital Twin)是通过数字化手段在虚拟空间中构建物理实体的精确数字模型,并实现虚实映射、实时交互和智能决策的技术。本文将展示如何使用WPF实现一个基础的数字孪生系统示例。 一、系统架构设计 1. 整体架构 +-------------------+ | …...

对卡尔曼滤波的理解和简单示例实现

目录 一、概述 二、基本公式解释 1&#xff09;状态转移方程 2&#xff09;状态更新方程 3&#xff09;卡尔曼系数更新方程 4&#xff09;误差协方差估计方程 三、一个简单示例 一、概述 经典卡尔曼滤波算法在线性系统中运用非常广泛&#xff0c;可以对数据实现很好的平…...

Linux基础命令总结

Linux系统命令 1. systemctl 1. 基本语法 systemctl start | stop | restart | status 服务名 2. 经验技巧查看服务的方法:/usr/lib/systemd/system 3. 案例实操 (1)查看防火墙服务的状态 systemctl status firewalld (2)停止防火墙服务 systemctl stop firewalld (…...

视觉大模型专栏导航

关于视觉大模型专栏&#xff0c;暂时还没有比较明确的更新计划&#xff0c;最近会在本专栏上更新关于Sam模型的基本原理&#xff0c;包括Image Encoder、Prompt Encoder及Mask Decoder等模块的实现&#xff1b;还有记录下如何利用Sam代码跑通一个demo。 后期接触了其他视觉大模…...

Eigen的主要类及其功能

Eigen 是一个高性能的 C 模板库&#xff0c;主要用于线性代数、矩阵和向量运算。它提供了许多类来支持各种数学运算&#xff0c;以下是 Eigen 的主要类及其功能分类。 1. 核心矩阵和向量类 这些是 Eigen 中最常用的类&#xff0c;用于表示矩阵和向量&#xff1a; Matrix - 通用…...

深入理解TransmittableThreadLocal:原理、使用与避坑指南

一、ThreadLocal与InheritableThreadLocal回顾 在介绍TransmittableThreadLocal之前&#xff0c;我们先回顾一下Java中的ThreadLocal和InheritableThreadLocal。 1. ThreadLocal ThreadLocal提供了线程局部变量&#xff0c;每个线程都可以通过get/set访问自己独立的变量副本…...

大模型奖励建模新突破!Inference-Time Scaling for Generalist Reward Modeling

传统的RM在通用领域面临准确性和灵活性挑战&#xff0c;而DeepSeek-GRM通过动态生成principle和critic&#xff0c;结合并行采样与meta RM引导的投票机制&#xff0c;实现了更高质量的奖励信号生成。论文通过Self-Principled Critique Tuning (SPCT)方法&#xff0c;显著提升了…...

C++:string 1

练习题&#xff1a; 这个题的思路是从前往后&#xff0c;从后往前同时找&#xff0c;不是字母的话就继续&#xff0c;是的话就交换。 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include <string> using namespace std; //1、4个…...

C语言学习之调试

在C语言的编程学习中&#xff0c;我们能不可避免的要遇到bug。通常我们面对编译错误等问题是很容易发现的&#xff0c;但是当我们面对代码结果不满足预期等情况下是很难去改的&#xff0c;因此我们就要学习如何调试代码。 bug与调试 什么是bug&#xff1f; bug本意是“昆虫”和…...

【project】--模拟搭建一个中小型校园网的网络平台

文章目录 项目介绍设备及IP地址分配node01配置网卡配置DHCP配置路由转发 node02配置网卡配置安装并配置授权 Unbound DNS node03配置网卡配置安装防火墙SNAT配置DNAT配置(端口转发)纯缓存 Unbound DNS 配置 node04配置node05配置node06配置 项目介绍 本项目通过1台物理机和VMw…...