【立体视觉(一)】之成像原理与相机畸变

news2024/11/25 6:57:06

【立体视觉(一)】之成像原理与相机畸变

  • 一、成像原理
    • 一)针孔模型
    • 二)坐标系转换
      • 1. 世界坐标系到相机坐标系
      • 2. 相机坐标系到图像坐标系
      • 3. 图像坐标系到像素坐标系
      • 4. 相机坐标系到像素坐标系
      • 5. 世界坐标系到像素坐标系
  • 二、相机畸变
    • 一)径向畸变
      • 径向畸变矫正
    • 二)切向畸变
      • 切向畸变校正
    • 三)总畸变校正

此为个人学习笔记,在各处借鉴了不少好图好文(参考文献在文末),主要是对相关知识进行梳理,以期形成自己的体系。文字表述东拼西凑,符号公式手动输入,若有错误烦请指出。

一、成像原理

一)针孔模型

在科学研究中,一个现象内部的过程总是复杂而难以清晰看透,而聪明的学者们总会用最简单的模型去做初始描述,提出一个相对简单的模型。成像过程亦不例外,他们将三维世界中的坐标点映射到二维图像平面的过程用一个几何模型进行描述,这个模型有很多种,其中最简单的称为针孔模型。
在这里插入图片描述
注意,在探究成像过程中,常使用虚拟成像平面进行分析。

二)坐标系转换

在这里插入图片描述
从真实世界(世界坐标系)中一点到相片(像素坐标系)上的成像点涉及以下四个坐标系间的转换。

  • 世界坐标系(World Coordinate System, WCS):点在真实世界中的位置,描述相机位置,单位m。
  • 相机坐标系(Camera Coordinate System, CCS):相机sensor中心为原点,建立相机坐标系,单位m。
  • 图像坐标系(Film Coordinate System, FCS):以主点为原点的二维坐标系,单位mm。
  • 像素坐标系(Pixel Coordinate System, PCS):原点为相片左上角的二维坐标系,单位无或pixel。

接下来按以下步骤介绍相机成像过程中某点在各个坐标系间的变换。
在这里插入图片描述

1. 世界坐标系到相机坐标系

世界坐标系到相机坐标系(World to Camera,W2C),就是简单的三维坐标系转换(三个坐标轴方向与原点的变化)。世界坐标系上一点 P w ( U , V , W ) {P_{w}(U,V,W)} Pw(U,V,W) 到相机坐标系上一点 P c ( X , Y , Z ) {P_{c}(X,Y,Z)} Pc(X,Y,Z)

[ X Y Z ] = [ R 3 × 3 T 3 × 1 ] [ U V W 1 ] \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}= \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} XYZ =[R3×3T3×1] UVW1

或使用其次矩阵表达:

[ X Y Z 1 ] = [ R 3 × 3 T 3 × 1 O 1 ] [ U V W 1 ] \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ {O}&{1}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} XYZ1 =[R3×3OT3×11] UVW1

其中, [ R 3 × 3 T 3 × 1 ] \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} [R3×3T3×1] (或 [ R 3 × 3 T 3 × 1 O 1 ] \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ {O}&{1}\\ \end{bmatrix} [R3×3OT3×11])被称为相机的外参矩阵(Extrinsic Matrix),描述的是世界坐标中相机的位置( T 3 × 1 T_{3\times1} T3×1),及其指向方向( R 3 × 3 R_{3\times3} R3×3)。


2. 相机坐标系到图像坐标系

相机坐标系到图像坐标系( Camera to Film,C2F),这里由三维坐标 P c ( X , Y , Z ) {P_{c}(X,Y,Z)} Pc(X,Y,Z) 降维到二维坐标 p ( x , y ) {p(x,y)} p(x,y)
在这里插入图片描述

根据相似三角,得:

x X = y Y = f Z \frac{x}{X}=\frac{y}{Y}=\frac{f}{Z} Xx=Yy=Zf

则:
[ x y 1 ] = [ f Z 0 0 0 f Z 0 0 0 1 Z ] [ X Y Z ] \begin{bmatrix} {x}\\ {y}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{f}{Z}}&{0}&{0}\\ {0}&{\frac{f}{Z}}&{0}\\ {0}&{0}&{\frac{1}{Z}}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} xy1 = Zf000Zf000Z1 XYZ


3. 图像坐标系到像素坐标系

图像坐标系到像素坐标系(Film to Pixel,F2P)是一个简单的仿射变换 (Affine Transformation)过程,主要包括原点的移动和尺度的变换。
在这里插入图片描述
有:
u = x d x + u 0 , v = y d y + v 0 u=\frac{x}{d_x}+u_0, v=\frac{y}{d_y}+v_0 u=dxx+u0,v=dyy+v0

矩阵形式:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ x y 1 ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{1}{d_x}}&{0}&{u_0}\\ {0}&{\frac{1}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {x}\\ {y}\\ {1}\\ \end{bmatrix} uv1 = dx1000dy10u0v01 xy1


4. 相机坐标系到像素坐标系

现在开始回溯,接上一步,相机坐标系到像素坐标系(Camera to Film, C2F)有:
[ u v 1 ] = [ 1 d x 0 u 0 0 1 d y v 0 0 0 1 ] [ f Z 0 0 0 f Z 0 0 0 1 Z ] [ X Y Z ] = 1 Z [ f d x 0 u 0 0 f d y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {\frac{1}{d_x}}&{0}&{u_0}\\ {0}&{\frac{1}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {\frac{f}{Z}}&{0}&{0}\\ {0}&{\frac{f}{Z}}&{0}\\ {0}&{0}&{\frac{1}{Z}}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}=\frac{1}{Z} \begin{bmatrix} {\frac{f}{d_x}}&{0}&{u_0}\\ {0}&{\frac{f}{d_y}}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} uv1 = dx1000dy10u0v01 Zf000Zf000Z1 XYZ =Z1 dxf000dyf0u0v01 XYZ

其中, f d x 、 f d y \frac{f}{d_x}、\frac{f}{d_y} dxfdyf 即焦距除以像素尺寸,单位为pixel,表示焦距在两个像元方向上的像素单位值。由于在相机标定过程中 f 、 d x 、 d y {f}、{d_x}、{d_y} fdxdy 是不能直接测量的,而其组合值 f d x 、 f d y \frac{f}{d_x}、\frac{f}{d_y} dxfdyf 可通过标定得到,故可用 f x = f d x 、 f y = f d y {f_x}=\frac{f}{d_x}、{f_y}=\frac{f}{d_y} fx=dxffy=dyf 来表示两个组合值。那么:
[ u v 1 ] = 1 Z [ f x 0 u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \frac{1}{Z} \begin{bmatrix} {f_x}&{0}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} uv1 =Z1 fx000fy0u0v01 XYZ

若像素坐标系中两坐标轴不垂直(此时像元不是矩形,而是平行四边形),那么相机内参中还有一个偏斜系数 s s s(skew coefficient) s = f x t a n ( α ) s=f_x tan(\alpha) s=fxtan(α),有兴趣可以推导一下。

在这里插入图片描述
此时:
[ u v 1 ] = 1 Z [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \frac{1}{Z} \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} uv1 =Z1 fx00sfy0u0v01 XYZ

其中, [ f x s u 0 0 f y v 0 0 0 1 ] \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} fx00sfy0u0v01 为相机的内参矩阵(Intrinsics Matrix),描述相机坐标系到像素坐标系的变换关系,反应了相机自身的属性,通常用符号 K K K表示(注意,很多版本里的内参矩阵不含偏斜系数,即默认其为0)。在相机坐标系中, Z Z Z 对应为三维点的深度,常被称为尺度因子 λ \lambda λ,则相机坐标系到像素坐标系:
λ [ u v 1 ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] \lambda\begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix} λ uv1 = fx00sfy0u0v01 XYZ
令:
K = [ f x s u 0 0 f y v 0 0 0 1 ] K=\begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} K= fx00sfy0u0v01
有:
λ p = K P c \lambda p=KP_c λp=KPc

补充: Z = 1 Z=1 Z=1 的平面称为归一化平面,归一化平面上的坐标称为归一化坐标。


5. 世界坐标系到像素坐标系

世界坐标系到像素坐标系(World to Pixel,W2P),整个串起来:
λ [ u v 1 ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ X Y Z ] = [ f x s u 0 0 f y v 0 0 0 1 ] [ R 3 × 3 T 3 × 1 ] [ U V W 1 ] \lambda\begin{bmatrix} {u}\\ {v}\\ {1}\\ \end{bmatrix}= \begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix} \begin{bmatrix} {X}\\ {Y}\\ {Z}\\ \end{bmatrix}=\begin{bmatrix} {f_x}&{s}&{u_0}\\ {0}&{f_y}&{v_0}\\ {0}&{0}&{1}\\ \end{bmatrix}\begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {U}\\ {V}\\ {W}\\ {1}\\ \end{bmatrix} λ uv1 = fx00sfy0u0v01 XYZ = fx00sfy0u0v01 [R3×3T3×1] UVW1

世界坐标系到像素坐标系的转换实际上表达的是透视投影中空间点到像点的投影关系,所以把该转换矩阵叫做投影矩阵(Projection Matrix),常用 M M M表示 ,通过矩阵运算可知投影矩阵是一个3x4的矩阵,它是内参矩阵和外参矩阵的乘积。

λ p = K [ R 3 × 3 T 3 × 1 ] [ P w 1 ] = M [ P w 1 ] \lambda {p}=K \begin{bmatrix} {R_{3\times3}}&{T_{3\times1}}\\ \end{bmatrix} \begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix}=M\begin{bmatrix} {P_w}\\ {1}\\ \end{bmatrix} λp=K[R3×3T3×1][Pw1]=M[Pw1]

另外,若使用其次矩阵表达,矩阵维度会有所变化。
在这里插入图片描述


二、相机畸变

由于相机透镜的固有特性(凸透镜汇聚光线、凹透镜发散光线)导致成像直线会变成曲线。

相机畸变主要有径向畸变(radial distortion)和切向畸变 (tangential distortion)。

畸变特性:

  • 径向畸变主要由于透镜的几何形状改变了直线的形状。
  • 切向畸变主要由于透镜安装的时候没有与图像平面完美平行。
  • 实际经验中,图像几何更加关注径向畸变,因此有时候畸变图像校正的过程可能会忽略切向畸变。
    在这里插入图片描述

一)径向畸变

径向畸变主要包括:

  • 桶形畸变 (barrel distortion)
  • 枕形畸变 (pincushion distortion)
  • 八字胡畸变 (mustache distortion)
    在这里插入图片描述

可以看出,径向畸变图像的特点是:

  • 中心对称
  • 直线变曲
畸变特点场景
桶形畸变中心放大了,离光心越远,图像放大率越小鱼眼镜头,广角/全景图片
枕形畸变枕形畸变挤压了图片,(就像压扁的枕头)长焦镜头经常会出现枕形畸变,以消除球体效应
八字胡畸变上述两种类型的混合,它开始时是靠近光轴的桶形畸变,然后逐渐向图像边缘枕形畸变

径向畸变矫正

一般情况下,图像的径向畸变可用一个低阶多项式模型来表示:

x u n d i s t = x d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y u n d i s t = y d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) x_{undist}=x_{dist}(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{undist}=y_{dist}(1+k_1r^2+k_2r^4+k_3r^6) xundist=xdist(1+k1r2+k2r4+k3r6)yundist=ydist(1+k1r2+k2r4+k3r6)

其中 r 2 = x d i s t 2 + y d i s t 2 r^2=x_{dist}^2+y_{dist}^2 r2=xdist2+ydist2 ( x d i s t , y d i s t ) (x_{dist},y_{dist}) (xdistydist) 是归一化后的相机坐标系的点,即坐标原点已经移到主点,并且像素坐标除以焦距, x d i s t = X Z = u − u o f x x_{dist}=\frac{X}{Z}=\frac{u-u_o}{f_x} xdist=ZX=fxuuo y d i s t = Y Z = v − v o f y y_{dist}=\frac{Y}{Z}=\frac{v-v_o}{f_y} ydist=ZY=fyvvo,可以从畸变的图像中得到。 k 1 、 k 2 、 k 3 k_1、k_2、k_3 k1k2k3 是径向畸变参数(一般可使用多项式前两项,如鱼眼等畸变较大的相机会使用第三项,默认用三项总是没错的),可以用过棋盘格标定得到。

二)切向畸变

切向畸变由相机senser与透镜不平行导致。
在这里插入图片描述

切向畸变校正

图像的切向畸变也可用一个低阶多项式模型来表示:
x undist  = x dist  + [ 2 p 1 x dist  y dist  + p 2 ( r 2 + 2 x dist  2 ) ] y undist  = y dist  + [ p 1 ( r 2 + 2 y dist  2 ) + 2 p 2 x dist  y dist  ] x_{\text {undist }}=x_{\text {dist }}+\left[2 p_{1} x_{\text {dist }} y_{\text {dist }}+p_{2}\left(r^{2}+2 x_{\text {dist }}^{2}\right)\right]\\y_{\text {undist }}=y_{\text {dist }}+\left[p_{1}\left(r^{2}+2 y_{\text {dist }}^{2}\right)+2 p_{2} x_{\text {dist }} y_{\text {dist }}\right ] xundist =xdist +[2p1xdist ydist +p2(r2+2xdist 2)]yundist =ydist +[p1(r2+2ydist 2)+2p2xdist ydist ]

p 1 p_1 p1 p 2 p_2 p2 为切向畸变参数。

三)总畸变校正

同时考虑径向畸变和切向畸变:

x u n d i s t = x d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ 2 p 1 x d i s t y d i s t + p 2 ( r 2 + 2 x d i s t 2 ) ] y u n d i s t = y d i s t ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + [ p 1 ( r 2 + 2 y d i s t 2 ) + 2 p 2 x d i s t y d i s t ] x_{{undist }}=x_{dist}(1+k_1r^2+k_2r^4+k_3r^6)+\left[2 p_{1} x_{{dist }} y_{{dist }}+p_{2}\left(r^{2}+2 x_{dist }^{2}\right)\right]\\ y_{ {undist }}=y_{dist}(1+k_1r^2+k_2r^4+k_3r^6)+\left[p_{1}\left(r^{2}+2 y_{{dist }}^{2}\right)+2 p_{2} x_ {dist }y_{ {dist }}\right] xundist=xdist(1+k1r2+k2r4+k3r6)+[2p1xdistydist+p2(r2+2xdist2)]yundist=ydist(1+k1r2+k2r4+k3r6)+[p1(r2+2ydist2)+2p2xdistydist]
共有5个畸变参数 k 1 、 k 2 、 k 3 、 p 1 、 p 2 k_1、k_2、k_3、p_1、p_2 k1k2k3p1p2,这5个畸变参数与内参矩阵一起,都是需要进行相机标定。但是在OpenCV相机标定时输出顺序是 k 1 、 k 2 、 p 1 、 p 2 、 k 3 k_1、k_2、p_1、p_2、k_3 k1k2p1p2k3,因为 k 3 k_3 k3 不重要,很多情况下不需要。(是不是很真实?)


参考:
[1] CSE/EE486 Computer Vision I
[2] 一文详解相机标定算法原理
[3] 立体视觉入门指南(1):坐标系与相机参数
[4] 相机标定(Camera calibration)原理及步骤

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

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

相关文章

618数码节该如何挑选,推荐几款618值得入手的数码好物

又到了一年一度的618剁手季,各大电商平台都纷纷推出了超级大促活动,激发了无数值友的狂热购物欲望。你是否也已经开始摩拳擦掌,准备掏钱包买买买呢?那么赶快听听小编的建议吧!经过自己使用的亲身体验,小编给…

Superset | 地图无法显示的问题

知识目录 一、写在前面二、Superset地图显示不了三、Superset无法加载已更新的MySQL数据库数据 一、写在前面 大家好!我是初心,一直在寻找并尝试着适合自己的方向! Apache Superset是一款由Python语言为主开发的开源时髦数据探索分析以及可…

高通 Camera HAL3:集成camxoverridesettings.txt到整机版本

camxoverridesettings.txt 是高通提供给开发者临时进行CAMX、CHI-CDK功能调试的一种方式,通过配置各种变量值然后写入到该文件,能控制Log打印、参数配置、数据dump等多种功能 这个文件需要集成在设备目录的vendor/etc/camera/里 因为camxoverridesetti…

2023年金九银十最新 Java面试必背八股文(含答案)详解

马上又逢金九银十,意味着很多人又面临着就职和跳槽,相信还有很多人对于自己就职没有很大的把我,今天就给大家分享我一个朋友总结的Java必问核心知识点,以及面试真题解答。 Java 面试 现在 Java 面试都是靠八股文,所以…

SOFA Weekly|可信基础设施技术分论坛、Layotto 社区会议回顾与预告、社区本周贡献...

SOFA WEEKLY | 每周精选 筛选每周精华问答,同步开源进展 欢迎留言互动~ SOFAStack(Scalable Open Financial Architecture Stack)是蚂蚁集团自主研发的金融级云原生架构,包含了构建金融级云原生架构所需的各个组件&am…

【可乐荐书】Python自动化办公应用大全(ChatGPT版):从零开始教编程小白一键搞定烦琐工作

本栏目将推荐一些经典的、有趣的、有启发性的书籍,这些书籍涵盖了各个领域,包括文学、历史、哲学、科学、技术等等。相信这些书籍不仅可以让你获得知识,还可以让你感受到阅读的乐趣和魅力。 今天给大家推荐的书籍是:《Python自动…

互联网最全Java面试八股文,整整1658页,带你轻松应对各种面试题

又是一年一度的秋招大热门,为助力广大程序员朋友 “面试造火箭”,小编今天给大家分享的便是这份马士兵内部的面试神技——1658页《Java面试突击核心讲》! 注:这份神技是由内部十余名Java架构讲师纯手打总结的最新版面试突击文档&a…

分集与路径合并方式

本专栏包含信息论与编码的核心知识,按知识点组织,可作为教学或学习的参考。markdown版本已归档至【Github仓库:https://github.com/timerring/information-theory 】或者公众号【AIShareLab】回复 信息论 获取。 文章目录 分集分集的概念分集…

《C和指针》读书笔记(第十章 结构和联合)

目录 0 简介1 结构基础知识1.1 结构声明1.2 结构成员1.3 结构成员的直接访问1.4 结构成员的间接访问1.5 结构的自引用1.6 不完整的声明1.7 结构的初始化 2 结构、指针和成员2.1 访问指针2.2 访问结构2.3 访问结构成员2.4 访问嵌套的结构2.5 访问指针成员 3 结构的存储分配4 作为…

TiDB亿级数据亚秒响应查询集群部署

目录 1 集群部署1.1 环境要求1.1.1 操作系统建议配置1.1.2 服务器建议配置 1.2 环境准备1.3 安装TiUP1.3.1 什么是TiUP1.3.2 安装TiUP组件1.3.3 配置TiUP环境1.3.4 检查TiUP 工具是否安装1.3.5 安装 cluster 组件1.3.6 升级cluster组件 1.4 编辑部署文件1.4.1 常见的部署场景1.…

Go语言并发微服务分布式高可用

Go语言并发微服务分布式高可用 Go语言基础 环境安装 命令行输入go,当前操作系统Os环境中依赖于PATH指定的日录们去找命令(可执行文件)windows会优先搜索当前日录,当前日录没有才依赖PATH中指定的日录 环境变量: 操作系统运行环境中提前定义好的变量P…

FreeRTOS简单任务创建和任务删除(基于stm32F407)

1. 实验目的 使用动态方法 xTaskCreate()创建任务,使用vTaskDelete()函数删除任务;创建开始任务start_task,在开始任务中创建其他三个任务,创建task1任务实现LED0每500ms闪烁一次,创建task2任务实现LED1每500ms闪烁一…

Linux C简易聊天室

对于初学者而已,我们学习的网络编程(如TCP,UDP编程),我们通常都是在局域网内进行通信测试,有时候我们或者会想,我们现在写的内网网络数据和外网的网络数据有什么不同,我们内网的数据是如何走出外…

notepadd++快捷键记录

记录下 notepadd 常用快捷键 1.搜索 普通搜索:Ctrl F 正则表达式搜索: 查找模式用 正则表达式 。如 A|B|C ,搜索多个关键字, 更多正则表达式探索中。 还可以选中 选取范围内 ,就会只在鼠标选中区域内查找。 2.区…

Visual Studio Code 1.79 发布

发布模式 - 将工作区中的特定文件和文件夹标记为只读。 在某些开发场景中,将工作区的某些文件夹或文件显式标记为只读会很有帮助。例如,如果文件夹或文件内容由不同的进程管理(例如 node_modules 由 Node.js 包管理器管理的文件夹),则将它们…

E往无前 | get正确使用姿势!腾讯云大数据ES日志场景优化案例回顾

导语: 随着ELK方案在开源日志分析领域越来越流行,各种业务场景也给ELK方案带来了越来越多的挑战。本文将回顾一次真实客户案例,从使用姿势上,提供一些大集群、多日志主题场景下的集群优化思路。 一、ELK不香了? 我们…

DevOps系列文章之 Docker-compose

一,Docker-compose全集 1,Docker-compose简介 Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。 Docker-Compose将所管理的容器分为三层,分别是工程(project)&#xff0c…

ChatGLM简介和SSE聊天接口测试效果

开发公司 智谱AI是由清华大学计算机系技术成果转化而来的公司,致力于打造新一代认知智能通用模型。公司合作研发了双语千亿级超大规模预训练模型GLM-130B,并构建了高精度通用知识图谱,形成数据与知识双轮驱动的认知引擎,基于此模型…

java异常 | 处理规范、全局异常、Error处理

文章目录 🚃异常类型🎠显示声明异常:①:try-catch②方法签名 🚃异常处理规范⚓️异常包装⚓️异常传递⚓️异常日志记录⚓️异常处理的最佳实践 🚃全局异常处理⛵️优点:⛵️代码示例&#xff1…

骨传导蓝牙耳机哪个牌子好,列举几款知名的骨传导耳机

​骨传导耳机,顾名思义就是通过骨头传播声音的耳机,由于它在声音传播方式上与传统耳机不同,不需要借助外耳、耳道,也能让耳朵更好地感受到外界的声音,在一些特殊场合下可以让使用者听到环境音。骨传导耳机虽然很小巧轻…