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

【PnP】详细公式推导,使用DLT直接线性变换法求解相机外参

文章目录

  • 🚀PnP
    • 1️⃣ 求解不考虑尺度的解
    • 2️⃣ 恢复解的尺度
    • 3️⃣ 另一种解法

🚀PnP

PnP(Perspective-n-Point)是求解3D到2D点相机外参的算法。PnP算法有DLT直接线性变换、P3P三对点估计位姿、EPnP(Efficient PnP)、BA(Bundle Adjustment)光速法平差。这里主要讲解DLT

推理过程涉及一些知识点,可以参考以下博文:
【对比学习】正交阵/酉矩阵,对称矩阵/Hermite矩阵,正交相似对角化/奇异值分解的内在联系
【相机标定】相机标定中的坐标变换,内外参求解,畸变校正,标定代码

输入:
空间中3D点的坐标、图像中2D点的坐标,内参矩阵
输出:
相机外参

1️⃣ 求解不考虑尺度的解

写出矩阵变换方程:

Z C [ u v 1 ] = K 3 × 3 [ R T ] 3 × 4 [ X W Y W Z W 1 ] Z_C\begin{bmatrix}u\\v\\1\end{bmatrix}=K_{3\times3}\begin{bmatrix}R&T\end{bmatrix}_{3\times4}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix} ZC uv1 =K3×3[RT]3×4 XWYWZW1

将内外参数展开:

Z C [ u v 1 ] = [ F x 0 u 0 0 F y v 0 0 0 1 ] [ f 11 f 12 f 13 f 14 f 21 f 22 f 23 f 24 f 31 f 32 f 33 f 34 ] [ X W Y W Z W 1 ] = [ F x f 11 + u 0 f 31 F x f 12 + u 0 f 32 F x f 13 + u 0 f 33 F x f 14 + u 0 f 34 F y f 21 + v 0 f 31 F y f 22 + v 0 f 32 F y f 23 + v 0 f 33 F y f 24 + v 0 f 34 f 31 f 32 f 33 f 34 ] [ X W Y W Z W 1 ] Z_C\begin{bmatrix}u\\v\\1\end{bmatrix}= \begin{bmatrix} F_x&0&u_0\\0&F_y&v_0\\0&0&1 \end{bmatrix} \begin{bmatrix}f_{11}&f_{12}&f_{13}&f_{14}\\f_{21}&f_{22}&f_{23}&f_{24}\\f_{31}&f_{32}&f_{33}&f_{34}\end{bmatrix}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix}\\= \begin{bmatrix} F_xf_{11}+u_0f_{31}&F_xf_{12}+u_0f_{32}&F_xf_{13}+u_0f_{33}&F_xf_{14}+u_0f_{34}\\ F_yf_{21}+v_0f_{31}&F_yf_{22}+v_0f_{32}&F_yf_{23}+v_0f_{33}&F_yf_{24}+v_0f_{34}\\ f_{31}&f_{32}&f_{33}&f_{34} \end{bmatrix}\begin{bmatrix}X_W\\Y_W\\Z_W\\1\end{bmatrix} ZC uv1 = Fx000Fy0u0v01 f11f21f31f12f22f32f13f23f33f14f24f34 XWYWZW1 = Fxf11+u0f31Fyf21+v0f31f31Fxf12+u0f32Fyf22+v0f32f32Fxf13+u0f33Fyf23+v0f33f33Fxf14+u0f34Fyf24+v0f34f34 XWYWZW1

进一步展开,写成方程组的形式:

{ Z C u = F x X W f 11 + u 0 X W f 31 + F x Y W f 12 + u 0 Y W f 32 + F x Z W f 13 + u 0 Z W f 33 + F x f 14 + u 0 f 34 Z C v = F y X W f 21 + v 0 X W f 31 + F y Y W f 22 + v 0 Y W f 32 + F y Z W f 23 + v 0 Z W f 33 + F y f 24 + v 0 f 34 Z C = f 31 X W + f 32 Y W + f 33 Z W + f 34 \begin{cases} Z_Cu=F_xX_Wf_{11}+u_0X_Wf_{31}+F_xY_Wf_{12}+u_0Y_Wf_{32}+F_xZ_Wf_{13}+u_0Z_Wf_{33}+F_xf_{14}+u_0f_{34}\\ Z_Cv=F_yX_Wf_{21}+v_0X_Wf_{31}+F_yY_Wf_{22}+v_0Y_Wf_{32}+F_yZ_Wf_{23}+v_0Z_Wf_{33}+F_yf_{24}+v_0f_{34}\\ Z_C=f_{31}X_W+f_{32}Y_W+f_{33}Z_W+f_{34} \end{cases} ZCu=FxXWf11+u0XWf31+FxYWf12+u0YWf32+FxZWf13+u0ZWf33+Fxf14+u0f34ZCv=FyXWf21+v0XWf31+FyYWf22+v0YWf32+FyZWf23+v0ZWf33+Fyf24+v0f34ZC=f31XW+f32YW+f33ZW+f34

把最后一个方程带入前两个有:

{ F x X W f 11 + F x Y W f 12 + F x Z W f 13 + F x f 14 + ( u 0 − u ) X W f 31 + ( u 0 − u ) Y W f 32 + ( u 0 − u ) Z W f 33 + ( u 0 − u ) f 34 = 0 F y X W f 21 + F y Y W f 22 + F y Z W f 23 + F y f 24 + ( v 0 − v ) X W f 31 + ( v 0 − v ) Y W f 32 + ( v 0 − v ) Z W f 33 + ( v 0 − v ) f 34 = 0 \begin{cases} F_xX_Wf_{11}+F_xY_Wf_{12}+F_xZ_Wf_{13}+F_xf_{14}+(u_0-u)X_Wf_{31}+(u_0-u)Y_Wf_{32}+(u_0-u)Z_Wf_{33}+(u_0-u)f_{34}=0\\ F_yX_Wf_{21}+F_yY_Wf_{22}+F_yZ_Wf_{23}+F_yf_{24}+(v_0-v)X_Wf_{31}+(v_0-v)Y_Wf_{32}+(v_0-v)Z_Wf_{33}+(v_0-v)f_{34}=0 \end{cases} {FxXWf11+FxYWf12+FxZWf13+Fxf14+(u0u)XWf31+(u0u)YWf32+(u0u)ZWf33+(u0u)f34=0FyXWf21+FyYWf22+FyZWf23+Fyf24+(v0v)XWf31+(v0v)YWf32+(v0v)ZWf33+(v0v)f34=0

也就是说每一组3D-2D的匹配点就能对应两个方程,其中共有12个未知数(或者说11个未知数+1个尺度参数),则至少需要6组匹配点来解出所有未知数。

设有n组匹配点,则:

[ F x X 1 F x Y 1 F x Z 1 F x 0 0 0 0 ( u 0 − u ) X 1 ( u 0 − u ) Y 1 ( u 0 − u ) Z 1 u 0 − u 0 0 0 0 F y X 1 F y Y 1 F y Z 1 F y ( u 0 − u ) X 1 ( v 0 − v ) Y 1 ( v 0 − v ) Z 1 v 0 − v … … … … … … … … … … … … F x X n F x Y n F x Z n F x 0 0 0 0 ( u 0 − u ) X n ( u 0 − u ) Y n ( u 0 − u ) Z n u 0 − u 0 0 0 0 F y X n F y Y n F y Z n F y ( u 0 − u ) X n ( v 0 − v ) Y n ( v 0 − v ) Z n v 0 − v ] [ f 11 f 12 f 13 f 14 f 21 f 22 f 23 f 24 f 31 f 32 f 33 f 34 ] = 0 \begin{bmatrix} F_xX_1&F_xY_1&F_xZ_1&F_x&0&0&0&0&(u_0-u)X_1&(u_0-u)Y_1&(u_0-u)Z_1&u_0-u\\ 0&0&0&0&F_yX_1&F_yY_1&F_yZ_1&F_y&(u_0-u)X_1&(v_0-v)Y_1&(v_0-v)Z_1&v_0-v\\ \dots&\dots&\dots&\dots&\dots&\dots&\dots&\dots&\dots&\dots&\dots&\dots\\ F_xX_n&F_xY_n&F_xZ_n&F_x&0&0&0&0&(u_0-u)X_n&(u_0-u)Y_n&(u_0-u)Z_n&u_0-u\\ 0&0&0&0&F_yX_n&F_yY_n&F_yZ_n&F_y&(u_0-u)X_n&(v_0-v)Y_n&(v_0-v)Z_n&v_0-v\\ \end{bmatrix} \begin{bmatrix} f_{11}\\f_{12}\\f_{13}\\f_{14}\\f_{21}\\f_{22}\\f_{23}\\f_{24}\\f_{31}\\f_{32}\\f_{33}\\f_{34}\\ \end{bmatrix}=\mathbf{0} FxX10FxXn0FxY10FxYn0FxZ10FxZn0Fx0Fx00FyX10FyXn0FyY10FyYn0FyZ10FyZn0Fy0Fy(u0u)X1(u0u)X1(u0u)Xn(u0u)Xn(u0u)Y1(v0v)Y1(u0u)Yn(v0v)Yn(u0u)Z1(v0v)Z1(u0u)Zn(v0v)Znu0uv0vu0uv0v f11f12f13f14f21f22f23f24f31f32f33f34 =0

将上式写作:

A 2 n × 12 F 12 × 1 = 0 A_{2n\times 12}F_{12\times1}=\mathbf{0} A2n×12F12×1=0

若有6组点对,则可以得到唯一解。

🌔但常常匹配点大于6组,此时构造如下优化目标和约束条件(等于是强行规定一个尺度,后续再把尺度补偿回来):

{ min ⁡ ∥ A F ∥ 2 s . t . ∥ F ∥ 2 = 1 \begin{cases} \min\parallel AF\parallel_2\\ s.t.\;\parallel F\parallel_2=1 \end{cases} {minAF2s.t.F2=1

此时,对 A A A进行SVD分解有:

min ⁡ ∥ ( U Σ V T ) F ∥ 2 \min\parallel(U\Sigma V^T)F\parallel_2 min(UΣVT)F2

由酉矩阵的范数保持性有:

min ⁡ ∥ Σ V T F ∥ 2 \min\parallel\Sigma V^TF\parallel_2 minΣVTF2

Y = V T F Y=V^TF Y=VTF,此时由于酉矩阵的范数保持性 ∥ Y ∥ 2 = 1 \parallel Y\parallel_2=1 Y2=1,从而有:

min ⁡ ∥ Σ Y ∥ 2 \min\parallel\Sigma Y\parallel_2 minΣY2

由于 Σ \Sigma Σ的奇异值从大到小排列,所以解为:

Y = [ 0 0 … 1 ] T Y=\begin{bmatrix}0&0&\dots&1\end{bmatrix}^T Y=[001]T

Y = V T F Y=V^TF Y=VTF,且 V V V实数矩阵,有:

F = ( V T ) − 1 Y = ( V T ) ∗ Y = V Y = V ( : e n d ) F=(V^T)^{-1}Y=(V^T)^{*}Y=VY= V(:end) F=(VT)1Y=(VT)Y=VY=V(:end)

即解 F F F V V V的最后一列,这里不妨令这个不含尺度的解为 F ^ \hat F F^,而实际解为:

F = β F ^ F=\beta\hat F F=βF^

其中 β \beta β是接下来要求解的尺度因子。


2️⃣ 恢复解的尺度

我们利用旋转变换的标准正交性来恢复尺度,由 F ^ \hat F F^有:

R ^ = [ f ^ 11 f ^ 12 f ^ 13 f ^ 21 f ^ 22 f ^ 23 f ^ 31 f ^ 32 f ^ 33 ] \hat R=\begin{bmatrix}\hat f_{11}&\hat f_{12}&\hat f_{13}\\\hat f_{21}&\hat f_{22}&\hat f_{23}\\\hat f_{31}&\hat f_{32}&\hat f_{33}\end{bmatrix} R^= f^11f^21f^31f^12f^22f^32f^13f^23f^33

对其进行SVD分解有:

U ^ Σ ^ V ^ T = S V D ( R ^ ) \hat U\hat \Sigma \hat V^T=SVD(\hat R) U^Σ^V^T=SVD(R^)

⭐这里,严格数学推导比较复杂,这里简单理解为真正的 ∥ R ∥ = 1 \parallel R\parallel=1 R∥=1,且为正交阵,而 ∥ R ^ ∥ ≠ 1 \parallel\hat R\parallel\neq1 R^=1,把缩放变换 Σ ^ \hat \Sigma Σ^拿掉使之恢复为两酉矩阵的乘积,使得其模为1,把这个结果作为最优解。

则带有尺度的最优解为:

R = ± U ^ V ^ T R=\pm\hat U\hat V^T R=±U^V^T

而尺度因子可以用 Σ \Sigma Σ各个奇异值的平均值来估计:

β = ± 1 t r ( Σ ^ ) / 3 \beta=\pm\frac{1}{tr(\hat \Sigma)/3} β=±tr(Σ^)/31

考虑到3D点在相机的前方:

Z C > 0 ⇒ β ( f ^ 31 X W + f ^ 32 Y W + f ^ 33 Z W + f ^ 34 ) > 0 Z_C>0\Rightarrow\beta(\hat f_{31}X_W+\hat f_{32}Y_W+\hat f_{33}Z_W+\hat f_{34})>0 ZC>0β(f^31XW+f^32YW+f^33ZW+f^34)>0

由此可以确定 R R R β \beta β的符号,进而可以求得恢复尺度的平移向量:

T = β [ f ^ 14 f ^ 24 f ^ 34 ] T T=\beta\begin{bmatrix}\hat f_{14}&\hat f_{24}&\hat f_{34}\end{bmatrix}^T T=β[f^14f^24f^34]T

😄综上,有:

{ R = ± U ^ V ^ T T = β [ f ^ 14 f ^ 24 f ^ 34 ] T β = ± 1 t r ( Σ ^ ) / 3 β ( f ^ 31 X W + f ^ 32 Y W + f ^ 33 Z W + f ^ 34 ) > 0 \begin{cases} R=\pm \hat U\hat V^T\\ T=\beta\begin{bmatrix}\hat f_{14}&\hat f_{24}&\hat f_{34}\end{bmatrix}^T\\ \beta=\pm\frac{1}{tr(\hat \Sigma)/3}\\ \beta(\hat f_{31}X_W+\hat f_{32}Y_W+\hat f_{33}Z_W+\hat f_{34})>0 \end{cases} R=±U^V^TT=β[f^14f^24f^34]Tβ=±tr(Σ^)/31β(f^31XW+f^32YW+f^33ZW+f^34)>0


3️⃣ 另一种解法

⭐上述过程已经可以把理论上的外参求解出来了。
🐦这里提供另一种在实际工程中计算精度会更高的重投影迭代优化求解的思路,以飨读者。

输入:
空间中3D点的坐标、图像中2D点的坐标
输出:
相机外参,相机内参(我们认为相机内参也是随时间稍微变化的)

求解迭代初值:

我们令内外参的乘积为 M M M

M = K 3 × 3 [ R T ] 3 × 4 M=K_{3\times3}\begin{bmatrix}R&T\end{bmatrix}_{3\times4} M=K3×3[RT]3×4

😃与上述求解不考虑尺度的 F F F类似,我们可以将 M 3 × 4 M_{3\times4} M3×4的整体数值求解出来(不考虑尺度)。

我们进一步将 M M M写成如下形式:

M = [ K 3 × 3 R 3 × 3 K 3 × 3 T 3 × 1 ] M=\begin{bmatrix} K_{3\times3}R_{3\times3}&K_{3\times3}T_{3\times1} \end{bmatrix} M=[K3×3R3×3K3×3T3×1]

① {\color{#E16B8C}{①}} 首先,对 K 3 × 3 R 3 × 3 K_{3\times3}R_{3\times3} K3×3R3×3进行QR分解,得到一个正交阵 q q q(认定为旋转矩阵 R R R)和上三角矩阵 r r r(认定为内参 K K K):
q r = Q R ( K 3 × 3 R 3 × 3 ) = R K qr=QR(K_{3\times3}R_{3\times3})=RK qr=QR(K3×3R3×3)=RK
② {\color{#E16B8C}{②}} 接着,将 K K K代入 K 3 × 3 T 3 × 1 K_{3\times3}T_{3\times1} K3×3T3×1,求解出位移向量 T T T

优化迭代:

添加新的匹配点,构造优化目标(重新投影逼近真值)如下:

arg min ⁡ K , R , T ∑ i 1 2 ∣ ∣ 1 Z C M X i − u i ∣ ∣ 2 \displaystyle \argmin_{K,R,T}\sum_i\frac{1}{2}||\frac{1}{Z_C}MX_{i}-u_i||^2 K,R,Targmini21∣∣ZC1MXiui2

① {\color{#E16B8C}{①}} 利用负梯度迭代法(对构成 M M M K , R , T K,R,T K,R,T求梯度)求解即可。
② {\color{#E16B8C}{②}} 其中,迭代初值指定为由无尺度 M M M求出的 K , R , T K,R,T K,R,T
③ {\color{#E16B8C}{③}} Z C Z_C ZC也是变化的,可以由每步迭代的 Z C = M 31 X W + M 32 Y W + M 33 Z W + M 34 Z_C=M_{31}X_W+M_{32}Y_W+M_{33}Z_W+M_{34} ZC=M31XW+M32YW+M33ZW+M34计算得出。

😸另外,整体上也可以把整个 M M M作为变量求梯度优化,最后再利用QR分解等技巧求出 K , R , T K,R,T K,R,T,究竟选择哪种主要是看数据的表示方式和计算开销。

相关文章:

【PnP】详细公式推导,使用DLT直接线性变换法求解相机外参

文章目录 🚀PnP1️⃣ 求解不考虑尺度的解2️⃣ 恢复解的尺度3️⃣ 另一种解法 🚀PnP PnP(Perspective-n-Point)是求解3D到2D点相机外参的算法。PnP算法有DLT直接线性变换、P3P三对点估计位姿、EPnP(Efficient PnP)、BA(Bundle Adjustment)光速法平差。这…...

怎样把书上的事件图改编成活动图-《分析模式》漫谈43

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》中模型图的UML改编,之前也有人做过,Martin Fowler网站上给出了部分改编成果。 这些改编成果只覆盖了部分章节,而且只是把类型图&#…...

CodeFormer——基于代码本查找变换器的鲁棒盲人脸修复翻译

文章目录 原文翻译摘要1 Introduction2 Related Work3 Methodology3.1 Codebook Learning (Stage I)3.2 Codebook Lookup Transformer Learning (Stage II)3.3 Controllable Feature Transformation (Stage III) 4 Experiments4.1 Datasets4.2 Experimental Settings and Metri…...

监控场景下,视频SDK的应用策略

在当今数字化、智能化的时代背景下,音视频技术的快速发展正深刻改变着各行各业。特别是在监控领域,音视频SDK的应用不仅极大地提升了监控系统的性能与效率,还推动了监控技术的智能化转型。 一、音视频SDK 音视频SDK是一套集成了音视频编解码…...

前端面试必备!HTML 超实用考点全解析

在前端开发的广阔领域中,面试是检验开发者能力的关键环节。而 HTML 作为前端开发的基础,在面试中常常占据重要地位。无论是初入前端领域的新人,还是经验丰富的开发者,都可能在 HTML 的相关问题上遭遇挑战。今天,就让我…...

自动驾驶系统研发系列—避免事故的利器:AEB自动紧急制动系统详解

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中一起航行,共同成长,探索技术的无限可能。 🚀 探索专栏:学…...

zabbix 6.0 监控clickhouse(单机)

zabbix 6.0 LTS已经包含了clickhouse的监控模板,所以我们可以直接使用自带的模板来监控clickhouse了。 0.前置条件 clickhouse 已经安装,我安装的是24.3.5.47zabbix-agent 已经安装并配置。系统是ubuntu 2204 server 1. 新建监控用户 使用xml的方式为…...

Redis的RDB执行原理

文章目录 引入‘页表’的概念Copy-On-WriteRDB快照 引入‘页表’的概念 Linux里面每个进程都是无法直接操作物理内存的,每个进程只能用页表映射本进程的虚拟内存到物理内存的映射。 bgsave的时候,主进程会fork(复制)一个子进程&am…...

速度背!24下软考网工“经典100道母题来了”!

2024下软考已经迫在眉睫了,准备考下半年软考多媒体应用设计师的小伙伴们准备得怎么样了? 单单只啃书肯定不太够,今天给大家整理了多媒体100道经典题, 这些都是历年高频考点整理,包含24下软考80%以上考点,跟…...

three.js 纹理(Texture)、深度纹理(DepthTexture)、视频纹理(VideoTexture)

纹理(Texture) 创建一个纹理贴图,将其应用到一个表面,或者作为反射/折射贴图。 构造函数 Texture( image, mapping, wrapS, wrapT, magFilter, minFilter, format, type, anisotropy, encoding ) // load a texture, set wrap…...

广东自闭症全托机构:提供高质量的康复服务

在广东这片充满活力的土地上,自闭症儿童的康复需求日益受到社会各界的关注。在众多自闭症全托机构中,位于广州的星贝育园自闭症儿童寄宿制学校以其专业的团队、全面的服务体系以及显著的康复成效,成为了众多家庭的信赖之选。 星贝育园&#…...

Nodejs安装配置及创建vue项目

文章目录 Node简介Node官网安装node.js验证是否安装成功 npm简介配置node远程拉取仓库安装cnpm(国内插件管理命令)npm相关参数解读 vue简介创建vue项目 Node 简介 Node.js 是一个免费、开源、跨平台的 JavaScript 运行时环境,它让开发人员能…...

浅析正交投影矩阵和透视投影矩阵的推导

先上矩阵的内容。在opengl中,分别通过glOrtho函数和glFrustum函数得到正交投影矩阵和透视投影矩阵。 glOrtho 函数描述生成正交投影矩阵。 (左、 下、 近) 和 (右、 上、 近) 参数分别指定近剪裁平面上映射到窗口左下角和右上角的点,假定眼睛位于 (0、0…...

python四舍五入保留两位小数不足补0

在 Python 中,当你想要对数字进行四舍五入并保留两位小数,同时确保当小数位数不足两位时能够补零,你可以继续使用 round() 函数进行四舍五入,然后在格式化输出时使用字符串格式化方法来确保小数位数。 round() 函数本身只会返回四…...

Mybatis-15.动态SQL-if

一.动态SQL 比如只想查询名字中带‘张’的&#xff0c;其他的都不进行条件筛查 会发现什么也查询不出来 我们希望SQL语句能够根据我们所输入的查询值进行动态的变化&#xff0c;就需要使用到动态SQL。动态SQL中有很多标签&#xff0c;其中用于条件判断的就是标签<if>。…...

gb28181-sip注册流程

gb28181-sip注册流程 当客户端第一次接入时&#xff0c;客户端将持续向Server端发送REGISTER消息&#xff0c;直到Server端回复"200 OK"后结束 它的注册流程如下图&#xff1a; 注册流程&#xff1a; 1 . SIP代理向SIP服务器发送Register请求&#xff1a; 第1行表…...

WEBRTC教程:局域网怎么调试,http://172.19.18.101:8080 ,无法访问摄像头和麦克风,请检查权限

在局域网中使用 WebRTC 时&#xff0c;无法访问摄像头和麦克风通常是因为浏览器的安全策略限制了 getUserMedia API 的使用。如果你在非 localhost 或非 HTTPS 环境下访问网页&#xff0c;浏览器会阻止访问摄像头和麦克风。 解决方案 在局域网中调试 WebRTC 时&#xff0c;你…...

Apache POI—读写Office格式文件

Apache POI 是一个开源的 Java 库&#xff0c;用于读写 Microsoft Office 格式的文件&#xff0c;主要包括 Excel、Word 和 PowerPoint 等文档。POI 对 Excel 文件的支持最为完善&#xff0c;通过 POI 可以方便地进行 Excel 文件的创建、编辑、读取等操作。 1. Apache POI 简介…...

3162. 优质数对的总数 I

3162. 优质数对的总数 I 题目链接&#xff1a;3162. 优质数对的总数 I 代码如下&#xff1a; class Solution { public:int numberOfPairs(vector<int>& nums1, vector<int>& nums2, int k){int res 0;for (int i 0; i < nums1.size(); i){for (int…...

(五)Web前端开发进阶2——AJAX

目录 2.Axios库 3.认识URL 4.Axios常用请求方法 5.HTTP协议——请求报文/响应报文 6.前后端分离开发 7.Element组件库 1.Ajax概述 AJAX 是异步的 JavaScript和XML(Asynchronous JavaScript And XML)。简单点说&#xff0c;就是使用XMLHttpRequest 对象与服务器通信。它可…...

数据结构(java)——数组的构建和插入

数组&#xff1a;地址连续&#xff0c;可以直接通过下标获取数组中的内容。&#xff08;下标从0开始&#xff09; 新建的数组都有默认值 //创建数组//Java是强类型 数组必须声明类型//以下是三种创建数组的方式 int[] arr {2,23,55,12,34,53};int[] brrnew int[5];int[] crrn…...

AI-CNN-验证码识别

1 需求 GitHub - xhh890921/cnn-captcha-pytorch: 小黑黑讲AI&#xff0c;AI实战项目《验证码识别》 2 接口 3 示例 config.json {"train_data_path": "./data/train-digit/","test_data_path": "./data/test-digit/","train_…...

React 前端框架全面教程:从入门到进阶

React 前端框架全面教程&#xff1a;从入门到进阶 引言 在现代前端开发中&#xff0c;React 作为一款流行的 JavaScript 库&#xff0c;以其组件化、声明式的特性和强大的生态系统&#xff0c;成为了开发者的首选。无论是构建单页应用&#xff08;SPA&#xff09;还是复杂的用…...

重拾CSS,前端样式精读-布局(弹性盒)

前言 本文收录于CSS系列文章中&#xff0c;欢迎阅读指正 接着上篇布局文章继续介绍当前流行的布局方式 Flexbox布局 长久以来&#xff0c;CSS 布局中唯一可靠且跨浏览器兼容的创建工具只有floats和positioning。这两个工具大部分情况下都很好使&#xff0c;但是在某些方面它…...

Python 使用 LSTM 进行情感分析:处理文本序列数据的指南

使用 LSTM 进行情感分析&#xff1a;处理文本序列数据的指南 长短期记忆网络&#xff08;LSTM&#xff09;是一种适合处理序列数据的深度学习模型&#xff0c;广泛应用于情感分析、语音识别、文本生成等领域。它通过在训练过程中“记住”过去的数据特征来理解和预测序列数据的…...

MySQL:INSERT IGNORE 语句的用法

INSERT IGNORE 语句 在MySQL中&#xff0c;INSERT IGNORE 语句用于尝试向表中插入一行数据&#xff0c;但如果插入操作会导致表中唯一索引或主键的冲突&#xff0c;MySQL将忽略该操作并继续执行&#xff0c;而不会引发错误。这意味着&#xff0c;如果表中已经存在具有相同唯一…...

java模拟进程调度

先来先服务优先级调度短作业优先调度响应比优先调度 代码 import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner;class Main {static class tasks{int id;//序号char jinchengname;//进程名int jinchengId;//double a…...

大模型AI在教育领域有哪些创业机会?

大模型AI在教育领域有很多创业机会&#xff0c;尤其是在个性化学习、教学辅助、教育资源优化等方面。以下是一些潜在的创业机会&#xff1a; 个性化学习平台 学习路径定制&#xff1a;根据学生的学习数据与兴趣&#xff0c;为他们设计个性化的学习路径&#xff0c;提供适合的课…...

网页上视频没有提供下载权限怎么办?

以腾讯会议录屏没有提供下载权限为例&#xff0c;该怎么办呢&#xff1f; 最好的办法就是找到管理员&#xff0c;开启下载权限。如果找不到呢&#xff0c;那就用这个办法下载。 1.打开Microsoft Edge浏览器的扩展 2.搜索“视频下载”&#xff0c;选择“视频下载Pro” 3.点击“…...

【去哪里找开源商城项目】

有很多途径可以找到开源项目&#xff0c;以下是一些常用的方法&#xff1a; 开源代码托管平台&#xff1a;许多开源项目都托管在平台上&#xff0c;例如GitHub、GitLab和Bitbucket。你可以在这些平台上浏览项目&#xff0c;搜索关键词&#xff0c;查看项目的星级和贡献者数量等…...

学做馒头面包哪个网站好/常见网络营销推广方法

安装环境 &#xff1a; ubuntu 16.04 树莓派利用基于C的opencv的CaptureVideo函数调用外部摄像头&#xff0c;比如usb摄像头等是没有问题的&#xff0c;但是无法调用自带的摄像头&#xff0c;因此需哟通过调用其他的函数或者改变自带CSI摄像头的属性设置才可以获取实时图像等。…...

网站建设 力洋网络/广州百度关键词推广

场景 使用docker进行前端项目构建时报错&#xff0c;但是本地构建正常。 完整报错信息The build failed because the process exited too early. This probably means the system ran out of memory or someone called kill -9 on the process. 参考过程 从 create-react-ap…...

简易广州网站建设/外贸建站seo

第四章 进程 1、windows支持两种应用程序&#xff1a;GUI程序和CUI程序&#xff0c;即图形用户界面程序和控制台应用程序。 在Visual Studio中&#xff0c;可以使用项目属性的连接器开关设置选择哪种程序&#xff0c;/SUBSYSTEM:CONSOLE和/SUBSYSTEM:WINDOWS 当运行应用程序时操…...

化妆品网站素材/网络品牌推广

本文针对grub故障及服务故障导致的开机无法启动的情况进行模拟&#xff0c;并给出修复详细步骤。一、grub各配置文件问题引起的开机故障可能出现此故障场景&#xff1a;当前硬盘没有grub&#xff0c;每次启动都是通过有grub的光盘或U盘启动的当前硬盘上的操作系统有两块硬盘其中…...

电脑上如何做课程视频网站/宁波网站建设公司哪家好

有人可以提供一个示例或引用,它提供了一种方法,可以使用Jackson库将嵌套JAVA对象转换为JSON输出.我没有转换平面JAVA对象的问题.但是,JSON库显示嵌套对象名称和类型而不是其子对象.我几乎利用了http://www.mkyong.com/java/jackson-2-convert-java-object-to-from-json/提供的相…...

企业网站管理系统如何使用说明/最新域名ip地址

题目&#xff1a;原题链接&#xff08;中等&#xff09; 标签&#xff1a;字符串 解法时间复杂度空间复杂度执行用时Ans 1 (Python)O(N)O(N)O(N)O(1)O(1)O(1)36ms ( 79.64%)Ans 2 (Python)Ans 3 (Python) 解法一&#xff1a; class Solution:def removeVowels(self, S: str)…...