【双目视觉标定】——1原理与实践
0 前言
双目视觉定位是目前机器(机器人)等领域中使用得非常广泛的视觉定位技术,双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算,所以双目相机装配要求高、标定也比单目复杂。相机的标定是定位的基础标定,本文是我学习双目视觉标定方法以及的总结文档。
1 为什么要标定?
作为初学者,我们会有疑问,什么相机需要进行标定,标定到底有什么用呢?这是因为摄像机是将三维世界投射到二维平面的设备,从三维世界的场景到二维平面的成像图像,这两者的转化存在着一种映射关系,不同的相机映射关系不同,所以他们对相同场景所成像的图像也就不同,而标定的目的就是确定相机的这种映射关系。
总体来说,通过标定能够确定相机的内参、外参、畸变系数这三类参数,而这些参数就是确定相机将三维世界转为二维图像的最主要因素;而双目相机还要确认两个摄像头之间的位置关系,这是双目用于计算物体位置的前提。
1.1相机标定要标定什么?
内参:fx,fy,cx,cy,k1,k2,k3,p1,p2
外参:Rt
常用术语
内参矩阵: Intrinsic Matrix
焦距: Focal Length
主点: Principal Point
径向畸变: Radial Distortion
切向畸变: Tangential Distortion
旋转矩阵: Rotation Matrices
平移向量: Translation Vectors
平均重投影误差: Mean Reprojection Error
重投影误差: Reprojection Errors
重投影点: Reprojected Points
2 相机模型
内参、外参、畸变系数这些东西是怎么来的?那我们首先要了解一下相机的成像原理和成像过程。相机的成像是一个物理光学现象,从光学基础来讲还是比较复杂的,但是在大多数时候我们只需要关注它最核心的部分,通过构建一些简单的模型来描叙问题的核心,从而近似的还原真实的物理现象。在相机模型中,我们两类最重要的模型就是:成像模型和畸变模型。
1. 成像模型
在成像模型里针孔模型(就是我们通常所说的小孔成像)是最常用的,它简单但有很好的描叙了相机成像的本质。下图为针孔成像示意图:
在相机中透镜充当了小孔的作用:
是一个小孔成像的模型,其中:
- O点表示camera centre,即相机的中心点,也是相机坐标系的中心点;
- z轴表示principal axis,即相机的主轴;
- q点所在的平面表示image plane,即相机的像平面,也就是图片坐标系所在的二维平面;
- O1点表示principal point,即主点,主轴与像平面相交的点;
- O点到O1点的距离,也就是右边图中的f,即相机的焦距;
- 像平面上的x和y坐标轴是与相机坐标系上的X和Y坐标轴互相平行的;
- 相机坐标系是以X,Y,Z(大写)三个轴组成的且原点在O点,度量值为米(m);
- 像平面坐标系是以x,y(小写)两个轴组成的且原点在O1点,度量值为米(m);
- 像素坐标系一般指图片相对坐标系,在这里可以认为和像平面坐标系在一个平面上,不过原点是在图片的角上,而且度量值为像素的个数(pixel);
在相机的成像平面上放置的是光敏传感器,这些传感器会将成像平面上连续的图像进行采样,这样最终得到的是离散化的图像。在这里就会涉及到相机的内参:成像平面两个方向上传感器单位尺寸的像素密度、成像的中心位置和焦距,这5个参数(像素密度和中心坐标都有两个方向的值)就是我们标定中要确定的主要的内参。
内参一般在相机生产后就比较固定,相对而言外参则是不固定的,因为外参表示的是相机自身在三维空间中相对于给定的世界坐标的位姿,这个位姿信息包括6个参数:三个位置参数、三个姿态参数,实际上两者就是一种线性映射关系。
2. 畸变模型
实际相机用透镜的聚光特性使得投影在成像平面上的光强度更大,成像质量会更好,但是也是由于凸镜的存在也会对图像产生不好的影响,如图像的畸变。
畸变类型和原因,主要有以下两点:
- 透镜自身的形状对光线传播的影响——导致径向畸变
- 在机械组装的过程中,透镜和成像平面不平行——导致切向畸变
在径向畸变可分为两类,如下图所示,左边为枕形畸变、右边为桶形畸变:
可以看到径向畸变只于图像到中心的距离有关,距中心越远畸变越大。对于径向畸变我们使用与中心距离r,相关的高次多项式模型来拟合,其中 r 2 = x 2 + y 2 r^2 = x^2 + y^2 r2=x2+y2:
x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_distorted = x(1+k_1 r^2+k_2 r^4+k_3 r^6) xdistorted=x(1+k1r2+k2r4+k3r6)
y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y_distorted = y(1+k_1 r^2+k_2 r^4+k_3 r^6) ydistorted=y(1+k1r2+k2r4+k3r6)
切向畸变如下示意图:
我们新增参数p1、p2建立如下方程来拟合:
x d i s t o r t e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) x_distorted = x+2p_1 xy+p_2 (r^2+2x^2) xdistorted=x+2p1xy+p2(r2+2x2)
y d i s t o r t e d = y + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) y_distorted = y+2p_2 xy+p_1 (r^2+2y^2) ydistorted=y+2p2xy+p1(r2+2y2)
统一两种畸变:
x d i s t o r t e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) x_distorted = x(1+k_1 r^2+k_2 r^4+k_3 r^6)+2p_1 xy+p_2 (r^2+2x^2) xdistorted=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)
y d i s t o r t e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + 2 p 2 x y + p 1 ( r 2 + 2 y 2 ) y_distorted = y(1+k_1 r^2+k_2 r^4+k_3 r^6)+2p_2 xy+p_1 (r^2+2y^2) ydistorted=y(1+k1r2+k2r4+k3r6)+2p2xy+p1(r2+2y2)
上面统一的畸变公式,并不是将第一种畸变的公式整体代入第二个畸变公式,而是在无畸变图像上再增加两种畸变分量,而每种畸变分量只与无畸变图像相关,所以相互之间不影响,只不过径向畸变分量是乘性的而切向畸变是加性的。
根据畸变模型的公式,我们可以看到畸变系数主要是5个:k1、k2、k3、p1、p2,当然在实际中我们可以灵活选择,如畸变较小的镜头可以去掉高次项。
3. 相机成像总结
总体上,为了用数学描叙相机的成像,即将三维世界的物体转化为数字的图像,我们一般将其分为以下四个步骤(下图源于知乎):
其中刚体变换需要用到相机的外参,透视投影需要用到针孔模型和相机内参中的焦距参数,畸变校正很显然需要使用两种畸变模型和对应的畸变系数,最后数字化图像则需要使用相机内参中剩余参数。
3 双目定位几何模型
成像模型和畸变模型是对单一镜头成像分析,而对于双目摄像头来说,它在成像的基础上还需要定位,因此需要建立一个能够计算物体位置的几何模型。
双目视觉的是模拟人眼,通过视差来计算物体的距离,从而得到物体的空间坐标信息,其几何模型如下图所示:
这里d为左右图的横坐标之差,也称视差disparty。根据视差,在f和b已知的情况下,我们可以估计目标点离相机的深度距离。视差与深度距离成反比,视差越大,距离越近。另外由于视差最小为 一个像素,于是双目的深度存在一个理论上的最大值。可以看到,当基线越长时,双目最大能测到的距离就会变远;反之,小型双目器件则只能测量很近的距离。
虽然由视差计算深度的公式很简洁, 但视差d本身的计算却比较困难,我们需要确切地知道左眼图像某个像素出现在右眼图像的哪一个位置(即对应关系)。此外如果想计算每个像素的深度,其计算量与精度都将成为问题,并且只有在图像纹理变化丰富的地方才能计算视差。
从上图可以看到,双目立体视觉的原理很简单,通过同一物体在两个图片中的视差和两个镜头光轴间的距离(基线),利用相似三角形就可以简单求出物体的距离。但是我们也要看到,此计算的基础是:两个摄像机的成像平面在同一平面上,当然为了计算简单,我们还希望两个相机的中心能水平对齐,这样我们计算视差只需要用到两个图像单个坐标方向上值。
但是在实中是不存在完全共面的两个镜头的,所以在双目相机的标定中,我们除了确定单个相机的内外参数、对图像的畸变进行校正外,还需要对进行立体校正,立体校正的目的就是将实际中非共面对准的两个图像,校正到共面对准,注意这是对图像做的,因为相机镜头已经固定了。
可以看到,为了将两个图像调整到同一平面且中心水平对齐(外极线校准),我们需要知道两个摄像头的相对位置关系,具体来讲就是:旋转矩阵R和平移矩阵T,然后对应将图像做旋转和平移即可。获取立体校正的参数就是立体标定要做的工作,实际上只是对每个镜头进行前面单目标定,用单目标定的参数计算得到立体校正的参数。
以标定物体上的点为参考,可以分别得到左右相机的参考坐标系的坐标表达式,综合两者可以得到从左相机坐标系到右相机坐标系的转关关系,(推导下式其实是很简单的,但是网上的一些资料很少写清楚下面这个公式,有些写出来了也是不对的):
R = R r R l − 1 R = R_r R_l^{-1} R=RrRl−1
T = T r − R T l T = T_r - RT_l T=Tr−RTl
其中,Rr、Tr、Rl、Tl都是通过单目标定得到的参数,这样我们就可以直接求出立体校正的参数。
到此,整个双目视觉需要标定原因、各种标定的原理就讲解完成。
4 标定实践
上面说明了其各种标定参数的作用和原理,现在看看这些参数的实际标定方法。对于双标定,我们要获取的参数是四类:内参、外参、畸变参数、立体校正参数,其中畸变参数的计算需要结合内参和外参共同优化得到,而立体校正参数可以直接由内参和外参直接计算得到,所以虽然是双目相机,但是每一个镜头各自的内参和外参的获取仍然是标定的重点。
4.1内参和外参的数学表示
前面我们分析过相机的内参和外参的物理意义和计算原理,不过当我们计算时,为了保证其数学形式的简洁,通常使用矩阵来表示。从三维世界的坐标点到数字图像中的坐标点,其映射关系用矩阵方法可以表示为:
s 0 m = K [ R , T ] X s_0m=K[R,T]X s0m=K[R,T]X
X是世界坐标系中的点坐标,m是数字图像中点的坐标,使用的是齐次坐标形式,K是相机的内参矩阵,R是相机相对世界坐标系的旋转矩阵、T是平移矩阵, s 0 s_0 s0为缩放因子。
1. 内参矩阵
相机的内参包括:两个方向的像素密度、光轴在成像平面的中心位置、相机的焦距,从上面也可以看到我们在计算中使用的是内参矩阵(Camera Intrinsics):
K = ( f x 0 c x 0 f y c y 0 0 1 ) K = \left(\begin{array}{cc} f_x & 0 & c_x\\ 0 & f_y & c_y \\ 0 & 0 & 1 \end{array}\right) K= fx000fy0cxcy1
其中 f x f_x fx为在x方向焦距长度上拥有的像素个数, f y f_y fy为在y方向焦距长度上拥有的像素个数,称为摄像机在x轴和y轴方向上的尺度因子,使用它可以让内参矩阵形式更加简洁。它们可以由针孔模型和图像数字化采样直接推出:
f x = a x f f y = a y f f_x = a_x f \\ f_y = a_y f \\ fx=axffy=ayf
上式中 a x a_x ax和 a y a_y ay分别表示x方向和y方向上的像素密度,f表示相机的焦距;另外 c x c_x cx为中心在x轴上的像素偏置, c y c_y cy为中心在y轴上的像素偏置。至此内参矩阵就讲所有相机内部参数都包含进去了。
但是在实际中,由于制造工艺的限制,传感器上横向的像素和竖向的像素排列不是绝对的垂直,所以在内参中我们需要加入一个倾斜因子s:
K = ( f x s u 0 0 f y v 0 0 0 1 ) K = \left(\begin{array}{cc} f_x & s & u_0\\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{array}\right) K= fx00sfy0u0v01
不过需要注意的是,由于加入的倾斜因子,内参矩阵中个元素与相机各个参数的对应关系都要将倾斜因子考虑进去。
2. 旋转和平移的齐次表示
R和T是相机的外参,对应相机相对世界坐标系的旋转和平移,这里可以直接用刚体的坐标表换来计算,旋转用旋转矩阵R表示,平移用平移向量T来表示。不过有时候使用齐次矩阵统一旋转矩阵和平移向量能够让计算更简洁方便。
4.2 张正友标定法
1. 简介
相机标定主要有传统标定方法和自标定方法两类:
- 传统标定方法需要标定参照物,参照物的参数已知,然后分析拍摄到的参照物图像,求得相机参数,传统方法操作相对复杂,但精度较高
- 自标定方法不依赖于标定参照物,只领用摄像机的运动约束或者环境的约束来进行标定,自标定方法灵活方便,但由于是非线性标定,精度和鲁棒性都不高
张正有平面标定法也称张氏标定法,属于传统的标定方法。张氏标定只要求从不同的角度对同一平面拍摄2幅以上的的图像,就可以求出摄像机的内外参数。由于其平面模板(棋盘格)制作简单且不需要知道平面移动的具体的位置信息,即有穿透方法的高精度的优点、又相比其他传统的标定法要简单灵活,因此在业界得到了广泛使用。
标定所用的棋盘格如下,一般会将其打印出来贴在平面木板上当做标定物:
2. 单应性映射
由于我们的标定物是棋盘平面,所以棋盘平面的成像实际上是单应性映射(Homography)。那什么是单应性映射?单应性变换是同一物体在不同平面的投影,那么一个投影平面到另一个投影平面的映射关系就是单应性映射。由于单应性映射是在普通的线性变换的基础上增加了额外的约束条件,所以单应性映射会更简单:由于两个被物体都是平面,所以我们可以把变换前后的两个坐标系都建立在平面之上,那么前后两个平面的坐标都可以只用两个坐标值表示。两个平面的单应性映射关系用单应性矩阵来描叙,在张正友标定法中我们直接求得的是单应性矩阵。
单应性映射矩阵方程为:
( u v 1 ) = H ( x y 1 ) \left(\begin{array}{cc} u \\ v \\ 1 \end{array}\right) = H\left(\begin{array}{cc} x\\ y \\ 1 \end{array}\right) uv1 =H xy1
可以看到,前后连个平面的点都只用了两个坐标值的齐次坐标表示,其中H为3x3单应性矩阵,9个元素值全部未知;不过由于是齐次方程,通常将H提取一个比例系数,让其最后一个元素值为1,只需求得8个未知数即可。每一个点对对应一个矩阵方程,一个矩阵方程对应三个方程组,但是由于是齐次方程,需要去除一个比例系数,实际上一个单应性矩阵方程只能提供两个有效的方程组,因此为了求解H,所以至少需要四个对应点。
2. 从单应性矩阵计算相机内参与外参
结合本文最开始的单个相机的成像坐标转换公式,使用单应性变换,则单应性矩阵为:
H = [ h 1 h 2 h 3 ] = λ K [ r 1 r 2 t ] H=[h1 h2 h3]=λK[r1 r2 t] H=[h1h2h3]=λK[r1r2t]
其中K仍然是内参,λ为比例系数,r1、r2、t为外参矩阵的一部分,计算将H拆解为(h1, h2, h3)的向量,取与r1和r2相关的方程,然后结合r1和r2的两个约束条件:
- r1和r2位正交
- r1和r2都为单位向量(模为1)
可以得到如下两个消除了r1和r2,用来计算内参K的方程组:
h 1 T K − T K − 1 h 2 = 0 h 1 T K − T K − 1 h 1 = h 2 T K − T K − 1 h 2 h_1^T K^{-T} K^{-1} h_2 = 0 \\ h_1^T K^{-T} K^{-1} h_1 = h_2^T K^{-T} K^{-1} h_2 h1TK−TK−1h2=0h1TK−TK−1h1=h2TK−TK−1h2
内参矩阵K有5个未知量(加入了倾斜因子),每一个单应性矩阵只能得到两个上面的方程组,所以至少需要3个不同的单应性矩阵,即相机需要拍摄棋盘格三种不同的姿态。
得到了内参矩阵后,外参可以直接通过以下公式推出(由之前的推导得到):
λ = 1 ∥ A − 1 h 1 ∥ = 1 ∥ A − 1 h 2 ∥ r 1 = 1 λ K − 1 h 1 r 2 = 1 λ K − 1 h 2 r 3 = r 1 × r 2 t = λ K − 1 h 3 \lambda =\frac{1}{\|A^{-1}h_1\|}=\frac{1}{\|A^{-1}h_2\|} \\ r_1=\frac{1}{\lambda}K^{-1}h_1 \\ r_2=\frac{1}{\lambda}K^{-1}h_2 \\ r_3 = r_1 \times r_2 \\ t=\lambda K^{-1}h_3 λ=∥A−1h1∥1=∥A−1h2∥1r1=λ1K−1h1r2=λ1K−1h2r3=r1×r2t=λK−1h3
3. 径向畸变估计
张氏标定只关注了影响大的径向畸变,根据径向畸变模型,我们有联系畸变后的联系畸变后的坐标和畸变前坐标的方程。一般为避免解非线性方程组,我们使用多个图像多个角点,使用最小二乘法,以畸变前后的坐标差异最小化为目标,迭代优化。
4. 用最大似然估计优化参数
在上面推导的是理想的结果,在实际成像中会受到噪声的干扰,我们认为噪声服从高斯分布,所以在张氏标定中我们用高斯分布来拟合,然后用最大似然法估计内外参数的最优结果。
具体做法是:
- 求出理想的内参值
- 拍摄多幅棋盘图像,用理想的内参求出不同姿态图像的外参
- 用理想的内参和外参预测每个图像中的每个角点的成像坐标,用实际拍摄得到的坐标作为真值,可以得到每一个预测值在高斯分布下的可能的概率。
- 使用极大似然法,将所有的预测概率相乘得到似然函数
- 以理想内参为初值,迭代优化,让似然函数取得最大值
中间的数学推导我就不写了,简化后最终优化的函数如下:
∑ i = 1 n ∑ j = 1 m ∥ m ^ ( K , R i , t i , M i j ) − m i j ∥ 2 \sum^n_{i=1}\sum^m_{j=1} \| \hat{m}(K,R_i,t_i,M_{ij})-m_{ij} \|^2 i=1∑nj=1∑m∥m^(K,Ri,ti,Mij)−mij∥2
上式需要让其取最小值,优化算法一般用Levenberg-Marquardt算法(一种介于牛顿法与梯度下降法之间的一种非线性优化方法)迭代求解。
4.3 总结
总结整个张氏标定过程包括如下步骤:
- 打印一张棋盘格,把它贴在一个平面上,作为标定物
- 通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的照片
- 从照片中提取棋盘格角点
- 估算理想无畸变的情况下,五个内参和六个外参
- 应用最小二乘法估算实际存在径向畸变下的畸变系数
- 极大似然法,优化估计,提升估计精度
第1步:准备一张棋盘格,粘贴于墙面,并用直尺测量黑白方格的真实物理长度。
第2步:调用双目摄像头,分别从不同角度拍摄得到一系列棋盘格图像。
第3步:利用左目图片数据集,进行左目相机标定,得到左目内参矩阵K1、左目畸变系数向量D1。
第4步:利用右目图片数据集,进行右目相机标定,得到右目内参矩阵K2、右目畸变系数向量D2。
第5步:将左右目测量得到的参数K1、K2、D1、D2作为输入,再同时利用左右目一一对应好的棋盘格图片,调用stereoCalibrate函数,输出左右目的旋转矩阵R、平移向量T。
第6步:基于测量得到的K1、K2、D1、D2、R、T,进行双目视觉的图像校正。
备注:需要用直尺测量黑白方格的真实物理长度,因为我们会将真实世界的棋盘格3D坐标,以相同的尺度(米为单位),存储于object_points容器中,这样求解得到的平移向量T才会有意义,它的尺度才会和真实世界尺度相对应。然后我们会借助OpenCV棋盘格检测函数,将每张图片对应的棋盘格坐标索引,对应存储于left_img_points、 right_img_points容器中。在得到一系列对应好的2D、3D坐标点后,就可通过线性方程求解参数估计。
标定结构的判断标准
Re-projection error(重投影误差)
其他补充
圆环和棋盘格优缺点
张法没有限制棋盘格或圆环
能解决圆环偏心误差就用圆
拍摄相机和数量选择
经验:
特征点检测的基础是直线圆特征的检测,而特征检测直接和梯度挂钩
特征的理想成像边缘是阶跃的边缘(0-255),但是在实际成像中是不可能达到这样的效果的,在前景与背景中间会有一段过渡带。我们引入锐度的概念来表示特征边缘的锐利程度,他和边缘的亮度值相关。锐度值可以反映出图像的成像质量。
参考
- A Flexible New Technique for Camera Calibration
- 相机的那些事儿 (三)参数标定
- 双目视觉的立体标定方法
- 摄像机模型与标定(4)——单应矩阵
- 张正友标定算法原理详解
相关文章:

【双目视觉标定】——1原理与实践
0 前言 双目视觉定位是目前机器(机器人)等领域中使用得非常广泛的视觉定位技术,双目视觉是模拟人的视觉系统利用两个不同位置的摄像头的视差来确定物体的位置。由于有需要采集两个摄像头的图像共同参与计算,所以双目相机装配要求…...

Java学习笔记(十二)
Mysql explain Extra MySQL的EXPLAIN语句是优化数据库查询的重要手段,其中的Extra列包含了不适合在其他列中显示但十分重要的额外信息。以下是对Extra列的详细介绍及举例: 一、Using filesort 解释:表示MySQL会对数据使用一个外部的索引排序…...

《Java 实现希尔排序:原理剖析与代码详解》
目录 一、引言 二、希尔排序原理 三、代码分析 1. 代码整体结构 2. main方法 3. sort方法(希尔排序核心逻辑) 四、测试结果 一、引言 在排序算法的大家族中,希尔排序是一种改进的插入排序算法,它通过将原始数据分成多个子序…...

RDMA驱动学习(二)- command queue
为了实现用户对网卡硬件的配置,查询,或者执行比如create_cq等命令,mellanox网卡提供了command queue mailbox的机制,本节将以create_cq为例看下这个过程。 command queue(后续简称cmdq)是一个4K对齐的长度…...

H2 Database IDEA 源码 DEBUG 环境搭建
H2 Database IDEA 源码 DEBUG 环境搭建 基于最新的 version-2.3.230 拉取分支。 git remote add h2 https://github.com/h2database/h2database.git git fetch h2 git checkout -b version-2.3.230 version-2.3.230使用 # 启动 java -jar h2*.jar# H2 shell 方式使用 java …...

nginx系列--(三)--http
本文主要介绍http模块accept read流程,!!!请求对应的响应直接在read流程里就会返回给用户,而不需要通过write事件,和redis一样,基本都不通过eventloop write事件来发送响应给客户端,…...

通过Wireshark抓包分析,体验HTTP请求的一次完整交互过程
目录 一、关于Wireshark 1.1、 什么是Wireshark 1.2、下载及安装 二、HTTP介绍 2.1、HTTP请求过程介绍 2.2 、TCP协议基础知识 2.2.1、概念介绍 2.2.2、TCP协议的工作原理 2.2.3、三次握手建立连接 2.3.4、四次挥手断开连接 2.3、Wireshark抓包分析过程 2.3.1、三次握…...

Requestium:Python中的Web自动化新贵
文章目录 Requestium:Python中的Web自动化新贵背景:为何选择Requestium?Requestium是什么?如何安装Requestium?简单的库函数使用方法场景应用常见Bug及解决方案总结 Requestium:Python中的Web自动化新贵 背…...

2024版红娘金媒10.3婚恋相亲系统源码小程序(亲测)
1. 红娘服务 红娘服务模块是该系统的一大特色。专业红娘会通过分析用户的个人资料和偏好, 为用户提供精准的配对建议和个性化服务。用户可以预约红娘服务,通过红娘的介入,提升配对成功率。 2. 相亲活动 相亲活动模块用于组织和管理线下或线…...

k8s-实战——ES集群部署
文章目录 yaml文件es-pvc.yamles-svc.yamles-cluster-sts.yaml创建elasticsearch集群yaml文件 es-pvc.yaml 通过nfs服务进行新增pv并通过labels关联pvc前置准备需要提前准备pv的服务器以及挂在路径--- apiVersion: v1 kind: PersistentVolume metadata:name: nfs-es-pv-data-...

无人机的就业前景怎么样?
无人机的就业前景在当前及未来一段时间内都非常广阔。随着低空经济的蓬勃发展,无人机在农业、公安、测绘、交通、应急救援、影视拍摄等多个领域得到了广泛应用,对无人机操控员和相关专业人才的需求也随之急剧增加。 一、无人机操控员的就业前景 1. 高需…...

【学习】软件测试中V模型、W模型、螺旋模型三者介绍
在软件工程的星辰大海之中,存在着三种独特的航路图:V模型、W模型以及螺旋模型。它们分别以各自的方式描绘了软件开发与测试的不同旅程。 首先映入眼帘的是V模型——一个以垂直线条贯穿始终的简洁图形。这个模型如同一座倒立的“V”字形山峰,…...

Kafka存储机制大揭秘:从日志结构到清理策略的全面解析
文章目录 一、前言二、日志存储结构1.日志文件结构2.topic3.partition4.segment索引文件5.message结构6.message查找过程 三、存储策略1.顺序写2.页缓存3.零拷贝4.缓存机制 四、日志格式演变1.V0 版本2.V1 版本3.V0/V1消息集合4.V2 版本消息格式5.V2版本消息集合 五、偏移量维护…...

显卡服务器和普通服务器之间的区别有哪些?
显卡服务器也被称之为GPU服务器,显卡服务器与普通的服务器之间有着很明显的区别,下面就让我们共同来了解一下吧! 普通服务器的主要处理器通常都是配备的中央处理器,可以用于执行大部分通用计算任务和操作系统的管理;而…...

国产科技里程碑:自主算力走向世界,“表格编程”横空出世
近日,中国高科技领域迎来里程碑式的进展。 据安徽省量子计算工程研究中心官方消息,本源量子计算科技(合肥)股份有限公司(简称“本源量子”)成功向海外销售了其第三代自主超导量子计算机“本源悟空”的机时。…...

人工智能如何改变未来生活:从医疗到日常的全面升级
人工智能如何改变未来生活:从医疗到日常的全面升级 随着人工智能(AI)技术的进步,我们正逐渐看到它为各行各业带来的巨大变革。从医疗、企业到日常生活,AI通过简化流程、提高效率,甚至改善生活质量…...

第112届全国糖酒会(3月成都)正式官宣!
作为食品饮料行业内备受瞩目的年度盛事,全国糖酒商品交易会(简称“糖酒会”)一直是各大厂商与经销商展现企业风采、寻觅合作伙伴及签署订单的关键舞台。2024年10月31日,第111届全国糖酒商品交易会(秋糖)在深…...

NFT Insider #154:The Sandbox Alpha 4 第四周开启,NBA Topshot NFT 销量激增至新高
市场数据 加密艺术及收藏品新闻 NBA 赛季开幕推动 Topshot NFT 销量激增至新高 随着波士顿凯尔特人队和纽约尼克斯队在 10 月 22 日开启 2024-2025 NBA 赛季的序幕,NBA Topshot 的 NFT 销售量达到了自上赛季季后赛以来的最高水平。截止到 10 月 27 日的这一周&…...

【Canal 中间件】Canal 实现 MySQL 增量数据的异步缓存更新
文章目录 一、安装 MySQL1.1 启动 mysql 服务器1.2 开启 Binlog 写入功能1.2.1创建 binlog 配置文件1.2.2 修改配置文件权限1.2.3 挂载配置文件1.2.4 检测 binlog 配置是否成功 1.3 创建账户并授权 二、安装 RocketMQ2.1 创建容器共享网络2.2 启动 NameServer2.3 启动 Broker2.…...

独立开发的个人品牌打造:个人IP与独立开发的结合
引言 个人品牌程序员也需要打造。在当今的创意经济中,个人IP与独立开发的结合成为了一种趋势,为个体带来了前所未有的机会和可能性。本文将探讨如何通过打造个人IP来增强独立开发的影响力,并探索这种结合为个人带来的潜在价值。 个人IP的重…...
每天一题:洛谷P2002 消息扩散
题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着。 题目描述 有 n 个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出 n 个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有 …...

【深度学习】用LSTM写诗,生成式的方式写诗系列之一
Epoch 4: 100%|███████████████████████████████████████████████████████████| 63/63 [00:07<00:00, 8.85batch/s, acc18.5, loss5.8] [5] loss: 5.828, accuracy: 18.389 , lr:0.001000 Epoch 5: 100%|███…...

HomeAssistant自定义组件学习-【二】
#要说的话# 前面把中盛科技的控制器组件写完了。稍稍熟悉了一些HA,现在准备写窗帘控制组件,构想的东西会比较多,估计有些难度,过程会比较长,边写边记录吧! #设备和场景环境# 使用的是Novo的电机…...

如何看待AI技术的应用前景?
文章目录 如何看待AI技术的应用前景引言AI技术的现状1. AI的定义与分类2. 当前AI技术的应用领域 AI技术的应用前景1. 经济效益2. 社会影响3. 技术进步 AI技术应用面临的挑战1. 数据隐私与安全2. 可解释性与信任3. 技能短缺与就业影响 AI技术的未来发展方向1. 人工智能的伦理与法…...

Unity中的屏幕坐标系
获得视口宽高 拖动视口会改变屏幕宽高数值 MousePosition 屏幕坐标系的原点在左下角,MousePosition返回Z为0也就是纵深为0的Vector3 但是如果鼠标超出屏幕范围不会做限制,所以可能出现负数或者大于屏幕宽高的情况,做鼠标拖拽物体时需要注…...

标题点击可跳转网页
要实现点击标题跳转到网页的功能,你可以在Vue组件中使用<a>标签(锚点标签)并设置href属性为网页的URL。如果你希望使用uni-app的特性来控制页面跳转,可以使用uni.navigateTo方法(这适用于uni-app环境,…...

易语言模拟真人动态生成鼠标滑动路径
一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序,它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言,原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势: 模拟…...

Linux:生态与软件安装
文章目录 前言一、Linux下安装软件的方案二、包管理器是什么?三、生态问题相关的理解1. 什么操作系统是好的操作系统?2. 什么是生态?3. 软件包是谁写的?这些工程师为什么要写?钱的问题怎么解决? 四、我的服务器怎么知…...

R 语言与其他编程语言的区别
R 语言与其他编程语言的区别 R 语言作为一种专门用于统计计算和图形的编程语言,与其他编程语言相比有一些独特的特点和区别。本文将详细介绍这些区别,帮助你更好地理解 R 语言的优势和适用场景。 1. 专为统计和数据分析设计 统计功能 内置统计函数&…...

RC低通滤波器Bode图分析(传递函数零极点)
RC低通滤波器 我们使得R1K,C1uF;电容C的阻抗为Xc; 传递函数 H ( s ) u o u i X C X C R 1 s C 1 s C R 1 1 s R C (其中 s j ω ) H(s)\frac{u_{o} }{u_{i} } \frac{X_{C} }{X_{C}R} \frac{\frac{1}{sC} }{\…...