网站设计中怎么设置当前元素不可见/如何创建自己的个人网站

网站设计中怎么设置当前元素不可见,如何创建自己的个人网站,长沙网页设计培训机构,企业网站备案教程1基本原理 1.1 单应性矩阵(Homography)的建立 相机模型:世界坐标系下棋盘格平面(Z0)到图像平面的投影关系为: s [ u v 1 ] K [ r 1 r 2 t ] [ X Y 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} K…

1基本原理

1.1 单应性矩阵(Homography)的建立

相机模型:世界坐标系下棋盘格平面(Z=0)到图像平面的投影关系为:
s [ u v 1 ] = K [ r 1 r 2 t ] [ X Y 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = K \begin{bmatrix} r_1 & r_2 & t \end{bmatrix} \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} s uv1 =K[r1r2t] XY1

其中:

  • ( X , Y ) (X,Y) (X,Y):棋盘格角点的世界坐标(Z=0)。

  • ( u , v ) (u,v) (u,v):图像平面上的像素坐标。

  • K K K:内参矩阵,形式为:
    K = [ f x γ u 0 0 f y v 0 0 0 1 ] K = \begin{bmatrix} f_x & \gamma & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{bmatrix} K= fx00γfy0u0v01

  • r 1 , r 2 , t r_1, r_2, t r1,r2,t:外参(旋转矩阵的前两列和平移向量)。

  • s s s:尺度因子。

单应性矩阵:将投影关系简化为:
s [ u v 1 ] = H [ X Y 1 ] s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix} = H \begin{bmatrix} X \\ Y \\ 1 \end{bmatrix} s uv1 =H XY1

其中 H = K [ r 1 r 2 t ] H = K [r_1 \quad r_2 \quad t] H=K[r1r2t] 是一个3×3矩阵,称为单应性矩阵。


1.2 单应性矩阵的求解

对每个棋盘格图像,利用至少4组对应点(世界坐标和图像坐标),通过最小二乘法或直接线性变换(DLT)求解 H H H。对于每组点:
[ X Y 1 0 0 0 − u X − u Y − u 0 0 0 X Y 1 − v X − v Y − v ] [ h 11 h 12 h 13 h 21 h 22 h 23 h 31 h 32 h 33 ] = 0 \begin{bmatrix} X & Y & 1 & 0 & 0 & 0 & -uX & -uY & -u \\ 0 & 0 & 0 & X & Y & 1 & -vX & -vY & -v \end{bmatrix} \begin{bmatrix} h_{11} \\ h_{12} \\ h_{13} \\ h_{21} \\ h_{22} \\ h_{23} \\ h_{31} \\ h_{32} \\ h_{33} \end{bmatrix} = 0 [X0Y0100X0Y01uXvXuYvYuv] h11h12h13h21h22h23h31h32h33 =0

通过SVD分解求解 H H H 的9个参数(归一化后)。


1.3 内参矩阵的约束条件

张正友标定法中,通过旋转矩阵的正交性推导两个约束方程的过程是核心步骤。以下是结合正交矩阵性质与单应性矩阵的详细推导:

1.3.1 旋转矩阵的正交性

在张正友标定法中,旋转矩阵 R R R 是正交矩阵,满足以下性质:

  1. 列向量正交性 R R R 的列向量 r 1 , r 2 , r 3 r_1, r_2, r_3 r1,r2,r3 两两正交。
  2. 单位模长约束:每个列向量的模长为1,即 ∥ r 1 ∥ = ∥ r 2 ∥ = ∥ r 3 ∥ = 1 \|r_1\| = \|r_2\| = \|r_3\| = 1 r1=r2=r3=1

由于标定棋盘格平面位于世界坐标系的 Z = 0 Z=0 Z=0 平面,投影模型中仅涉及 R R R 的前两列 r 1 r_1 r1 r 2 r_2 r2,因此正交性约束简化为:
{ r 1 T r 2 = 0 (正交性) r 1 T r 1 = r 2 T r 2 = 1 (单位模长) \begin{cases} r_1^T r_2 = 0 \quad \text{(正交性)} \\ r_1^T r_1 = r_2^T r_2 = 1 \quad \text{(单位模长)} \end{cases} {r1Tr2=0(正交性)r1Tr1=r2Tr2=1(单位模长)

1.3.2 单应性矩阵 $ H $ 与旋转矩阵的关联

单应性矩阵 H H H 将棋盘格平面( Z = 0 Z=0 Z=0)映射到图像平面,其表达式为:
H = λ K [ r 1 r 2 t ] H = \lambda K [r_1 \quad r_2 \quad t] H=λK[r1r2t]

其中:

  • λ \lambda λ:尺度因子,
  • K K K:内参矩阵,
  • r 1 , r 2 r_1, r_2 r1,r2:旋转矩阵的前两列,
  • t t t:平移向量。

H H H 的列向量表示为 h 1 , h 2 , h 3 h_1, h_2, h_3 h1,h2,h3,则有:
h 1 = λ K r 1 , h 2 = λ K r 2 , h 3 = λ K t h_1 = \lambda K r_1, \quad h_2 = \lambda K r_2, \quad h_3 = \lambda K t h1=λKr1,h2=λKr2,h3=λKt

1.3.3 正交性约束的代数转化

通过 h 1 h_1 h1 h 2 h_2 h2 表达正交性条件:

  1. 正交性条件 r 1 T r 2 = 0 r_1^T r_2 = 0 r1Tr2=0:
    ( 1 λ K − 1 h 1 ) T ( 1 λ K − 1 h 2 ) = 0 (\frac{1}{\lambda} K^{-1} h_1)^T (\frac{1}{\lambda} K^{-1} h_2) = 0 (λ1K1h1)T(λ1K1h2)=0

    化简后得到:
    h 1 T K − T K − 1 h 2 = 0 h_1^T K^{-T} K^{-1} h_2 = 0 h1TKTK1h2=0

  2. 单位模长条件 $ r_1^T r_1 = r_2^T r_2 = 1 $:
    ( 1 λ K − 1 h 1 ) T ( 1 λ K − 1 h 1 ) = ( 1 λ K − 1 h 2 ) T ( 1 λ K − 1 h 2 ) (\frac{1}{\lambda} K^{-1} h_1)^T (\frac{1}{\lambda} K^{-1} h_1) = (\frac{1}{\lambda} K^{-1} h_2)^T (\frac{1}{\lambda} K^{-1} h_2) (λ1K1h1)T(λ1K1h1)=(λ1K1h2)T(λ1K1h2)

    化简后得到:
    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_1 = h_2^T K^{-T} K^{-1} h_2 h1TKTK1h1=h2TKTK1h2

1.3.4 引入对称矩阵 $ B $ 简化计算

定义对称矩阵 B = K − T K − 1 B = K^{-T} K^{-1} B=KTK1,其元素仅与内参矩阵 K K K 相关。将上述两个条件转化为:
{ h 1 T B h 2 = 0 h 1 T B h 1 = h 2 T B h 2 \begin{cases} h_1^T B h_2 = 0 \\ h_1^T B h_1 = h_2^T B h_2 \end{cases} {h1TBh2=0h1TBh1=h2TBh2

矩阵 $ B $ 的表达式为:
B = [ 1 f x 2 − γ f x 2 f y γ v 0 − f y u 0 f x 2 f y − γ f x 2 f y γ 2 f x 2 f y 2 + 1 f y 2 − γ ( γ v 0 − f y u 0 ) f x 2 f y 2 − v 0 f y 2 γ v 0 − f y u 0 f x 2 f y − γ ( γ v 0 − f y u 0 ) f x 2 f y 2 − v 0 f y 2 ( γ v 0 − f y u 0 ) 2 f x 2 f y 2 + v 0 2 f y 2 + 1 ] B = \begin{bmatrix} \frac{1}{f_x^2} & -\frac{\gamma}{f_x^2 f_y} & \frac{\gamma v_0 - f_y u_0}{f_x^2 f_y} \\ -\frac{\gamma}{f_x^2 f_y} & \frac{\gamma^2}{f_x^2 f_y^2} + \frac{1}{f_y^2} & -\frac{\gamma (\gamma v_0 - f_y u_0)}{f_x^2 f_y^2} - \frac{v_0}{f_y^2} \\ \frac{\gamma v_0 - f_y u_0}{f_x^2 f_y} & -\frac{\gamma (\gamma v_0 - f_y u_0)}{f_x^2 f_y^2} - \frac{v_0}{f_y^2} & \frac{(\gamma v_0 - f_y u_0)^2}{f_x^2 f_y^2} + \frac{v_0^2}{f_y^2} + 1 \end{bmatrix} B= fx21fx2fyγfx2fyγv0fyu0fx2fyγfx2fy2γ2+fy21fx2fy2γ(γv0fyu0)fy2v0fx2fyγv0fyu0fx2fy2γ(γv0fyu0)fy2v0fx2fy2(γv0fyu0)2+fy2v02+1

其中 f x , f y , u 0 , v 0 , γ f_x, f_y, u_0, v_0, \gamma fx,fy,u0,v0,γ 为内参参数。

1.3.5 构建线性方程组求解 B B B

将单应性矩阵 H H H 的元素代入约束方程:

  1. 正交性方程
    h 11 h 21 B 11 + ( h 11 h 22 + h 12 h 21 ) B 12 + ⋯ + h 31 h 32 B 33 = 0 h_{11} h_{21} B_{11} + (h_{11} h_{22} + h_{12} h_{21}) B_{12} + \cdots + h_{31} h_{32} B_{33} = 0 h11h21B11+(h11h22+h12h21)B12++h31h32B33=0

  2. 单位模长方程
    h 11 2 B 11 + 2 h 11 h 12 B 12 + ⋯ + h 31 2 B 33 = h 21 2 B 11 + ⋯ + h 32 2 B 33 h_{11}^2 B_{11} + 2 h_{11} h_{12} B_{12} + \cdots + h_{31}^2 B_{33} = h_{21}^2 B_{11} + \cdots + h_{32}^2 B_{33} h112B11+2h11h12B12++h312B33=h212B11++h322B33

每幅标定图像提供一个 $ H $,对应两个方程。B为对称矩阵所以有6个自由度,内参矩阵有5个自由度,因此最少需要3张照片提供6个方程求解B及内参。若使用 n n n 幅图像,可构建 2 n 2n 2n 个方程的线性方程组:
V b = 0 V b = 0 Vb=0

其中:

  • V V V 是系数矩阵,
  • b = [ B 11 , B 12 , B 13 , B 22 , B 23 , B 33 ] T b = [B_{11}, B_{12}, B_{13}, B_{22}, B_{23}, B_{33}]^T b=[B11,B12,B13,B22,B23,B33]T B B B 的向量化形式。

通过 奇异值分解(SVD) 求解 b b b,再通过 Cholesky分解 B B B 中恢复内参矩阵 K K K

这一过程将几何约束(旋转矩阵的正交性)与代数计算(线性方程求解)结合,是张正友标定法能够仅用平面棋盘格实现高精度标定的核心。

1.4 外参求解

已知 $ K $ 后,通过 $ H $ 分解外参:
r 1 = λ K − 1 h 1 , r 2 = λ K − 1 h 2 , t = λ K − 1 h 3 r_1 = \lambda K^{-1} h_1, \quad r_2 = \lambda K^{-1} h_2, \quad t = \lambda K^{-1} h_3 r1=λK1h1,r2=λK1h2,t=λK1h3

其中 λ = 1 / ∥ K − 1 h 1 ∥ \lambda = 1 / \|K^{-1} h_1\| λ=1/∥K1h1
旋转矩阵 R = [ r 1 r 2 r 1 × r 2 ] R = [r_1 \quad r_2 \quad r_1 \times r_2] R=[r1r2r1×r2],需正交化处理(如QR分解)。


1.5 非线性优化与畸变校正

优化目标函数:最小化重投影误差:
∑ i = 1 n ∑ j = 1 m ∥ p i j − p ^ ( K , R i , t i , k 1 , k 2 , X j ) ∥ 2 \sum_{i=1}^n \sum_{j=1}^m \| p_{ij} - \hat{p}(K, R_i, t_i, k_1, k_2, X_j) \|^2 i=1nj=1mpijp^(K,Ri,ti,k1,k2,Xj)2

其中 $ k_1, k_2 $ 为径向畸变系数,畸变模型为:
u 畸变 = u ( 1 + k 1 r 2 + k 2 r 4 ) u_{\text{畸变}} = u (1 + k_1 r^2 + k_2 r^4) u畸变=u(1+k1r2+k2r4)

采用Levenberg-Marquardt算法优化所有参数。


总结

张正友标定法通过单应性矩阵将棋盘格平面与图像平面关联,利用旋转矩阵的正交性建立内参约束,最终通过线性与非线性优化联合求解参数。公式推导的关键在于:

  1. 单应性矩阵的线性求解;
  2. 内参约束条件的正交性展开;
  3. 非线性优化的重投影误差最小化。

该方法仅需平面棋盘格,无需精密设备,且精度较高,成为计算机视觉中广泛应用的标定方法。

2opencv源码解析

OpenCV的cv::calibrateCamera函数是相机标定算法的核心实现,其源码逻辑融合了张正友标定法的数学原理与非线性优化技术。以下从源码层面对其核心流程和关键模块进行深度剖析,并结合OpenCV 4.8版本代码结构展开说明。


2.1 函数入口与参数解析

函数原型(简化自modules/calib3d/src/calibration.cpp):

double calibrateCamera(InputArrayOfArrays objectPoints,  // 世界坐标点集(Z=0平面)InputArrayOfArrays imagePoints,   // 图像坐标点集Size imageSize,                  // 图像尺寸InputOutputArray cameraMatrix,    // 输入/输出内参矩阵InputOutputArray distCoeffs,     // 输入/输出畸变系数OutputArrayOfArrays rvecs,       // 输出旋转向量OutputArrayOfArrays tvecs,       // 输出平移向量int flags,                       // 标定标志位TermCriteria criteria)           // 优化终止条件

关键参数说明

  • flags:控制标定行为的标志位,例如:
    • CALIB_USE_INTRINSIC_GUESS:使用用户提供的初始内参矩阵。
    • CALIB_FIX_ASPECT_RATIO:固定焦距比(fx/fy)。
    • CALIB_ZERO_TANGENT_DIST:忽略切向畸变(p1=p2=0)。
  • criteria:优化终止条件(默认迭代30次或误差<1e-6)。

2.2 源码核心流程

阶段1:数据校验与初始化
// 检查输入数据合法性
CV_Assert(objectPoints.type() == CV_32FC3 || objectPoints.type() == CV_64FC3);
CV_Assert(imagePoints.type() == CV_32FC2 || imagePoints.type() == CV_64FC2);// 初始化内参矩阵和畸变系数
if (!(flags & CALIB_USE_INTRINSIC_GUESS)) {cameraMatrix = Mat::eye(3, 3, CV_64F);  // 默认初始化为单位矩阵distCoeffs = Mat::zeros(5, 1, CV_64F);  // 默认仅考虑k1,k2,p1,p2,k3
}

阶段2:计算单应性矩阵(Homography)

代码路径modules/calib3d/src/homography.cpp

// 对每幅图像计算H矩阵
for (int i = 0; i < nimages; i++) {Mat H = findHomography(objectPoints[i], imagePoints[i], RANSAC);homographies.push_back(H);
}

数学原理:单应性矩阵 H H H 满足 s [ u v 1 ] = H [ X Y 1 ] s \begin{bmatrix}u \\ v \\ 1\end{bmatrix} = H \begin{bmatrix}X \\ Y \\ 1\end{bmatrix} s uv1 =H XY1 ,通过SVD分解最小化重投影误差求解。


阶段3:构建约束方程求解内参矩阵

核心代码(简化自modules/calib3d/src/calibration.cpp):

// 步骤1:定义对称矩阵B = K^{-T}K^{-1}
Mat B(3, 3, CV_64F);
B.at<double>(0,0) = 1.0 / (fx*fx);
B.at<double>(0,1) = -gamma / (fx*fx*fy);
// ... 其他元素根据内参展开// 步骤2:构建线性方程组V*b=0
Mat V(2*nimages, 6, CV_64F);  // 每幅图像贡献2个方程
for (int i = 0; i < nimages; i++) {Mat h1 = homographies[i].col(0);Mat h2 = homographies[i].col(1);// 填充正交性约束和单位模长约束V.row(2*i) = ...; // h1^T*B*h2=0V.row(2*i+1) = ...; // h1^T*B*h1 = h2^T*B*h2
}// 步骤3:SVD求解最小特征值对应的b向量
SVD::solveZ(V, b);// 步骤4:Cholesky分解恢复内参矩阵K
Mat KInv = chol(B);
K = KInv.inv();

数学推导:通过旋转矩阵的正交性 $ r_1^T r_2 = 0 $ 和单位模长约束 $ |r_1| = |r_2| = 1 $,将单应性矩阵 $ H $ 分解为内参矩阵 $ K $ 和外参的线性组合。


阶段4:外参(R,t)估计
for (int i = 0; i < nimages; i++) {Mat h1 = homographies[i].col(0);Mat h2 = homographies[i].col(1);Mat h3 = homographies[i].col(2);// 计算尺度因子λdouble lambda = 1.0 / norm(K.inv() * h1);// 分解外参Mat r1 = lambda * K.inv() * h1;Mat r2 = lambda * K.inv() * h2;Mat r3 = r1.cross(r2);  // 通过叉乘保证正交性Mat t = lambda * K.inv() * h3;// 构建旋转矩阵并正交化Mat R;Rodrigues(rvec, R);  // 旋转向量转矩阵SVDecomp(R, S, U, V, SVD::FULL_UV);  // 正交化处理R = U * V.t();
}

阶段5:非线性优化(Levenberg-Marquardt算法)

代码路径modules/calib3d/src/lm.cpp

// 定义目标函数:最小化重投影误差
class CalibFunc : public LMSolver::Function {
public:int getDims() const { return totalPoints * 2; }void compute(const Mat& params, Mat& err) const {// 解析参数:内参、畸变、外参Mat K = params.rowRange(0, 9).reshape(3,3);Mat dist = params.rowRange(9, 14);Mat rvecs = params.rowRange(14, 14 + 3*nimages);Mat tvecs = params.rowRange(14 + 3*nimages, end);// 计算重投影误差for (int i = 0; i < nimages; i++) {projectPoints(objectPoints[i], rvecs[i], tvecs[i], K, dist, reproj);err += norm(imagePoints[i] - reproj);}}
};// 调用优化器
LMSolver lm(solverFunc, criteria);
lm.run(params);

优化变量:将所有参数(内参、畸变、每幅图像的外参)拼接为一个长向量,通过迭代更新使重投影误差最小化。


2.3 畸变模型与参数处理

畸变系数定义modules/calib3d/src/distortion_model.hpp):

enum DistCoeffs {K1 = 0, K2 = 1, P1 = 2, P2 = 3, K3 = 4  // 默认支持5参数模型
};

畸变校正公式
{ x corrected = 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 ) y corrected = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p 1 ( r 2 + 2 y 2 ) + 2 p 2 x y \begin{cases} x_{\text{corrected}} = x(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + 2p_1 xy + p_2(r^2 + 2x^2) \\ y_{\text{corrected}} = y(1 + k_1 r^2 + k_2 r^4 + k_3 r^6) + p_1(r^2 + 2y^2) + 2p_2 xy \end{cases} {xcorrected=x(1+k1r2+k2r4+k3r6)+2p1xy+p2(r2+2x2)ycorrected=y(1+k1r2+k2r4+k3r6)+p1(r2+2y2)+2p2xy

其中 $ r^2 = x^2 + y^2 $。优化过程中会根据flags决定是否固定某些系数(如CALIB_FIX_TANGENT_DIST)。


写在后面的话

旋转矩阵性质

一、旋转矩阵作为正交矩阵的数学定义

旋转矩阵是正交矩阵的一种特殊形式。根据正交矩阵的定义:

  1. 正交性:列向量(或行向量)两两正交,即内积为零。
  2. 单位模长:每个列向量的模长为1。
  3. 行列式为1:若行列式为+1,则为纯旋转矩阵;若为-1,则为反射矩阵(含镜像变换)。

数学推导

  • 正交矩阵满足 $ R^T R = I $,展开后得到:
    { r i T r j = 0 ( i ≠ j ) ∥ r i ∥ = 1 ( i = j ) \begin{cases} r_i^T r_j = 0 \quad (i \neq j) \\ \|r_i\| = 1 \quad (i = j) \end{cases} {riTrj=0(i=j)ri=1(i=j)

    因此,旋转矩阵的列向量 $ r_1, r_2, r_3 $ 必然满足正交性和单位模长。对于n阶正交矩阵,其列向量组是n维向量空间的一组标准正交基。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71919.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

WWDG窗口看门狗原理

WWDG&#xff08;窗口看门狗&#xff09;在窗口期喂狗 作用&#xff1a; 原理&#xff1a; 框图 WWDG寄存器&#xff1a; WWDG_CR控制寄存器 WWDG_CFR配置寄存器 状态寄存器WWDG_SR 超时时间计算公式 最小最大超时值 HAL配置函数&#xff1a; 1. IWDG 和 WWDG 的区别 IWDG&…

无公网IP也能远程控制Windows:Linux rdesktop内网穿透实战

文章目录 前言1. Windows 开启远程桌面2. Linux安装rdesktop工具3. Win安装Cpolar工具4. 配置远程桌面地址5. 远程桌面连接测试6. 设置固定远程地址7. 固定地址连接测试 前言 如今远程办公已经从一种选择变成了许多企业和个人的必修课&#xff0c;而如何在Linux系统上高效地访…

Pygame实现射击鸭子游戏3-2

2 鸭子类Target的创建 2.1 __init__()函数 Target类的__init__()函数代码如图5所示。 图5 __init__()函数代码 其中&#xff0c;第18行将Target类声明为pygame.sprite.Sprite类的子类&#xff1b;第19行代码中&#xff0c;__init__()函数的img_path参数表示鸭子图片的文件名…

五、OpenGL中Shader与C++数据传输

文章目录 一、概述二、Shader 代码文件的基本格式三、Shader的向量语法介绍四、Shader之间的数据传输五、Shader与C的数据传输uniform六、完整示例 一、概述 在 OpenGL 中&#xff0c;Shader&#xff08;着色器&#xff09;使用 GLSL&#xff08;OpenGL Shading Language&…

【3DMAX插件】3DMAX建筑大师插件MasterBuilder使用方法

3DMAX建筑大师插件是一款专为3DMAX设计的程序化&#xff08;参数化&#xff09;建筑建模工具&#xff0c;其最大特点是能够一键生成建筑模型&#xff0c;极大地提升了工作效率。该插件配备了多种结构控制选项&#xff0c;涵盖阳台、门窗、栏杆、楼顶水塔等附属建筑元素&#xf…

隐私保护在 Facebook 用户身份验证中的应用

在这个数字化的时代&#xff0c;个人隐私保护成为了公众关注的焦点。社交媒体巨头 Facebook 作为全球最大的社交平台之一&#xff0c;拥有数十亿用户&#xff0c;其在用户身份验证过程中对隐私保护的重视程度直接影响着用户的安全感和信任度。本文将探讨 Facebook 在用户身份验…

Swift Package Manager (SPM) 创建并集成本地库

在macOS 项目中&#xff0c;使用 Swift Package Manager (SPM) 创建并集成本地库的完整步骤。 创建一个macos应用程序&#xff0c;选择 swift、oc、swiftui都可以。 创建好应用之后&#xff0c;开始创建SPM本地库。 打开终端app&#xff0c;进入项目根目录&#xff0c;逐次输…

渗透测试之利用sql拿shell(附完整流程+防御方案)【下】

导读: 时刻保持谦逊,始终保持学习,探寻事物的本质,不要把事情复杂化 话不多说,书接上回 三、利用日志getshell 利用条件: 拥有网站的写入权限知道网站的绝对路径数据库日志开启 实际操作: (1)查看数据库日志是否开启以及路径 show variables like %general%; (2…

【HarmonyOS Next之旅】DevEco Studio使用指南(二)

目录 1 -> 工程模板介绍 2 -> 创建一个新的工程 2.1 -> 创建和配置新工程 2.1.1 -> 创建HarmonyOS工程 2.2.2 -> 创建OpenHarmony工程 1 -> 工程模板介绍 DevEco Studio支持多种品类的应用/元服务开发&#xff0c;预置丰富的工程模板&#xff0c;可以根…

猫耳大型活动提效——组件低代码化

1. 引言 猫耳前端在开发活动的过程中&#xff0c;经历过传统的 pro code 阶段&#xff0c;即活动页面完全由前端开发编码实现&#xff0c;直到 2020 年接入公司内部的低代码活动平台&#xff0c;满足了大部分日常活动的需求&#xff0c;运营可自主配置活动并上线&#xff0c;释…

深度学习系列79:Text2sql调研

参考 https://github.com/topics/text-to-sql 这里是一些资源&#xff1a;https://github.com/eosphoros-ai/Awesome-Text2SQL/blob/main/README.zh.md 这里是综述文章&#xff1a;https://zhuanlan.zhihu.com/p/647249972 1. 数据集 Spider: 一个跨域的复杂text2sql数据集&a…

Linux 系统负载过高的排查思路

技术探讨&#xff1a;Linux系统负载过高的排查思路 在Linux服务器运行过程中&#xff0c;如果系统负载过高&#xff0c;可能会导致性能下降和服务不稳定。以下是针对Linux系统负载过高问题的排查思路和解决方法&#xff1a; 1. 查看系统负载&#xff1a; 使用uptime或top命令查…

【互联网性能指标】QPS/TPS/PV/UV/IP/GMV/DAU/MAU/RPS

&#x1f4d5;我是廖志伟&#xff0c;一名Java开发工程师、《Java项目实战——深入理解大型互联网企业通用技术》&#xff08;基础篇&#xff09;、&#xff08;进阶篇&#xff09;、&#xff08;架构篇&#xff09;清华大学出版社签约作家、Java领域优质创作者、CSDN博客专家、…

Java高频面试之集合-08

hello啊&#xff0c;各位观众姥爷们&#xff01;&#xff01;&#xff01;本baby今天来报道了&#xff01;哈哈哈哈哈嗝&#x1f436; 面试官&#xff1a;详细说说CopyOnWriteArrayList CopyOnWriteArrayList 详解 CopyOnWriteArrayList 是 Java 并发包&#xff08;java.util…

痉挛性斜颈需要做手术吗?

痉挛性斜颈的治疗是一个涉及多种医学知识的话题&#xff0c;让我们从多方面分析这个问题&#xff0c;来谈谈是否需要进行手术。 首先&#xff0c;我们要明确痉挛性斜颈是一种什么疾病。痉挛性斜颈是一种颈部肌肉异常收缩的疾病&#xff0c;可能导致头部持续或间歇性地向一侧旋…

AOT是什么?

https://www.bilibili.com/video/BV1Es4y1q7Bf?spm_id_from333.788.player.switch&vd_source12d5954938d20d50645e227a6a728c76&p87常规的java代码是即时解释执行的&#xff0c;只有热点代码才会提前编译成二进制&#xff0c;并且将java代码放到别的电脑执行时得安装j…

【JavaWeb学习Day23】

Maven高级 分模块设计与开发 分模块设计&#xff1a;将一个大项目分成若干个子模块&#xff0c;方便项目的维护、扩展&#xff0c;也方便模块间的相互引用&#xff0c;资源共享。 策略&#xff1a; 1.策略一&#xff1a;按照功能模块拆分&#xff0c;比如&#xff1a;公共组…

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐

⭐LeetCode周赛 3468. 可行数组的数目——暴力与数学⭐ 示例 1&#xff1a; 输入&#xff1a;original [1,2,3,4], bounds [[1,2],[2,3],[3,4],[4,5]] 输出&#xff1a;2 解释&#xff1a; 可能的数组为&#xff1a; [1, 2, 3, 4] [2, 3, 4, 5] 示例 2&#xff1a; 输入&…

JAVA(5)-基础概念

*固定格式 一.注释和关键字 关键字&#xff1a;被赋予特定关系的词 字母全部小写&#xff0c;如class表示一个类 二.字面量 1.字面量类型 *字符串里面的类型是一句话&#xff0c;用双引号 字符里面的类型只有一个字或字母 null只能用字符串的方式打印 2.制表符 \t 至少补…

本地部署Navidrome个人云音乐平台随时随地畅听本地音乐文件

文章目录 前言1. 安装Docker2. 创建并启动Navidrome容器3. 公网远程访问本地Navidrome3.1 内网穿透工具安装3.2 创建远程连接公网地址3.3 使用固定公网地址远程访问 前言 今天我要给大家安利一个超酷的私有化音乐神器——Navidrome&#xff01;它不仅让你随时随地畅享本地音乐…