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

【相机与图像】1. 相机模型的介绍:内参、外参、畸变参数

想着整理下相机模型(内容上参考 slam十四讲)、相机的内外参标定。方便自己的使用和回顾。
不过,内外参标定啥时候记录随缘 -_-

概述

构建相机模型
相机将三位世界中的坐标点(单位为米)映射到二维图像平面(单位为像素)的过程,使用一个集合模型进行描述。

  • 最简单且常见的为针孔模型,他描述了一束光通过针孔后,在针孔背面投影成像的关系;
  • 同时由于相机镜头上的透镜的存在,使得光线投影到成像平面过程中会产生畸变。所以使用针孔和畸变两个模型来描述整个投影过程。

单目相机成像过程】(这里先上最终的结论)

  • 1 【世界坐标】世界坐标系下有点P,世界坐标为 P w P_w Pw
  • 2 【相机坐标】相机在运动,对应的外参为 R , t R,t R,t。P的相机坐标为 P c = R P w + t P_{c}=RP_w+t Pc=RPw+t.
  • 3 【归一化坐标】此时 P c = ( X , Y , Z ) P_c=(X,Y,Z) Pc=(X,Y,Z),将点投影到归一化平面 Z = 1 Z=1 Z=1 上,得到P的归一化坐标为 P c ′ = [ X / Z , Y / Z , 1 ] T P_c^{'}=[X/Z,Y/Z,1]^T Pc=[X/Z,Y/Z,1]T
  • 4 【去畸变】存在畸变时,使用畸变参数计算 对应的坐标。
  • 5 【像素坐标】通过内参矩阵,计算对应的像素坐标: P ~ u v = K P c ′ \tilde{P}_{uv}=KP_c^{'} P~uv=KPc

公式与图示

  • 在不考虑畸变的影响,可将整过过程写成表达式如下,: s P ~ = K ( R P w + t ) s\tilde{P}=K(RP_w+t) sP~=K(RPw+t)
  • 以及图示公式细节( s = Z c s=Z_c s=Zc,所以图示等号左边与最终的uv还有个s倍的关系)
    在这里插入图片描述

1 针孔模型建模

小孔成像原理,成像平面的图像 为实际物品按照z轴旋转180度状态。在实际相机中,会将成像平面上倒转的图像处理成与3D目标,直观上是一致的。然后根据等边三角形相似原理,构建了一个 等效成像面,这样也简化了点 在坐标系的构建和空间与图像上映射时的坐标问题。
如下图
在这里插入图片描述
在上图中,构建3维坐标与2维坐标的转换中所需的坐标系(共四种)。

  • 世界坐标系 o w x w y w z w o_wx_wy_wz_w owxwywzw
    世界坐标系不是一个又明确定义的坐标系,可以任意制定一个字 “在当前场景下固定不变的坐标系” 作为世界坐标系。
  • 相机坐标系 o c x c y c z c o_cx_cy_cz_c ocxcyczc
    相机坐标系习惯上定义:假设手持相机,相机光心作为原点;右边为x轴正方向;下边为y轴正方向;相机前方为z轴正方向(拍摄远处的物体距离为正)。
  • 图像坐标系 o i x i y i o_ix_iy_i oixiyi
    为二维坐标系。图像坐标系的原点位于感光芯片的中心(感光芯片是位于镜头背后的用于成像的小板子),x、y轴方向和相机坐标系的x、y轴相同。
  • 像素坐标系 o p x p y p o_px_py_p opxpyp
    像素坐标系也位于成像平面上,是图像坐标系通过平移和缩放得到的。值得注意是,不同的软件或者库对于像素坐标 (u,v) 的定义不一样。
    在这里插入图片描述
    我们先探究目标从 相机坐标系 转换到 图像坐标系的关系。
    在这里插入图片描述
    在这里插入图片描述
    其中,3D点的坐标为 ( X c , Y c , Z c ) (X_c,Y_c,Z_c) (Xc,Yc,Zc),图片上的2D坐标为 ( X i , Y i ) (X_i, Y_i) (Xi,Yi)。则有 Z c f = X c X i = Y c Y i \frac{Z_c}{f}=\frac{X_c}{X_i}=\frac{Y_c}{Y_i} fZc=XiXc=YiYc

2 相机内参

内参矩阵为相机坐标系下的3D坐标转换到像素坐标的变化关系。

  1. 相机坐标–> 图像坐标
    通过上面的公式可以得到二者转换关系。其中 f f f 为相机焦距。
    X i = f Z c X c Y i = f Z c Y c \begin{aligned} X_i &=\frac{f}{Z_c}X_c \\ Y_i &=\frac{f}{Z_c}Y_c \end{aligned} XiYi=ZcfXc=ZcfYc

  2. 图像坐标–>像素坐标
    图像坐标实连续值,而像素坐标是离散的正值,经过平移和缩放,得到两者之间的关系:
    u = α X i + c x v = β Y i + c x \begin{aligned} u &=\alpha X_i+c_x \\ v &=\beta Y_i+c_x \\ \end{aligned} uv=αXi+cx=βYi+cx

    • α 、 β \alpha、\beta αβ 与实际传感器的物理尺寸相关,单位为 pixel每m。
      c x 、 c y c_x、c_y cxcy 为光心,单位为 pixel。
      X i , X j X_i, X_j Xi,Xj 为 图像坐标系下的坐标,单位为 m。
  3. 相机坐标–> 像素坐标
    通过上面的公式,可得以下转换关系
    u = α f Z c X c + c x u = f x X c Z c + c x v = β f Z c Y c + c y v = f y Y c Z c + c y \begin{aligned} u &=\alpha\frac{f}{Z_c}X_c+c_x\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,u =f_x\frac{X_c}{Z_c} +c_x\\ v &=\beta\frac{f}{Z_c}Y_c+c_y\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,v =f_y\frac{Y_c}{Z_c} +c_y \end{aligned} uv=αZcfXc+cxu=fxZcXc+cx=βZcfYc+cyv=fyZcYc+cy可以发现,当相机硬件固定下来, f x 、 f y 、 c x 、 c y f_x、f_y、c_x、c_y fxfycxcy 也就固定下来了。此时 u u u X c X_c Xc v v v Y c Y_c Yc 的变化并不成正比,因为还存在 Z c Z_c Zc的变量。
    为了公式更好的转换和表达,引入了齐次坐标(在原有的坐标维度额外补充1维,数值为1),在这里像素的齐次坐标为 P ~ u v \tilde{P}_{uv} P~uv

    在相机的坐标转换过程中,是否使用齐次式主要取决于转换的复杂性和需要表示的信息类型。对于涉及平移、旋转、缩放等多种变换的复杂场景,以及需要表示无穷远点或区分点和向量的场合,使用齐次坐标可以更方便地实现坐标的线性转换和统一处理。然而,在计算资源受限或特定应用场景下,可能会选择不使用齐次坐标进行坐标转换。

    则可将上面的表达式整理为 ( u v 1 ) = 1 Z c ( f x 0 c x 0 f y c y 0 0 1 ) ( X c Y c Z c ) \begin{pmatrix} u\\ v\\ 1 \end{pmatrix}=\frac{1}{Z_c}\begin{pmatrix} f_x & 0 & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{pmatrix}\begin{pmatrix} X_c\\ Y_c\\ Z_c \end{pmatrix} uv1 =Zc1 fx000fy0cxcy1 XcYcZc 该式中,将中间的定量组成的矩阵成为相机的内参数(Camera Intrinsic)矩阵K。通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化。
    相机坐标转换到像素坐标的公式可记如下 s P ~ u v = K P c s \tilde{P}_{uv} = KP_c sP~uv=KPc其中 s = Z c s=Z_c s=Zc,将该值记成s也是说明它为一个缩放尺度,为数值。

    从另一个角度考虑该投影过程。
    相机坐标系下的点 除以最后一个维度(即该点距离相机成像平面的深度),即对最后一维度进行归一化处理,得到点P在相机的归一化平面上的归一化坐标。于是定义 z = 1 z=1 z=1为归一化平面,该平面上的点为归一化坐标 ( X c , Y c , Z c ) − ˜ ( X c / Z c , Y c / Z c , 1 ) (X_c,Y_c,Z_c)\~{-}(X_c/Z_c, \,Y_c/Z_c,\,1) (Xc,Yc,Zc)˜(Xc/Zc,Yc/Zc,1)

注意:

  • 另外,有时会引入一个 λ \lambda λ 参数,来描述坐标轴垂直程度的误差(感光芯片的X,Y轴没有完全垂直) K = ( f x λ c x 0 f y c y 0 0 1 ) K= \begin{pmatrix} f_x & \lambda & c_x\\ 0 & f_y & c_y\\ 0 & 0 & 1 \end{pmatrix}\ K= fx00λfy0cxcy1  
  • 感光芯片的最小单位一般不是严格的正方形,所以得到的 f x f_x fx f y f_y fy 不一定相等。
  • K一般会由相机生产商提供,如果没有提供则可通过单目棋盘格张正友标定法进行获取,该过程被称作未内参标定。
  • 实际使用XY坐标轴的不垂直误差不需要考虑
  • 这个内参矩阵为小孔成像原理推导出来的,畸变模型后续进行介绍。

3 相机外参

外参矩阵描述的是,世界坐标系下的坐标转换为相机坐标系下的坐标的过程。这两个坐标系均为3维的,转换过程为旋转平移操作的刚体变换。
在这里插入图片描述
相机外参:旋转矩阵 R 为3x3,平移向量 t 为 3x1。
点P:相机坐标系下的坐标 P c P_c Pc为3x1,在世界坐标系下的坐标 P w P_w Pw为 3x1,对应的齐次世界坐标 P ~ w \tilde{P}_{w} P~w为 4x1。
则有 P c = R P w + t P_c=R P_w+t Pc=RPw+t对应的齐次公式为 P c = [ R t ] P ~ w P_c=\begin{bmatrix} R & t \end{bmatrix} \tilde{P}_{w} Pc=[Rt]P~w则,将世界坐标转换为像素坐标的完整的转换公式为 s P u v = s [ u v 1 ] = K ( R P w + t ) s P_{uv}=s \begin{bmatrix} u \\ v \\ 1 \end{bmatrix}=K(RP_w+t) sPuv=s uv1 =K(RPw+t)

4 畸变

畸变的分类
为了更好的成像效果,在相机的前方加入了透镜,会对成像过程中光线的传播产生新的影响。

  • 【径向畸变】透镜自身的形状对光线的传播产生的影响。
    • 桶形畸变:放大率随着光轴之间的距离增加而减小。
    • 枕形畸变:与桶形畸变刚好相反
      在这里插入图片描述
  • 【切向畸变】在机械组装过程中,透镜和成像平面不可能完全平行,对光的传播产生的映像。
    在这里插入图片描述

畸变的数学表达
为了更好理解畸变,使用更严格的数学形式对这两者进行描述。
考虑归一化平面上的任意一点 p,它的坐标为 [ x , y ] T [x,y]^T [x,y]T,对应的极坐标形式为 [ r , θ ] T [r,\theta]^T [r,θ]T,其中 r r r 表示点 p 与坐标系原点的距离, θ \theta θ 表示与水平轴的夹角。通常假设这些畸变呈多项式关系。

  • 径向畸变可以看成坐标点沿着长度方向发生了变化,即 点距离远点的长度发生了变化。 x d i s t o r e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) y d i s t o r e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) \begin{aligned} x_{distored}& =x(1+k_1r^2+k_2r^4+k_3r^6) \\ y_{distored}& =y(1+k_1r^2+k_2r^4+k_3r^6) \end{aligned} xdistoredydistored=x(1+k1r2+k2r4+k3r6)=y(1+k1r2+k2r4+k3r6)
  • 切向畸变可以看成坐标点沿着切线方向发生了变化,即 水平夹角发生了变化。
    x d i s t o r e d = x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r e d = y + p 1 ( r 2 + 2 y 2 ) + 2 P 2 x y \begin{aligned} x_{distored}& =x+2p_1xy+p_2(r^2+2x^2) \\ y_{distored}& =y+p_1(r^2+2y^2)+2P_2xy \end{aligned} xdistoredydistored=x+2p1xy+p2(r2+2x2)=y+p1(r2+2y2)+2P2xy

因此对于相机坐标系中的一点P,可通过5个畸变系数找到对应的像素平面上的正确位置。流程如下:

  1. 将三维空间点投影到归一化图像平面。设它的归一化坐标为 [ x , y ] T [x,y]^T [x,y]T
  2. 对于归一化平面上的点计算畸变 x d i s t o r e d = x ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + x + 2 p 1 x y + p 2 ( r 2 + 2 x 2 ) y d i s t o r e d = y ( 1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + y + p 1 ( r 2 + 2 y 2 ) + 2 P 2 x y \begin{aligned} x_{distored} = x(1+k_1r^2+k_2r^4+k_3r^6)+x+2p_1xy+p_2(r^2+2x^2) \\ y_{distored} = y(1+k_1r^2+k_2r^4+k_3r^6)+y+p_1(r^2+2y^2)+2P_2xy \end{aligned} xdistored=x(1+k1r2+k2r4+k3r6)+x+2p1xy+p2(r2+2x2)ydistored=y(1+k1r2+k2r4+k3r6)+y+p1(r2+2y2)+2P2xy
  3. 将畸变后的点通过内参矩阵投影到像素平面,得到在图像上的 uv 坐标 u = f x x d i s t o r t e d + c x v = f y y d i s t o r t e d + c y \begin{aligned} u= f_xx_{distorted}+c_x \\ v = f_yy_{distorted}+c_y \end{aligned} u=fxxdistorted+cxv=fyydistorted+cy

去畸变
实际使用中,畸变矫正的做法:

  1. 先对整张图像进行去畸变,然后在该图像中讨论像素坐标与空间坐标的映射(更常用)
  2. 将畸变方程使用到3D点到畸变后图像的过程,会增加计算的麻烦程度

相关文章:

【相机与图像】1. 相机模型的介绍:内参、外参、畸变参数

想着整理下相机模型(内容上参考 slam十四讲)、相机的内外参标定。方便自己的使用和回顾。 不过,内外参标定啥时候记录随缘 -_- 概述 【构建相机模型】 相机将三位世界中的坐标点(单位为米)映射到二维图像平面&#xff…...

Linux内核netlink机制 - 用户空间和内核空间数据传输

简介: Netlink socket 是一种Linux特有的socket,用于实现用户空间与内核空间通信的一种特殊的进程间通信方式(IPC) ,也是网络应用程序与内核通信的最常用的接口。 Netlink 是一种在内核和用户应用间进行双向数据传输的非常好的方式&a…...

Node.js自动化处理TOML文件

在软件开发过程中,自动化处理配置文件是一种常见的需求。TOML(Tom’s Obvious, Minimal Language)是一种用于配置文件的简单易读的格式。本文将展示如何使用Node.js和一些流行的库来自动化读取、修改并写入TOML文件。 1. 准备工作 在开始之前…...

Spring boot 后端向前端发送日期时间发现少了8小时

问题 数据库 后端的控制台输出 前端控制台输出 可以发现少了8小时 问题 springboot 向前端响应数据是默认 Json 格式,所以会有类型转换,springboot 就通过 Jackson 来对 data 类型数据进行转换,但是Jackson 类型的时区是 GMT,与…...

MySQL数据库(基础篇)

🌏个人博客主页:心.c 前言:今天讲解的是MySQL的详细知识点的,希望大家可以收货满满,话不多说,直接开始搞! 🔥🔥🔥文章专题:MySQL 😽感…...

ffmpeg ffplay.c 源码分析二:数据读取线程

本章主要是分析 数据读取线程read_thread 中的工作。如上图红色框框的部分 从ffplay框架分析我们可以看到,ffplay有专⻔的线程read_thread()读取数据, 且在调⽤av_read_frame 读取数据包之前需要做: 1.例如打开⽂件, 2.查找配置解…...

国科大作业考试资料《人工智能原理与算法》2024新编-第十三次作业整理

1、假设我们从决策树生成了一个训练集,然后将决策树学习应用于该训练集。当训练集的大小趋于无穷时,学习算法将最终返回正确的决策树吗?为什么是或不是? 本次有两个参考: 参考一: 当训练集的大小趋于无穷…...

Netdevops入门之Telnetlib语法案例

1、Telnetlib模块: 支持telnet/ssh远程访问的模块很多,常见的有telnetlib、ciscolib、paramiko、netmiko、pexpect,其中telnetlib和ciscolib对应telnet协议,后面3个对应SSH协议。 ①-通过ENSP环境搭建实验环境 ②-基础语法-telnetlib案例1&…...

永辉“爆改”续命

2024年,在线下零售一片哀嚎之下,胖东来似乎活成了国内零售业的密码,同时也变身成为各大零售企业的咨询公司,四处帮助“友商”救火,就连一直名声在外的永辉超市,也成了救火对象。 作为曾经国内生鲜超市的“…...

IEEE双一区Top“饱受诟病”!曾上医院黑名单,国人占比高达82.405%,目测即将拉下神坛?

本周投稿推荐 SCI&EI • 1区计算机类,3.5-4.0(1个月录用) • CCF推荐,1区-Top(3天初审) EI • 各领域沾边均可(2天录用) 知网(CNKI)、谷歌学术 •…...

Hive环境搭建(Mysql数据库)

【实验目的】 1) 了解hive的作用 2) 熟练hive的配置过程(Mysql数据库) 【实验原理】 Hive工具中默认使用的是derby数据库,该数据库使用简单,操作灵活,但是存在一定的局限性,hive支持使用第三方数据库&…...

【ESP32 IDF SPI硬件驱动W25Q64】

目录 SPISPI介绍idf配置初始化配置通信 驱动代码 SPI SPI介绍 详细SPI介绍内容参考我之前写的内容【ESP32 IDF 软件模拟SPI驱动 W25Q64存储与读取数组】 idf配置 初始化配置 spi_bus_initialize() 参数1 :spi几,例如spi2,spi3 参数2:…...

太原高校大学智能制造实验室数字孪生可视化系统平台建设项目验收

随着科技的不断进步,智能制造已经成为推动制造业转型升级的重要力量。太原高校大学智能制造实验室紧跟时代步伐,积极推进数字孪生可视化系统平台的建设,并于近日圆满完成了项目的验收工作。这一里程碑式的成果,不仅标志着实验室在…...

Kafka消息队列

目录 什么是消息队列 高可用性 高扩展性 高可用性 持久化和过期策略 consumer group 分组消费 ZooKeeper 什么是消息队列 普通版消息队列 说白了就是一个队列,生产者生产多少,放在消息队列中存储,而消费者想要多少拿多少,按序列号消费 缓存信息 生产者与消费者解耦…...

@Transactional注解及其事务管理

1. 事务问题概述 事务问题主要来源于数据库,与数据库事务紧密相关。事务的四大特性(ACID): 原子性(Atomicity):事务要么完全执行,要么完全不执行。一致性(Consistency&a…...

ROS2入门到精通—— 3-1 ROS2实战:CasADi —— 优化计算的利器

0 前言 CasADi是一个强大的开源软件库,它提供了一种灵活且高效的方式来构建和解决复杂的非线性模型。通过其直观的API,开发者可以轻松地定义数学表达式并自动求解微分方程、优化问题以及符号计算等任务。 CasADi基于Python编写,但提供了C++和MATLAB接口,使得不同背景的开发…...

日拱一卒 | JVM

文章目录 什么是JVM?JVM的组成JVM的大致工作流程JVM的内存模型 什么是JVM? 我们知道Java面试,只要你的简历上写了了解JVM,那么你就必然会被问到以下问题: 什么是JVM?简单说一下JVM的内存模型?…...

乐尚代驾六订单执行一

加载当前订单 需求 无论是司机端,还是乘客端,遇到页面切换,重新登录小程序等,只要回到首页面,查看当前是否有正在执行订单,如果有跳转到当前订单执行页面 之前这个接口已经开发,为了测试&…...

SciPy 与 MATLAB 数组

SciPy 与 MATLAB 数组 SciPy 是一个开源的 Python 库,广泛用于科学和工程计算。它构建在 NumPy 数组的基础之上,提供了许多高级科学计算功能。MATLAB 是一个高性能的数值计算环境,它也使用数组作为其基础数据结构。在这篇文章中,我们将探讨 SciPy 和 MATLAB 在数组操作上的…...

基于vue-grid-layout插件(vue版本)实现增删改查/拖拽自动排序等功能(已验证、可正常运行)

前端时间有个需求,需要对33(不一定,也可能多行)的卡片布局,进行拖拽,拖拽过程中自动排序,以下代码是基于vue2,可直接运行,报错可评论滴我 部分代码优化来自于GPT4o和Clau…...

DBoW3相关优化脉络

1 DBow3 GitHub - rmsalinas/DBow3: Improved version of DBow2 2 优化后得到fbow GitHub - rmsalinas/fbow: FBOW (Fast Bag of Words) is an extremmely optimized version of the DBow2/DBow3 libraries. 其中fbow是ucoslam的一部分; ucoslam GitHub - la…...

qt 如何制作动态库插件

首先 首先第一点要确定我们的接口是固定的,也就是要确定 #ifndef RTSPPLUGIN_H #define RTSPPLUGIN_H #include "rtspplugin_global.h" typedef void (*func_callback)(uint8_t* data,int len,uint32_t ssrc,uint32_t ts,const char* ipfrom,uint16_t f…...

一种docker start放回Error response from daemon: task xxx错误的解决方式

1. 问题描述 执行systemctl daemon-reload与systemctl restart docker命令后,发现docker中有的应用无法启动,并显示出Exit(255)的错误提示。 重新执行docker start 容器id后发现返回,Error response from daemon: task xxx的错误。 2. 问题…...

规控面试常见问题

一、项目中遇到的困难或者挑战是什么? 二、A*算法原理(伪代码) 输入:代价地图、start 、 goal(Node结构,包含x、y、g、h、id、pid信息) 首先初始化:创建一个优先级队列openlist,它是一个最小堆,根据节点的f值排序 ( priority_queue<Node, std::vector<Node…...

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙

代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙 文章目录 代码随想录算法训练营Day 63| 图论 part03 | 417.太平洋大西洋水流问题、827.最大人工岛、127. 单词接龙17.太平洋大西洋水流问题一、DFS二、BFS三、本题总结 82…...

【全网最全】CSDN博客的文字颜色、字体和字号设置

文章目录 一、字体颜色二、字体大小三、字体类型四、字体背景色 在这篇博客中&#xff0c;我们将深入探讨如何在Markdown编辑器中设置文字颜色、大小、字体与背景色。Markdown本身并不直接支持这些功能&#xff0c;但通过结合HTML标签和CSS样式&#xff0c;我们可以实现这些视觉…...

C#实现数据采集系统-Mqtt实现采集数据转发

在数据采集系统中,通过ModbusTcp采集到数据之后,再通过MQTT转发到其他应用 MQTT操作 安装MQTT mqtt介绍和环境安装 使用MQTT 在C#/Net中使用Mqtt MQTT类封装 MQTT配置类 public class MqttConfig{public string Ip {get; set;...

common-intellisense:助力TinyVue 组件书写体验更丝滑

本文由体验技术团队Kagol原创~ 前两天&#xff0c;common-intellisense 开源项目的作者 Simon-He95 在 VueConf 2024 群里发了一个重磅消息&#xff1a; common-intellisense 支持 TinyVue 组件库啦&#xff01; common-intellisense 插件能够提供超级强大的智能提示功能&…...

图片在线压缩有效方法详解,分享7款最佳图片压缩工具免费(全新)

当您的系统中图片数量不断增加&#xff0c;却无法删除时&#xff0c;那么就需要通过图片压缩来解决您的问题。随着图片文件的增大&#xff0c;高分辨率图片占据了大量存储空间。而此时系统中的存储空间也开始变得不够用&#xff0c;无法跟上高质量图片的增长。因此&#xff0c;…...

electron安装及快速创建

electron安装及快速创建 electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 详细内容见官网&#xff1a;https://www.electronjs.org/zh/docs/latest/。 今天来记录下练习中的安装过程和hello world的创建。 创建项目文件夹&#xff0c;并执行npm 初始化命…...

需要消化的知识点

需要消化 消灭清单 如何自定义一个Interceptor拦截器&#xff1f; 后端开发可以用上的前端技巧 10个堪称神器的 Java 学习网站. 【前端胖头鱼】11 chrome高级调试技巧&#xff0c;学会效率直接提升666% 【前端胖头鱼】10个我经常逛的“小网站” 【前端劝退师lv-6】Chrome D…...

2024年7月25日(Git gitlab以及分支管理 )

分布式版本控制系统 一、Git概述 Git 是一种分布式版本控制系统,用于跟踪和管理代码的变更。它是由Linus Torvalds创建的,最 初被设计用于Linux内核的开发。Git允许开发人员跟踪和管理代码的版本,并且可以在不同的开 发人员之间进行协作。 Github 用的就是Git系统来管理它们的…...

pdf格式过大怎么样变小 pdf文件过大如何缩小上传 超实用的简单方法

面对体积庞大的 PDF 文件&#xff0c;我们常常需要寻找有效的方法来缩减其大小。这不仅能够优化存储空间&#xff0c;还能提升文件的传输和打开速度。PDF文件以其稳定性和跨平台兼容性成为工作和学习中的重要文件格式。然而&#xff0c;当我们需要通过邮件发送或上传大文件时&a…...

前端文件下载word乱码问题

记录一次word下载乱码问题&#xff1a; 用的请求是axios库&#xff0c;然后用Blob去接收二进制文件 思路&#xff1a;现在的解决办法有以下几种&#xff0c;看看是对应哪种&#xff0c;可以尝试解决 1.将响应类型设为blob&#xff0c;这也是最重要的&#xff0c;如果没有解决…...

repo中的default.xml文件project name为什么一样?

文章目录 default.xml文件介绍为什么 name 是一样的&#xff0c;path 不一样&#xff1f;总结 default.xml文件介绍 在 repo 工具的 default.xml 文件中&#xff0c;定义了多个 project 元素&#xff0c;每个元素都代表一个 Git 仓库。 XML 定义了多个不同的 project 元素&…...

<section id=“nice“ data-tool=“mdnice编辑器“ data-webs

大模型日报 2024-07-24 大模型资讯 Meta发布最大Llama 3 AI模型&#xff0c;语言和数学能力提升 摘要: Meta公司发布了其迄今为止最大的Llama 3人工智能模型。该模型主要免费提供&#xff0c;具备多语言处理能力&#xff0c;并在语言和数学方面表现出显著提升。 Meta发布最强AI…...

作业7.26~28

全双工&#xff1a; 通信双方 既可以发送&#xff0c;也可以接收数据 1. 利用多线程 或者 多进程&#xff0c; 实现TCP服务器 和 客户端的全双工通信 思路&#xff1a; 服务器和客户端&#xff0c; 在建立通信以后&#xff0c;可以创建线程&#xff0c;在线程编写另一个功能代…...

自定义webIpad证件相机(webRTC)

该技术方案可用于各浏览器自定义相机开发 相机UI&#xff08;index.html&#xff09; <!DOCTYPE html> <html lang"zh" prew"-1"><head><meta charset"UTF-8"><meta name"viewport"content"user-sc…...

GO发票真伪批量查验方法、数电票查验接口

“教”给机器标注数据的正确率就决定了人工智能判断的正确率。翔云人工智能开放平台的OCR产品经过我们的开发人员精心调“教”&#xff0c;识别率高、识别速度快。 发票&#xff0c;是发生的成本、费用或收入的原始凭证。于公司来说&#xff0c;发票主要是公司做账的依据&…...

【Go系列】Go的UI框架Fyne

前言 总有人说Go语言是一门后端编程语言。 Go虽然能够很好地处理后端开发&#xff0c;但是者不代表它没有UI库&#xff0c;不能做GUI&#xff0c;我们一起来看看Go怎么来画UI吧。 正文 Go语言由于其简洁的语法、高效的性能和跨平台的编译能力&#xff0c;非常适合用于开发GUI…...

.NET MAUI:跨平台开发的未来

常用资源 &#xff08;1&#xff09;.NET MAUI8构建应用文档。 Build your first .NET MAUI app - .NET MAUI | Microsoft Learn 一、什么是 .NET MAUI&#xff1f; .NET Multi-platform App UI (.NET MAUI) 是微软推出的一款跨平台开发框架。作为 Xamarin.Forms 的下一代产…...

VSCode切换默认终端

我的VSCode默认终端为PowerShell&#xff0c;每次新建都会自动打开PowerShell。但是我想让每次都变为cmd&#xff0c;也就是Command Prompt 更改默认终端的操作方法如下&#xff1a; 键盘调出命令面板&#xff08;CtrlShiftP&#xff09;中,输入Terminal: Select Default Prof…...

卫星观测叶绿素的相反信号

Contrasted Trends in Chlorophyll-a Satellite Products 运用卫星产品研究Chl的长时间序列变化时需要注意 Introduction &#xff08;1&#xff09;研究叶绿素的长期变化&#xff0c;需要至少40年的长时间序列&#xff1b; &#xff08;2&#xff09;Tian and Zhang 2023报告…...

2024年最新NVIDIA T4价格表及行业趋势!

英伟达&#xff08;NVIDIA&#xff09;作为目前全球T0级别的GPU制造商&#xff0c;其T4系列显卡以其卓越的计算性能和能效比&#xff0c;在数据中心、云计算及AI领域占据重要地位。 一、NVIDIA T4价格表概览 在探讨NVIDIA T4显卡的价格时&#xff0c;我们需要从直接购买和租赁…...

HTML + CSS编程规范

编程规范 HTML CSS 命名规范 HTML CSS 命名规范 1. 命名需要是具备语义性的单词&#xff0c;不能用 数字 拼音 数字,符号开头正确示范 &#xff1a; wrap description title content错误示范 : aaaa a1 $we 4tdds 2. 命名需要多个单词连接的情况下, 标记语言中可以使用 …...

机器学习之人脸识别-使用 scikit-learn 和人工神经网络进行高效人脸识别

文章摘要 本文将介绍如何使用 Python 的 scikit-learn 库和人工神经网络&#xff08;ANN&#xff09;来识别人脸。我们将使用 LFW 数据集&#xff08;Labeled Faces in the Wild&#xff09;&#xff0c;这是一个广泛用于人脸识别基准测试的大型人脸数据库。我们将展示如何准备…...

【虚拟化】KVM概念和架构

目录 一、什么是KVM&#xff1f; 二、KVM的功能 2.1 主要的功能 2.2 其它功能 三、KVM核心组件及作用 四、KVM与VMware的优势 五、KVM架构 六、qemu介绍 七、创建虚拟机流程 一、什么是KVM&#xff1f; Kernel-based Virtual Machine的简称&#xff0c;KVM 是基于虚拟…...

【Linux】权限2

Linux文件要被执行满足两个条件: ①必须要具备可执行权限 x ②真的是一个可执行程序 1.权限的修改,文件强行给别人 权限就是拦住一批人,不让他做特定的一件事情 a.更改人,更改文件所隶属的人 如果把文件强行给别人, chown xxx(普通用户) xxx(文件名) 会出现下面的情况 很明显…...

汽车长翅膀:GPU 是如何加速深度学习模型的训练和推理过程的?

编者按&#xff1a;深度学习的飞速发展离不开硬件技术的突破&#xff0c;而 GPU 的崛起无疑是其中最大的推力之一。但你是否曾好奇过&#xff0c;为何一行简单的“.to(‘cuda’)”代码就能让模型的训练速度突飞猛进&#xff1f;本文正是为解答这个疑问而作。 作者以独特的视角&…...

怀旧必玩!重返童年,扫雷游戏再度登场!

Python提供了一个标准的GUI&#xff08;图形用户界面&#xff09;工具包&#xff1a;Tkinter。它可以用来创建各种窗口、按钮、标签、文本框等图形界面组件。 而且Tkinter 是 Python 自带的库&#xff0c;无需额外安装。 Now&#xff0c;让我们一起来回味一下扫雷小游戏吧 扫…...