工业相机与镜头参数及选型
文章目录
- 1、相机成像系统模型
- 1.1 视场
- 1.2 成像简化模型
- 2、工业相机参数
- 2.1 分辨率
- 2.2 靶面尺寸
- 2.3 像元尺寸
- 2.4 帧率/行频
- 2.5 像素深度
- 2.6 动态范围
- 2.7 信噪比
- 2.8 曝光时间
- 2.9 相机接口
- 3、工业镜头参数
- 3.1 焦距
- 3.2 光圈
- 3.3 景深
- 3.4 镜头分辨率
- 3.5 工作距离(Workingdistance,WD)
- 3.6 视野范围(Field of View,FOV)
- 3.7 光学放大倍数(Magnification,b)
- 4、工业相机与镜头选型
- 4.1 相机分辨率的选择
- 4.2 相机与镜头分辨率的选择
- 4.3 镜头其他参数的选择
- 4.4 相机其他参数的选择
- 5、线激光器选型
1、相机成像系统模型
1.1 视场
视场(Field of View,FOV)指成像系统中图像传感器可以监测到的最大区域。在机器视觉系统设计时,考虑到一般都会使被检测目标尽量填满整视场,因此常用视场大小代替目标的最大长度Lmax来计算视觉系统的像素分辨率。
如果横纵方向上视场大小为[FOVh,FOVv],检测目标的最小特征的大小为[Ih,lv],则图像传感器应具有的最小像素分辨率为:
R m i n = [ F O V h l h × P m i n , F O V v l v × P m i n ] R_{min}=[\frac{FOV_h}{l_h}\times P_{min},\frac{FOV_v}{l_v}\times P_{min} ] Rmin=[lhFOVh×Pmin,lvFOVv×Pmin]
- P m i n : 最小特征的像素数 P_{min}:最小特征的像素数 Pmin:最小特征的像素数
成像系统视场的大小可以通过研究其成像规律得知。目前,机器视觉系统常用使用配备各种镜头系统的工业CCD/CMOS相机作为成像系统,透镜成像示意图如下所示:
镜头系统一般使用透镜系统,其成像遵循高斯成像公式:
1 f = 1 u + 1 v \frac{1}{f}=\frac{1}{u}+\frac{1}{v} f1=u1+v1
- f为焦距
- u为物距
- v为像距(实正虚负)
通常将像距与物距的比值定义为透镜的放大率M:
M = u v M=\frac{u}{v} M=vu
1.2 成像简化模型
由于对机器视觉成像系统来说,相机镜头到所检测目标的距离(称为工作距离,相当于物距)相对于相机焦距可近似认为是无穷远。若将其带入高斯成像公式,可得出此时相机像距近似等于其焦距,也就是说相机成像在焦平面上。据此,可以将镜头系统抽象为类似小孔成像的简化模型。
根据该简化模型,可以得出机器视觉系统图像传感器尺寸S(传感器平面某个方向上的长度)、视场FOV、工作距离WD及镜头焦距f之间的约束关系:
S F O V = f W D \frac{S}{FOV}=\frac{f}{WD} FOVS=WDf
2、工业相机参数
2.1 分辨率
分辨率是相机最基本的参数,由相机所采用的芯片分辨率决定,在采集图像时,相机的分辨率对检测精度有很大的影响,在对同样大的视场(景物范围)成像时,分辨率越高,对细节的展示越明显。
常用的工业面阵相机分辨率有500万、1200万、6500万等。对于线阵相机而言,分辨率就是传感器水平方向上的像素数,常见有2K、4K、8K、16K等。
2.2 靶面尺寸
英寸和毫米的换算关系是:1英寸(inch) = 25.4 mm。
但是对于一款CMOS成像芯片,虽然标称它的对角线尺寸为1英寸,实际测量只有大约16mm,和25.4mm相差甚远。这是为什么呢?
这实际上是一个历史遗留问题.最早的电视摄像机的核心元件是真空摄像管。那时候的真空摄像管看起来都差不多,它们被封装在圆柱形的玻璃外壳中,最常见的玻璃圆柱的外径尺寸就是1英寸,还有2英寸、3英寸等等。针对这种老式显像管,它真正能够显示的圆面直径只有16mm,远没有1 英寸这么大(要考虑到外壳封装占据的空间)。当时为了相互交流沟通的方便,一般都是以显像管的外径的数值来指代其成像范围,即便后来出现了CCD和CMOS成像芯片,但是这种度量方式却被一直继承了下来。
所以,在工业相机领域,成像元件中提到的“英寸”这个单位,已经不能按工业标准的1英寸=25.4mm来计算了,而要按 1英寸=16mm 来计算。它严格遵守了Optical Format规范,中文译名为光学格式,其数值称为OF值,单位为英寸。
另外需要说明的是,并不是所有的CMOS芯片都是按照 1英寸=16mm 来计算长度的,这要看CMOS对角线长度来定:只有CMOS对角线长度≥8mm时,才会使用16mm规范,此时1英寸=16mm。比如1/2 的芯片,对应对角线真实尺寸大约是8mm。对于对角线长度小于8mm的CMOS,使用18mm规范,此时1英寸=18mm,比如1/2.55英寸的芯片,其对角线的真实尺寸大约是7mm。
下图为不同画幅的CMOS(或者CCD)的真实尺寸对比。一般来说,如果CMOS尺寸大于2英寸,就不再使用英寸来划分,而是给它取一个特定的名称,比如APS画幅,全画幅,中画幅,大画幅等等。
2.3 像元尺寸
像元即影像单元,是组成数字化影像的最小单元。
- 像元尺寸和像元数(分辨率)共同决定了相机靶面的大小,通常工业相机像元尺寸为2μm~14μm。
像元尺寸从某种程度上反映了芯片的对光的响应能力,一般情况下,像元尺寸越大,能够接收到的光子数量越多,在同样的光照条件和曝光时间内产生的电荷数量越多。
2.4 帧率/行频
工业相机的最大帧率/行频表示单位时间内相机采集图像的速率。
- 通常帧率是相对于面阵工业相机来说的,单位是fps,如181fps,即相机每秒内最多可采集181帧图像。
- 行频是相对于线阵工业相机来说的,单位是kHz,如80kHz,即相机每秒内最多可采集80000行图像数据。
2.5 像素深度
像素深度是指每位像素数据的位数,通常用多少比特位表示。一般,每个像素的比特位数多,表达图像细节的能力强,这个像素的灰阶值更加丰富、分得更细,像素的灰阶深度就更深,但同时数据量也越大,影响系统的图像处理速度,因此也需慎重选择。
2.6 动态范围
动态范围是用来描述每个像素能够分辨出的灰度等级,宽动态范围能够使场景中亮场和暗场部分的细节同时被清晰的记录下来。
动态范围值越大,意味着工业相机可以拍摄物体明暗程度的范围越宽。
2.7 信噪比
工业相机的噪声是指成像过程中不希望被采集到的,实际成像目标之外的信号。
根据欧洲机器视觉协会(EMVA)的EMVA1288标准中定义的相机中的噪声,总体上分为两类:一类是由有效信号带来的散粒噪声,这种噪声对任何相机都是相同的,不可避免;另一类是相机本身固有的与信号无关的噪声,它是由于图像传感器读出电路、相机信号处理与放大电路等带来的噪声,每台相机的固有噪声都不一样。
相机的信噪比定义为图像中信号与噪声的比值(有效信号平均灰度值与噪声均方根的比值),其中信号可以由光强乘以量子效率乘以积分时间来计算,而噪声则指成像过程中所有部分所产生噪声的总和;信噪比越大,则表示混在信号里的杂波越少,图像质量越高,画面越干净,看不到噪波干扰(表现为“颗粒”和“雪花”);若信噪比越小,则画面上可能呈现较多的“颗粒”和“雪花”,影响图像画面质量。
2.8 曝光时间
曝光时间是为了将光投射到照相感光材料的感光面上,快门所要打开的时间;视感光材料的感光度和对感光面上的照度而定;曝光时间长,进光量就越大,适合光线条件较差的情况;曝光时间短则适合光线比较好的情况。
2.9 相机接口
工业相机通常有三个基础的接口,电源接口、数据接口与镜头接口。
- 电源接口:顾名思义,用以相机电源输入接口。
- 数据接口:按照接口标准不同,工业相机常用的数据接口有GigE、Camera Link、USB3.0、CoaXPress等类型。
- 镜头接口:工业相机镜头接口种类很多,常用的一般有C接口、CS接口、F接口、M42接口、M72接口等。
C接口和CS接口是工业相机与镜头联接最常见的国际标准接口,为1英寸-32UN英制螺纹连接口,C型接口和CS型接口的螺纹连接是一样的,区别在于C型接口的后截距为17.5mm,CS型接口的后截距为12.5mm。所以CS型接口的工业相机可以和C口及CS口的镜头连接使用,只是使用C口镜头时需要加一个5mm的接圈;C型接口的工业相机不能用CS口的镜头。
3、工业镜头参数
3.1 焦距
焦距就是从镜头的中心点到胶平面(胶片或CCD)上所形成的清晰影像之间的距离,注意区分相机的焦距与单片凸透镜的焦距是两个概念,因为相机上安装的镜头是多片薄的凸透镜组成,单片凸透镜的焦距是平行光线汇聚到一点,这点到凸透镜中心的距离。焦距的大小决定着视角大小,焦距数值小,视角大,所观察的范围也大;焦距数值大,视角小,观察范围小。
标准镜头的视角约50度左右,这是人单眼在头和眼不转动的情况下所能看到的视角,从标准镜头中观察的感觉与我们平时所见的景物基本相同。
- 焦距的计算方法
f = S × W D F O V f = \frac{S \times WD}{FOV} f=FOVS×WD
s:机器视觉系统图像传感器尺寸(传感器平面某个方向上的长度)
FOV:视场
WD:工作距离
f:镜头焦距
3.2 光圈
光圈是一个用来控制光线通过镜头,进入机身内感光面光量的装置。它通常是在镜头内,通过面积可变的孔径光栅来达到控制镜头通光量。
除了调整进光量之外,光圈还有一个重要的作用:调整画面的景深。用F表示,以镜头焦距f和通光孔径D的比值来衡量,每个镜头上都标有最大F值,例如:8mm/F1.4代表最大孔径D为5.7mm(8/1.4),F值越小,光圈越大,F值越大,光圈越小。最佳光圈一般在f/4-f/8。
3.3 景深
景深是指在被摄物体聚焦清楚后,在物体前后一定距离内,其影像仍然清晰的范围。景深随镜头的光圈值、焦距、拍摄距离而变化,光圈越大,景深越小(浅),光圈越小,景深越大(深)。焦距越长,景深越小,焦距越短,景深越大。距离拍摄物体越近时,景深越小,拍摄距离约远,景深越大。
- 景深的计算方法
前景深 Δ L 1 = F δ L 2 f 2 + F δ L 后景深 Δ L 2 = F δ L 2 f 2 − F δ L 景深 Δ L = Δ L 1 + Δ L 2 = 2 f 2 F δ L 2 f 4 − F 2 δ 2 L 2 F : 镜头的拍摄光圈值 δ : 容许弥散圆直径 L : 对焦距离 f : 焦距 \begin{array} {l} 前景深 \Delta L1 = \frac{F \delta L^2}{f^2 + F \delta L} \\ \\ 后景深 \Delta L2 = \frac{F \delta L^2}{f^2 - F \delta L} \\ \\ 景深 \Delta L = \Delta L1 + \Delta L2 = \frac{2f^2F \delta L^2}{f^4 - F^2 \delta^2 L^2} \\ \\ F:镜头的拍摄光圈值 \\ \delta : 容许弥散圆直径 \\ L:对焦距离 \\ f:焦距 \\ \end{array} 前景深ΔL1=f2+FδLFδL2后景深ΔL2=f2−FδLFδL2景深ΔL=ΔL1+ΔL2=f4−F2δ2L22f2FδL2F:镜头的拍摄光圈值δ:容许弥散圆直径L:对焦距离f:焦距
3.4 镜头分辨率
分辨率代表镜头记录物体细节的能力,是指在成像平面上 1 毫米间距内能分辨开的黑白相间的线条对数,单位是“线对/毫米”( lp/mm,line-pairs/mm ),线对是指黑白相间的两条线,即两个像素点,分辨率越高的成像越清晰。我们常说的显示分辨率是屏幕图像的精密度,指图形所能显示像素有多少。
由于像素和像素之间的间距形成了离散采样。采样定律也叫Shannon采样定律,告诉我们对于频率为f的模拟信号,为了不失真的恢复它,我们至少要用2f的频率来采样。两个相机感光元才能对应黑和白一个线对。
- 像元尺寸
最小能分辨的尺寸是线对数的2倍倒数。最小能分辨的尺寸即像元尺寸,指单个像素的大小或两个像素中心点之间的距离,单位mm或um等,不同规格相机规定单位不同。
例如:镜头为5百万像素、靶面尺寸为1/1.8”,分辨率为200 lp/mm,最小能分辨的尺寸是 1/(200*2)=0.0025mm,即像元尺寸为2.5um。
3.5 工作距离(Workingdistance,WD)
镜头第一个工作面到被测物体距离。
3.6 视野范围(Field of View,FOV)
相机实际拍摄到的区域尺寸,视场角分物方视场角和像方视场角。一般光学设备的使用者关心的是物方视场角。对于大多数光学仪器,视场角的度量都是以成像物的直径作为视场角计算的。如:望远镜、显微镜等。而对于照相机、摄像机类的光学设备,由于其感光面是矩形的,因此常以矩形感光面对角线的成像物直径计算视场角。也有以矩形的长边尺寸计算视场角的。
视场角与焦距的关系:一般情况下,视场角越大,焦距就越短。
3.7 光学放大倍数(Magnification,b)
CCD/FOV,即芯片尺寸除以视野范围。
4、工业相机与镜头选型
数字图像是对成像系统输出的信号进行数字化后的结果,成像系统反映真实场景的性能和质量直接决定整个机器视觉系统的性能。
影响机器视觉成像系统成像质量的因素主要包括:光源(Illumination)、系统分辨率(System Resolution)、像素分辨率(Pixel Resolution)、对比度(Contrast)、景深(Depth of Field,DOF)、投影误差(Perspective Error)和镜头畸变(Lens Distortion)。
而这些因素(参数)却直接或间接地由硬件选型和安装方式决定。如果事先既未确定相机又未确定镜头,则需要先了解项目工作环境对相机安装(工作距离)、要检测的最大范围(视场)、最小特征的尺寸和代表它的像素数的要求,然后根据这些条件来计算应使用何种镜头或相机。
无论何种情况,都是基于成像系统简化模型的参数约束关系和项目需求获取最优搭配的过程。
4.1 相机分辨率的选择
分辨率的选择,主要根据待测物体的尺寸估算出视野大小,再结合精度要求,最后确定需要的工业相机分辨率。
例如:若物体尺寸为50mm,则视野可以估算为50×1.2=60mm,若单个像素的精度要求为0.02mm,则分辨率为50×1.2/0.02=3K
注意:选择相机不一定是分辨率越高就越好,分辨率高带来的图像数据量就大,后期的算法处理就越复杂。
4.2 相机与镜头分辨率的选择
经透镜成的光学图像,本身是一个拥有无穷多个点的模拟信号。但在图像接收器(CCD或CMOS)接收过程中,由于像素和像素之间的间距形成了离散采样。采样定律也叫Shannon采样定律,告诉我们对于频率为f的模拟信号,为了不失真的恢复它,我们至少要用2f的频率来采样。
所以相机分辨率需要等于镜头分辨率的两倍,才能呈现完好的成像质量,如果大于镜头分辨率的两倍,则造成了相机性能的过剩,反之造成了镜头性能的过剩。然而在实际使用中,由于景深的存在,为了使镜头偏离对准面仍然能够成像清晰,因此,在选择镜头时,通常要求镜头分辨率要略高于像元分辨率,这样才能使系统的分辨率达到传感器所限制的最高分辨率。
所以要用相机分辨率等于镜头分辨率的两倍实际上是要求相机和镜头的像元尺寸相等,而不是像素相等。例如500万像素的相机不一定需要配备500万像素的镜头,而是需要计算像元尺寸,然后进行比较。
一般情况下需要确定工业相机和镜头的分辨率时,镜头的靶面尺寸与相机的靶面尺寸没有完全匹配,此时计算镜头的像元尺寸时应该使用相机的靶面尺寸进行计算从而保证相机的分辨率是镜头分辨率的两倍。
例如1/1.8”靶面C 口5 百万像素工业镜头的镜头分辨率为:200lp/mm。若用于靶面尺寸1/2.9”的工业相机,对应的像素为1987X1490,大于相机的分辨率为1440X1080,这样的工业镜头可以用于工业相机,只是造成镜头的浪费。
4.3 镜头其他参数的选择
影响镜头成像的因素包括:焦距、最大像面、视场/视场角、渐晕、景深等方面。
- 焦距是指无限远处目标在镜头的像方所成像位置到像方主面的距离。焦距体现了镜头的基本特性:即在不同物距上,目标的成像位置和成像大小由焦距决定。市面上常见的镜头焦距大小包括6mm、8mm、12.5mm、25mm以及50mm等。对机器视觉成像系统来说,工作距离就是成像系统中所说的物距。由于视觉成像系统模型的假定条件是工作距离相对于镜头焦距为无限远,因此一般在镜头的产品参数中都会说明其最小工作距离。当相机在小于该最小工作距离的环境下工作时,就会出现图像失真,影响机器视觉系统的可靠性。
- 最大像面是指镜头能支持的最大清晰成像范围(常用可观测范围的直径表示),超出这个范围所成的像对比度会降低而且会变得模糊不清。最大像面是由镜头本身的特性决定的,它的大小也限定了镜头可支持的视场的大小。
- 镜头的视场就是镜头最大像面所对应的观测区域。视场角是视场的另一种表述方法,类似人眼“视角"的意义。视场角等于最大像面对应的目标张角。通常,在远距离成像系统中,例如望远镜、航拍镜头等场合,镜头的成像范围均用视场角来衡量。而近距离成像中,常用实际物面的直径(即幅面)来表示。
t a n ω = S / 2 f S 为相机传感器在二维平面上某个维度的大小; f : 焦距 2 ω : 视场角 tan \omega = \frac{S/2}{f} \\ \\ \begin{aligned} &S为相机传感器在二维平面上某个维度的大小;\\ &f:焦距 \\ &2\omega :视场角 \end{aligned} tanω=fS/2S为相机传感器在二维平面上某个维度的大小;f:焦距2ω:视场角
由于相机传感器尺寸固定,因此视场角也可以被看作焦距的另一种表达。因此在生活中,人们常按照镜头的视场角对其进行分类,如望远镜(6-12°)、远距摄像镜头(120-46°) .标准镜头(46-65°)、广角镜头(650~100°)及超广角镜头( >100°)等。
一般来说,镜头的失真会随着焦距的减小(或视场角的增大)而增大,因而在构建机器视觉系统(特别是精确测量系统)时,一般都不会选择焦距小于8mm或视场角很大的镜头。
鉴于镜头能清楚成像的范围受到最大像面的限制,因此在为相机选配镜头时,要特别注意相机传感器与镜头可支持最大传感器之间的关系。
一般来说,必须确保所选镜头可支持的最大传感器尺寸大于或等于相机的传感器尺寸。这样做的另一个主要原因是为了避免渐晕(Vignetting)现象的发生。
- 普通镜头和远心镜头
普通镜头与人眼一样,观测物体时都存在"近大远小”的现象,如下图 (a)所示。也就是说,虽然物体在景深范围内可以清晰成像,但是其成像却随着物距增大而缩小。如果被测目标不在同一物面上(如有厚度的物体),则会导致图像中的物体变形。另一方面,相机传感器的感光面通常并不容易被精确调整到与镜头的像平面重合(调焦不准),由此也会产生误差。为此,人们设计了远心镜头。
远心镜头(telecentric lens)有较大的景深,且可以保证景深范围内任何物距都有一致的图像放大率。多数机器视觉在测量、缺陷检测或者定位等应用上,对物体成像的放大倍率没有严格要求,一般只要选用畸变较小的镜头,就可以满足要求。但是,当机器视觉系统需要检测三维目标(或检测目标不完全在同一物面上)时,就需要使用远心镜头。
4.4 相机其他参数的选择
抛开镜头差别,拍照画质与传感器大小成正比。
- CCD/CMOS
CMOS图像传感器的光电转换原理与CCD图像传感器相同,二者的主要差异在于电荷的转移方式上。CCD图像传感器中的电荷会被逐行转移到水平移位寄存器,经放大器放大后输出。由于电荷是从寄存器中逐位连续输出的,因此放大后输出的信号为模拟信号。在CMOS传感器中,每个光敏元的电荷都会立即被与之邻接的一个放大器放大,再以类似内存寻址的方式输出,如下图所示:
因此CMOS芯片输出的是离散的数字信号,之所以采用两种不同的电荷传递方式,是因为CCD是在半导体单晶硅材料上集成的,而CMOS则是在金属氧化物半导体材料上集成的,工艺上的不同使得CCD能保证电荷在转移时不会失真,而CMOS则会使电荷在传送距离较长时产生噪声,因此使用CMOS时,必须先对信号放大再整合输出。
5、线激光器选型
选择机器视觉用线激光器需要考虑的因素有:
- 颜色/波段
- 功率要求
- 调制模式要求
- 聚焦位置(F)
- 聚焦位置下的激光线长度(L)
- 最远工作距离(D2)
- 最近工作距离(D1)
- 激光图案
- 是否需要激光亮度可调
- 需要在整个景深范围内光线的粗细一致性好还是需要,在某处最细就好
相关文章:

工业相机与镜头参数及选型
文章目录 1、相机成像系统模型1.1 视场1.2 成像简化模型 2、工业相机参数2.1 分辨率2.2 靶面尺寸2.3 像元尺寸2.4 帧率/行频2.5 像素深度2.6 动态范围2.7 信噪比2.8 曝光时间2.9 相机接口 3、工业镜头参数3.1 焦距3.2 光圈3.3 景深3.4 镜头分辨率3.5 工作距离(Worki…...

VSCode使用Makefile Tools插件开发C/C++程序
提起Makefile,可能有人会觉得它已经过时了,毕竟现在有比它更好的工具,比如CMake,XMake,Meson等等,但是在Linux下很多C/C源码都是直接或者间接使用Makefile文件来编译项目的,可以说Makefile是基石…...
用C语言验证“三门定理”
#include <stdio.h> #include <stdbool.h> #include <stdlib.h> #include <time.h>// 一个源自博弈论的数学游戏问题: // 参赛者会看见三扇门, // 其中一扇门的里面有一辆汽车, // 选中里面是汽车的那扇门࿰…...

计算机网络-分层结构,协议,接口,服务
文章目录 总览为什么要分层怎样分层正式认识分层概念小结 总览 为什么要分层 发送文件前要做的准备工作很多 把这个准备工作分层小问题解决,也就分层解决 怎样分层 每层相互独立,每层做的工作不同 界面自然清晰,层与层之间的接口能够体现…...
前端开发 2: CSS
在前端开发中,CSS(层叠样式表)是一种用于描述网页样式的语言。它控制着网页的布局、颜色、字体等外观效果。在本篇博客中,我将为你介绍 CSS 的基础知识和常用技巧,帮助你更好地掌握前端开发中的样式设计。 CSS 基础知…...

嵌入式-Stm32-江科大基于标准库的GPIO4个小实验
文章目录 一 、硬件介绍二 、实验:LED闪烁、LED流水灯、蜂鸣器提示2.1 需求1:面包板上的LED以1s为周期进行闪烁。亮0.5s,灭0.5s.....2.2 需求2: 8个LED实现流水灯2.3 需求3:蜂鸣器不断地发出滴滴、滴滴.....的提示音。蜂鸣器低电平触发。 三、…...

HackTheBox - Medium - Linux - Noter
Noter Noter 是一种中型 Linux 机器,其特点是利用了 Python Flask 应用程序,该应用程序使用易受远程代码执行影响的“节点”模块。由于“MySQL”守护进程以用户“root”身份运行,因此可以通过利用“MySQL”的用户定义函数来利用它来获得RCE并…...

Uniapp多选Popup(弹出层)
uniapp中多选组件很少,故个人简单开发了一个,可简单使用,也可根据个人需求稍微改进 支持的功能 单选多选(默认)限制选择数量默认选中禁用选项 属性说明 属性默认值说明singlefalsetrue为开启单选,否则为…...

什么是网络安全?网络安全概况
网络安全涉及保护我们的计算机网络、设备和数据免受未经授权的访问或破坏。 这个领域包括多种技术、过程和控制措施,旨在保护网络、设备和数据免受攻击、损害或未授权访问。网络安全涉及多个方面,包括但不限于信息安全、应用程序安全、操作系统安全等 …...

c语言小游戏之扫雷
目录 一:游戏设计理念及思路 二:初步规划的游戏界面 三:开始扫雷游戏的实现 注:1.创建三个文件,test.c用来测试整个游戏的运行,game.c用来实现扫雷游戏的主体,game.h用来函数声明和包含头文…...

如何本地安装Python Flask并结合内网穿透实现远程开发
💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

在线App封装技术:HTML5的新生命
HTML5封装的魅力所在HTML5带来了丰富的多媒体功能、地理位置服务、离线存储等特性,使得Web应用的体验更加接近原生App。封装HTML5到App中,可以大大缩短开发周期,降低开发成本,并且一次编写,多平台运行,极大…...

Spring Boot 4.0:构建云原生Java应用的前沿工具
目录 前言 Spring Boot简介 Spring Boot 的新特性 1. 支持JDK 17 2. 集成云原生组件 3. 响应式编程支持 4. 更强大的安全性 5. 更简化的配置 Spring Boot 的应用场景 1. 云原生应用开发 2. 响应式应用程序 3. 安全性要求高的应用 4. JDK 17的应用 总结 作…...

Debian系统写Mysql时中文出现乱码无法定入的问题解决方案
原因是操作系统可能精简安装,没有GBK字符集,只有UTF8在转换或使用的时候有问题。 使用locale -a查看系统支持的字符集。正常的比较全的字符集的操作系统如下: 有问题的操作系统字符集如下: 解决方案: 步骤1&#…...

CPMS靶场练习
关键:找到文件上传点,分析对方验证的手段 首先查看前端发现没有任何上传的位置,找到网站的后台,通过弱口令admin 123456可以进入 通过查看网站内容发现只有文章列表可以进行文件上传;有两个图片上传点 图片验证很严格…...

CTFhub-bak文件
CTFhub-Web-信息泄露-备份文件下载-bak文件 题目信息 解题过程 看到提示说和index.php有关,在url后面加index.php.bak,跳转到http://challenge-7a4da2076cfabae6.sandbox.ctfhub.com:10800/index.php.bak网址,即: 跳转到下载页…...

本地部署轻量级web开发框架Flask并实现无公网ip远程访问开发界面
文章目录 1. 安装部署Flask2. 安装Cpolar内网穿透3. 配置Flask的web界面公网访问地址4. 公网远程访问Flask的web界面 本篇文章主要讲解如何在本地安装Flask,以及如何将其web界面发布到公网进行远程访问。 Flask是目前十分流行的web框架,采用Python编程语…...
面试题-MySQL如何定位慢查询
慢查询出现的情况就这些:聚合查询、多表查询、表数据量过大查询、深度分页查询。 表象:页面加载过慢、接口压测响应时间过长(超过1S)。 假如你的业务接口就是比较慢,你怎么知道是SQL的问题呢?就算是SQL的…...
【C++PCL】点云处理K-Means点云分割
目录 1.原理介绍 2.代码效果 3.源码展示 4.参数调试 5.注意事项...

代码随想录算法训练DAY25|回溯2
算法训练DAY25|回溯2 216.组合总和III 力扣题目链接 找出所有相加之和为 n 的 k 个数的组合。组合中只允许含有 1 - 9 的正整数,并且每种组合中不存在重复的数字。 说明: 所有数字都是正整数。 解集不能包含重复的组合。 示例 1: 输入: k 3, n …...
React Native 开发环境搭建(全平台详解)
React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
Caliper 负载(Workload)详细解析
Caliper 负载(Workload)详细解析 负载(Workload)是 Caliper 性能测试的核心部分,它定义了测试期间要执行的具体合约调用行为和交易模式。下面我将全面深入地讲解负载的各个方面。 一、负载模块基本结构 一个典型的负载模块(如 workload.js)包含以下基本结构: use strict;/…...

手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
Python 训练营打卡 Day 47
注意力热力图可视化 在day 46代码的基础上,对比不同卷积层热力图可视化的结果 import torch import torch.nn as nn import torch.optim as optim from torchvision import datasets, transforms from torch.utils.data import DataLoader import matplotlib.pypl…...

spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...