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

AprilTags论文翻译

AprilTag三篇论文的简单翻译.2011,2016,2019GitHub - AprilRobotics/apriltag: AprilTag is a visual fiducial system popular for robotics research.

 

AprilTag:一个健壮而灵活的视觉基准系统

摘要-虽然使用自然出现的特征是机器感知的重点,但人工特征在创建可控的实验、ground truthing和简单的系统开发中扮演重要的角色,这些方面感知并不是主要对象。

我们描述了一种新的视觉基准系统,该系统使用2D条形码样式标记,允许从单幅图像进行全6自由度的特征定位。我们的系统在以前的系统基础上进行了改进,包含了一个快速和健壮的线检测系统,一个更强的数字编码系统,以及对遮挡、弯曲和镜头失真更强的鲁棒性。虽然在概念上与ARTag系统相似,但我们的方法是完全开放的,算法也有详细的文档。

一、简介

视觉基准是人造地标,旨在易于识别和区分。尽管与其他2D条形码系统(例如QR码[1])相关,但它们具有显着的目标和应用。对于二维码,人们通常需要将相机对准标签,并以相当高的分辨率拍摄它,获得数百个字节,比如一个网址。相比之下,视觉基准的信息负载很小(可能是12位),但设计成即使在分辨率很低、光线不均匀、奇怪的旋转或隐藏在杂乱图像的角落时也能自动检测和定位。考虑到远距离的检测,视觉基准由更少的数据单元组成:QR标签的对齐标记约包含268像素(不包括所需的标题或有效载荷),而本文描述的视觉基准约为49到100像素,包括有效载荷。

不像二维条码系统,条码在图像中的位置是不重要的,视觉基准系统提供一个标签的相机相对位置和方向。基准系统也被设计用来检测单一图像中的多个标记。

视觉基准系统可能以其在增强现实中的应用而闻名,这刺激了几个流行系统的发展,包括ARToolkit[2]和ARTag[3]。现实世界的物体可以用视觉基准增强,允许虚拟生成的图像叠加。同样,视觉基准可以用于基本的动作捕捉[4]。

视觉基准系统已经被用于改善人机交互,允许人类去通过一个合适的卡片发送指令(例如跟随我、等在这)给机器人[5],平面标签也被用于生成覆盖机器人计划和任务分配到头戴显示器上的用户界面[6]。

机器人系统的性能评估和基准已成为研究界的中心问题,视觉基准在该领域特别有用。例如,基准可用于生成机器人轨迹和闭环控制[7]的ground truth,通常,人工特征可以在控制算法[8]下评价同步定位与建图(SLAM)算法。机器人的应用已经导致了附加标签检测系统的发展[9][10]。

从标记检测的角度(图像中的哪些像素对应一个标记?)和从容错数据编码的角度(是哪个标记?)来看,设计健壮的基准同时最小化所需的尺寸都是一个挑战。

在本文中,我们描述了一种新的视觉基准系统,该系统可显着改善先前系统的性能。本文的核心贡献是:

我们描述了一个鲁棒视觉检测系统的方法,提出了一种基于局部梯度的基于图的图像分割算法,该算法可以精确估计直线。我们还描述了一种可以处理重大遮挡的四边形提取方法。

我们证明,我们的检测系统比以往的系统提供了明显更好的定位精度。

我们描述了一种新的编码系统,该系统解决了二维条形码系统特有的问题:旋转的鲁棒性,以及自然图像产生的假阳性的鲁棒性。实验结果表明,与之前的工作相比,我们的编码系统提供了显著的理论和现实效益。

我们在一组基准上指定并提供结果,这些基准将来可以更好地比较基准系统。

与以前的方法(包括ARTag和Studierstube Tracker)相比,我们的实现是在开源许可下发布的,它的算法和实现都有很好的文档记录。这些系统的封闭性对我们的实验评估是一个挑战。在本文的比较中,我们使用了有限的公开信息,以便尽可能多的进行客观的比较。另一方面,ARToolkitPlus是开源的,所以我们能够进行更详细的比较。除了代码之外,我们还提供了我们的评估代码,以便将来的作者更容易地执行比较。

在下一节中,我们将回顾相关工作。我们将在以下两节中描述我们的方法:第3节中的标签检测器和第4节中的编码系统。在第5节中,我们将对我们的方法进行实验评估,并将其与之前的算法进行比较。

二、相关工作

ARToolkit[11]是最早的标签跟踪系统之一,针对的是人工现实应用。和接下来的系统一样,它的标签包含一个被黑色边框包围的方形有效载荷。然而,它的不同之处在于它的有效载荷不是直接用二进制编码的,相反,它使用了拉丁字符A等符号。标签解码时,标签的有效载荷(高分辨率采样)与已知标签的数据库相关联,并将最佳相关性标签报告给用户。这种方法的一个主要缺点是与解码标记相关的计算成本,因为每个模板都需要一个独立的、缓慢的相关操作。第二个缺点是很难生成彼此近似正交的模板。

ARToolkit使用的标签检测方案基于用户指定的阈值对输入图像简单二值化。该方案速度很快,但对光照变化的鲁棒性较差。一般来说,ARToolkit的检测甚至不能处理标签边界的中等遮挡情况。

ARTag[3]提供了改进的检测和编码方案。和我们自己的方法一样,检测机制是基于图像梯度的,这使得它对光照的变化具有鲁棒性。虽然检测算法的细节没有公开,但ARTag的检测机制能够检测出边缘被部分遮挡的标签。ARTag还提供了第一个基于前向矫正的编码系统,这使得标签更容易生成,更快地相互关联,并在标签之间提供了更好的正交性。

ARTag的性能启发了ARToolkit的几项改进,它们演化为ARToolkitPlus [2],  最后是StudierStube跟踪器[12],这些版本引入了像ARTag中使用的那些数字编码有效载荷。尽管是后期的工作,我们的实验表明,这些编码系统的性能不如ARTag所使用的,反过来,ARTag的性能被我们的编码系统超越。

除了单色标签,其他编码系统也已开发出来。例如,颜色信息被用来增加可编码[13]、[14]的信息量。反向反射的标签[15]也被使用。Bokode[16]使用了一种特别有趣的方法,它利用散焦效应来检测极小的标签,方法是故意使相机散焦。

除了二维条形码,人们还开发出了其他一些人工地标。头顶摄像机已被用于跟踪配备有闪烁led的机器人[17]。相比之下,北极星系统把视觉基准放在天花板上。二维平面系统,就像本文中描述的那样,与基于led的系统相比,有两个主要优势:目标可以在标准打印机上廉价打印,并且不需要多个led就可以提供6自由度的位置估计。

三、检测器

我们的系统由两个主要部分组成:标签检测器和编码系统。在本节中,我们将描述检测器,其工作是估计图像中可能的标签的位置。从理论上讲,检测器试图寻找内部比外部暗的四边区域(方形)。标签本身有黑色和白色的边界以方便这一点(见图2)。

检测过程由几个不同的阶段组成,在下面的小节中描述,并使用图2所示的示例进行说明。

请注意,四边形检测器的假阴性率(是标签但是没有检测出的)非常低,因此具有很高的假阳性(不是标签但是检测为标签)率。我们依靠编码系统(在下一节中描述)将这种假阳性率降低为可用的水平。

A.线段检测

我们的方法首先检测图像中的线条,和ARtag检测器的方法类似,计算每个像素的梯度方向和大小(见图3),并将像素聚类成具有相似梯度和幅值的组件。聚类算法类似于Felzenszwalb[19]的基于图的方法:创建一个图,其中每个节点代表一个像素。边缘在相邻像素之间添加,边缘权重等于梯度方向上的像素差。然后对这些边进行排序和处理,以增加边的权重:对于每条边,我们测试像素所属的连接组件是否应该连接在一起。给定一个分量n,我们将梯度方向的范围表示为D(n),将幅度的范围表示为M(n)。换句话说,D(n)和M(n)分别是表示梯度方向和大小的最大值和最小值之差的标量值。在D()的情况下,必须小心处理2π绕取。然而,由于有用边的跨度远小于π度,这是很简单的。给定两个分量n和m,如果满足下面两个条件,我们将它们合并在一起

3.早期处理步骤。标签检测算法首先计算每个像素的梯度,计算它们的大小(第一)和方向(第二)。采用基于图的方法,将具有相似梯度方向和幅度的像素聚类为分量(第三)。使用加权最小二乘,然后将线段拟合到每个组件(第四个)的像素。线段的方向是由梯度方向决定的,所以线段的左边是暗的,右边是亮的。线的方向通过在中点处的短的垂直凹槽来显示;注意,这些凹槽总是指向较浅的区域

这些条件是从[19]改编而来的,可以内在地理解:D()和M()的值较小,表示组件内部变化很小。如果两个簇的结合和单独取来的簇差不多一致,它们就可以结合在一起。通过KD和KM参数,允许组分内部变化适度增加,但随着组分变大,这种变化会迅速缩小。在早期迭代期间,K参数基本上允许每个组件学习其簇内变化。在我们的实验中,我们使用KD = 100和KM = 1200,尽管算法在较宽的值范围内工作良好。

出于性能原因,边缘权重被量化并存储为定点数。这允许边使用线性时间计数排序[20]。结合查找算法[20],将梯度方向和幅值的上下界存储在以每个分量的代表成员为索引的简单数组中,可以有效地进行实际的合并操作。

这种基于梯度的聚类方法对图像中的噪声非常敏感:即使是少量的噪声也会导致局部梯度方向的变化,抑制成分的增长。解决这个问题的方法是对[19],[21]图像进行低通滤波。不像其他问题域,这种过滤会模糊图像中的有用信息,标签的边缘本质上是大规模的特征(特别是与数据字段相比),因此这种滤波不会导致信息丢失。我们建议σ = 0.8。

一旦聚类操作完成,使用传统的最小二乘程序将线段拟合到每个连接的组件,并根据其梯度幅度对每个点进行加权(见图3)。我们调整每个线段,使线的暗面在它的左边,而亮面在它的右边。在处理的下一个阶段,这允许我们在每个四边形上执行缠绕规则。

分割算法是我们的检测方案中最慢的阶段。作为一种选择,这种分割可以在一半的图像分辨率上执行,以4倍的速度改进。子采样操作可以与推荐的低通滤波器有效结合。这种优化的结果是适度减少检测范围,因为非常小的四边形可能不再被检测到。

B.四边形检测

此时,图像中一组有向线段已经被计算出来了。下一个任务是找到形成四边形状的线段序列,即一个四边形。面临的挑战是在线段分段中尽可能稳健地做到这一点。我们的方法基于深度为4的递归深度优先搜索:搜索树的每一层都向四边形添加一条边。在深度1处,我们考虑所有线段。在深度2到4,我们考虑所有线段中开始的位置足够接近前一线段结束的位置,并且服从逆时针绕线顺序。对遮挡和分割错误的鲁棒性是通过调整足够接近的阈值来处理的:通过使阈值大,可以处理边缘周围的显著间隙。足够接近的阈值是直线长度的两倍加上额外的5个像素。这是一个较大的阈值,导致低的假阴性率,但也导致高的假阳性率。

我们填充一个二维查找表,以加速对开始于空间中某个点附近的线段的查询。通过这种优化,以及早期拒绝不服从缠绕规则的可判断四边形,或使用一个线段不止一次的四边形,四边形检测算法只占总计算需求的一小部分。

一旦发现四条线,就会创建一个候选的四边形检测器,这个四边形的角是构成它的几条线的交点。因为这些线是用来自许多像素的数据来拟合的,所以这些角的估计精确到一个像素的一小部分。

C.单应和外参估计

我们计算3x3的单应矩阵,该矩阵将标签坐标系的2D齐次坐标([0,0,1]T是标签的中心点,并且标签在x和y方向上扩展一个单位)投影到2D图像坐标系。使用直接线性变换算法[22]计算单应矩阵,请注意,由于单应性映射在齐次坐标中投影点,所以只能按比例定义它。

标签位置和方向的计算需要其他信息:相机的焦距和标签的物理大小。3 x 3单应矩阵(由DLT计算)可以写成3x4摄像机投影矩阵P(我们假设它是已知的)和4x3截断的外参矩阵E的乘积。外参矩阵通常是4x4的,但是标签上的每个位置在标签的坐标系中都是z = 0。因此,我们可以将每个标记坐标重写为z隐式为零的二维齐次点,并删除外参矩阵的第三列,形成截断的外参矩阵。我们将P的旋转分量表示为Rij,将平移分量表示为Tk。我们也将未知的比例因子表示为s:

注意我们不能直接解出E,因为P是秩亏的。我们可以展开等式2的右边,把每个hij的表达式写成联立方程的集合

对于Rij和Tk的元素,除了未知的比例因子s,这些都很容易求解。然而,由于旋转矩阵的列必须都是单位大小,我们可以限制s的大小. 我们有旋转矩阵的两列,所以我们计算s作为它们大小的几何平均值。s的符号可以通过要求标签出现在摄像机前面来恢复,即,Tz < 0。旋转矩阵的第三列可以通过计算两个已知列的叉乘来恢复,因为旋转矩阵的列必须是标准正交的。

DLT过程和上面的归一化过程不能保证旋转矩阵是严格标准正交的。为了纠正这个问题,我们计算了R的极坐标分解位置,得到一个适当的旋转矩阵,同时最小化误差[23]的Frobenius矩阵范数。

四、有效载荷解码

最后的任务是从有效载荷字段读取位。为此,我们计算每个位域的标记相对坐标,使用单应性将其转换为图像坐标,然后对结果像素进行阈值处理。为了适应光照(光照不仅可以因标签而变化,也可以在标签内变化),我们使用了一个空间变化的阈值。

具体地说,我们建立了黑色像素的强度空间变化模型和白色像素的强度的第二个模型。我们使用标签的边界,其中包含已知的白色和黑色像素的例子,来学习这个模型(参见图4)。我们使用以下强度模型:

该模型具有四个参数,可轻松使用最小二乘回归计算。我们构建了两个这样的型号,一种用于黑色,另一个用于白色。然后,解码数据位时使用的阈值只是黑白模型预测强度值的平均值。

4.四边形检测和采样。在图像中检测到四个四边形(其中包含两个标记)。第三个检测到的四边形对应于前景标签的三个边缘加上纸张的边缘(见图2)。第四个四边形在较大标签的一个有效载荷位周围检测到。这两个无关的检测最终被丢弃,因为它们的有效负载无效。白点对应标签边界周围的样本,用于拟合白色像素强度的线性模型;模型同样适用于黑色像素。这两个模型用于阈值数据有效负载位,如黄色圆点所示。

五、编码系统

一旦数据有效载荷从一个四边形中解码,就由编码系统来决定它是否有效。编码系统的目标是:最大化可区分代码的数量;最大限度地提高可检测或纠正的错误位数量;最小化假阳性/标签混乱率;最小化每个标签的总比特数(也就是标签的大小)

这些目标经常是冲突的,因此给定的编码方法代表了一种权衡。在本节中,我们将描述一种基于词汇码的新编码系统,它比以前的方法具有显著的优点。我们的过程可以生成具有各种属性的字典代码,允许用户使用最适合他们需要的编码。

A.方法论

我们提出了修改词典[24]的使用。经典词典通过两个数量进行了参数化:每个代码字中的位数n,和任何两个代码字之间的最小汉明距离d。词典可以纠正⌊(d -1)/2⌋位误差并检测d/2位误差。为了方便起见,我们将表示36位编码,最小汉明距离为10(例如)为36h10编码。Lexicodes的名称来源于用于启发式的生成有效码字:候选码字按字典顺序考虑(从最小到最大),当新的码字与之前添加到码本的每个码字至少有一段距离d时,就向码本添加新的码字。虽然非常简单,但该方案通常非常接近最优[25]。

在视觉基准的情况下,编码方案必须对旋转具有鲁棒性。换句话说,当标签旋转90度、180度或270度时,它与其他代码之间的汉明距离仍然为d,这一点非常关键。标准的词典码生成算法不保证这个属性。然而,标准生成算法可以简单地扩展以支持这一点:当测试一个新的候选码字时,我们可以简单地确保所有四次旋转都具有所需的最小汉明距离。lexicode算法可以很容易地扩展以合并额外的约束,这是我们方法的一个优点。

有些码字,尽管满足汉明距离约束,却是糟糕的选择。例如,一个由全0组成的码字将导致一个看起来像单个黑色方块的标签。这种简单的几何图案通常出现在自然场景中,导致假阳性。例如,ARTag编码系统显式禁止两个代码,因为它们太可能偶然出现。

我们不再手动识别有问题的标签,而是通过拒绝产生简单几何图案的候选码字来进一步修改词典码生成算法。我们的指标是基于生成标签的2D模式所需的矩形数量。例如,实心图案仅需要一个矩形,而黑白黑色条纹则需要两个矩形(一个大的黑色矩形,较小的白色矩形绘制第二个)。我们的假设得到了本文稍后的实验结果的支持,它是具有高复杂性(需要许多矩形的标签模式)在自然界中的频率较低,从而假阳性率较低。

最后,我们通过对词典码生成算法再做一次修改,从经验上观察较低的假阳性得分。我们没有按照(0,1,2,3,…)的顺序测试码字,而是考虑(b, b+1p, b+2p, b+3p,…),其中b是一个任意数,p是一个大素数,每步保留最低n位。从本质上讲,这种方法生成的标签在每个位位置上都有较大的熵;另一方面,字典顺序有利于小值代码。这种方法的缺点是创建的可区分的代码较少:字典顺序往往将码字包装得相当密集,而更随机的顺序导致码字包装效率较低。

总而言之,我们使用一个词典系统,该系统可以为任何任意标签大小(例如3x3,4x4,5x5,6x6)和最小汉明距离生成编码。我们的方法明确保证了每个标签的所有四个旋转的最小汉明距离,并消除了低几何复杂性的标签。计算标签可能是一项昂贵的操作,但可以离线完成。小标记(5x5)可以很容易地在几秒或几分钟内计算,但大标记(6x6)可能需要几天的CPU时间。我们的软件已经计算并分发了许多有用的编码族;大多数用户不需要生成自己的编码族。

B. 误差校正分析

理论上的假阳性率很容易估计。假设识别了一个假四元组,并且位模式是随机的。假阳性的概率是被接受为有效标记的码字与可能的码字总数(2n)的比值。更激进的错误矫正会增加这个概率,因为它增加了被接受的码字的数量。在下面的36H10和36H15代码中说明了他不可避免的错误率的增加:

当然,36h15编码的更好性能是有代价的:与36h10的2221可区分码字相比,36h15编码只有27个可区分码字。我们的编码方案明显强于先前的方案,包括ARTag使用的方案和ARToolkitPlus使用的两种系统:我们的编码系统实现了所有码字对之间更大的最小汉明距离,同时编码更多的可区分id。图5和下表说明了最小汉明距离的改进

为了对可能损坏的码字进行解码,计算码字与码书中每个有效码字之间的汉明距离。如果最佳匹配的汉明距离小于用户指定的阈值,则报告检测结果。通过指定这个阈值,用户能够控制假阳性和假阴性之间的权衡。

我们的方法的一个缺点是解码过程在码本的大小上需要线性时间,因为必须考虑每个有效码字。然而,该系数非常小,与其他图像处理步骤相比,计算复杂度可以忽略不计。

对于一个给定的编码方案,较大的标签(即36位和25位)比较小的标签具有更好的编码性能,尽管这是有代价的。在所有其他条件相同的情况下,一个给定的相机可以读取36位标签的范围将小于同一相机可以读取16位或25位标签的范围。然而,由于4像素的边界开销,较小的标签在范围上的好处是相当有限的;使用16位标记而不是36位标记只能提高25%的检测范围。因此,只有在对范围最敏感的应用程序中,更小的标记才是有利的。

6.实验结果

A.实证实验

我们希望回答的一个关键问题是,我们对假阳性率的分析预测是否适用于真实世界的图像。为了回答这个问题,我们使用了一个标准的来自标签数据集的图像语料库[26],包含了180,829张来自各种各样的室内和室外环境的图片。由于这些图像都不包含我们的标签,我们可以通过使用这些图像来测量编码系统的假阳性率。

复杂度启发式的评估:我们首先希望评估我们的假设,即通过引入几何复杂度启发式来拒绝候选码字可以降低假阳性率。为此,我们生成了25h9家族的十个变体,其最小复杂度从1到10。在图6中,给出了每种复杂性的假阳性率,作为校正的最大误码数的函数。还显示了基于数据有效载荷是随机分布的假设的理论假阳性率。

图6. 经验性假阳性与标签复杂性的对比。我们的理论错误率假设所有码字在现实环境中偶然出现的可能性是相等的。我们的假设是,现实环境偏向于具有较低矩形覆盖复杂度的代码,通过选择具有较高矩形覆盖复杂度的码字,我们可以降低假阳性率。上面的图表验证了这一假设,它显示了LabelMe数据集(实线)中矩形覆盖复杂度从c=2到c=10的经验假阳性率。在c=9和c=10的复杂度下,假阳性率低于悲观模型预测的真实载荷是随机分布的。

与其他编码方案的比较:接下来,我们将我们的编码系统的假阳性率与ARToolkitPlus和ARTag所使用的系统进行比较。

使用相同的真实世界图像数据集,我们绘制了图7中五个代码的经验假阳性率。ARToolkitPlus的BCH编码方案的假阳性率最高,其次是ARTag。我们的36h10编码的最小复杂度为10,比这两个系统的性能都好。这是本文的核心结果。

图中显示了另外两种方案的数据:ARTP- Simple的性能与我们的36h10编码大致相同,但因为它的标签族有四分之一的可区分标签,因此它的假阳性率相应较低。为了便于比较,我们还包括了只有27个可区分码字的36h15族的假阳性率。不出所料,它的假阳性率极低。

B.定位精度

为了评估探测器的定位精度,我们使用射线示踪器生成已知ground truth的图像(示例见图8)。标签的真实位置和方向随机变化,并与检测到的位置进行比较。用针孔透镜和400像素的焦距生成的图像分辨率为400x400。

图8.示例合成图像。我们生成了射线追踪图像,以便为我们的评估创建真实的地面数据集。在这个例子中,标签距离相机10m,它的法向量指向距离相机30.3度的地方

定位精度的主要因素是目标的大小,该目标受标签的距离和方向影响。为了解耦这些因素,我们进行了两个实验。第一个实验是在固定距离的同时测量目标的定位精度。关键参数是目标法向量金额相机之间的夹角φ。当φ为0时,目标直接朝向目标;当φ接近π/2时,目标旋转出视线,我们预计性能会降低。我们根据定位精度和检测率来衡量性能。在图9中,我们可以看到我们的检测器明显优于ARToolkitPlus检测器:不仅方向和距离估计更准确,而且它可以在φ的更大范围内检测标签。

补充实验是保持φ = 0,并改变距离。我们预计,随着距离的增加,准确度会下降。在图10中,我们可以看到我们的检测器在50米范围内工作可靠,而ARToolkitPlus检测器的检出率在25米左右下降到50%以下。此外,我们的探测器提供了更精确的定位结果。

自然,由于噪声、光照变化和其他非理想情况(如镜头失真或标签非平面性),系统的实际性能将低于这些合成实验。尽管如此,我们系统的实际性能仍然非常好。

虽然我们的方法通常比ARToolkitPlus使用的方法在计算上更昂贵,但我们的Java实现在VGA分辨率图像(Intel Core2 CPU在2.6GHz)上以交互速率(30帧/秒)运行。由于基于图的聚类,更高的分辨率显著影响运行时。我们希望通过使用SIMD优化和正在进行的C端口中的加速图像处理库来显著提高速度。

7.结论

我们描述了一种视觉基准系统,它在以往方法的基础上有显著的改进。我们描述了一种新的边缘检测方法,使用基于图的聚类方法和一个编码系统,明显比以往的系统更强壮。还描述了一组基准,我们希望这将使未来评估其他方法更容易。与其他系统(除了ARToolkit之外)相比,我们的实现是完全开放的。我们的源代码和基准测试软件是免费的:APRIL Laboratory APRIL Laboratory : Autonomy * Perception * Robotics * Interfaces * Learning

AprilTag 2: 高效和健壮的基准检测

摘要-AprilTags和其他被动基准标记需要专门的算法来检测自然场景中其他特征中的标记。视觉处理步骤通常支配着标记检测管道的计算时间,因此即使是标记检测方面的微小改进也可以转化为更快的标记检测系统。我们将从实现和支持AprilTag系统中获得的经验教训整合到这个改进的系统中。

这项工作描述了AprilTag 2,一个完全重新设计的标记检测器,与原始的AprilTag系统相比,它提高了鲁棒性和效率。标签编码方案不变,保持编码系统固有的对假阳性的鲁棒性。新的检测器提高了性能,提高了检出率,减少了误报,减少了计算时间。改进的小图像性能允许使用抽取输入图像,从而显著提高检测速度。

1.简介

基准是为自动检测而设计的人工视觉特征,通常带有独特的有效载荷,以使它们彼此区别开来。尽管这些类型的基准最初是由增强现实应用[1]、[2]开发和普及的,但它们后来已被机器人社区广泛采用。它们的用途从ground truth到物体检测和跟踪,它们可以作为一种简化的假设来代替更复杂的感知。

基准的一些关键属性使它们在机器人应用中对姿态估计或目标跟踪非常有用(图1)。它们的唯一性和高检出率非常适合测试SLAM系统。固定基准标记可用于视觉定位或作为机器人运动的地面真值估计。安装在对象上的基准可用于识别和定位感兴趣的对象。

这项工作基于早期的AprilTag系统[3]。将AprilTags设计为带有编码二进制有效负载的黑白方形标记,是基于早期的ARTag[2]和ARToolkit[1]。AprilTag引入了一种生成二进制有效载荷的改进方法,保证了在所有可能的旋转下标签之间的最小汉明距离,使其比早期设计更健壮。标签生成过程是一个基于字典码的过程,具有最小复杂度的启发式,与类似位长的ARTag设计相比,经验证明标签生成过程可以降低假阳性率

根据机器人社区中AprilTag用户的反馈,我们确定大多数用户不接受具有解码错误的标签。在这些情况下,诸如支持恢复部分遮挡的标签边界之类的功能很少有用。必须权衡此功能与额外计算时间的成本和提高的误报率。

这项工作描述了一种提高AprilTag检测速度和灵敏度的方法,同时牺牲了检测部分封闭式标签的能力。结果表明,该方法比之前的检测方法更快,在不牺牲定位精度的前提下降低了误报率。本文的贡献是:

一种AprilTag检测算法,与之前的算法相比,提高了小标签的检测率,显示更少的假阳性,并减少了计算时间;一种新的标签边界分割方法,它是许多性能改进的原因,并且可以应用于其他基准检测器;实验表征了我们的探测器在真实和合成图像上的定位性能。

2.相关工作

最早的视觉基准系统之一是由ARToolkit[1]引入的,这是一个增强现实应用程序库。ARToolkit引入了黑色方块标记作为跟踪标记,它具有从已知比例的单个标记提供完整的6自由度姿态估计的优势。ARToolkit通过在正方形内嵌入任意图像模式来区分标签,并与已知模式数据库进行匹配以进行识别。随着可识别模式数据库的增长,匹配的计算成本和混淆不同模式的可能性也在增长。ARTag[2]试图通过引入2D二进制条码模式来纠正标签间混淆的问题。二进制条码允许纠正检测中的误码。一种改进的检测算法使用图像梯度来检测标签边缘,这是对ARToolkit的原始阈值方法的改进。项目幸存的分支包括ARToolkitPlus[5]和Studierstube Tracker [6]。

AprilTag[3]建立在ARTag的基础上,引入了一个基于字典编码的生成标签的系统。AprilTags保证在所有可能的旋转下标签之间的最小汉明距离,同时执行最小的复杂度约束,以减少自然图像中产生的假阳性率。定位精度比ARTag之前的技术水平有所提高。此外,AprilTag提供了一个流行的开源检测器实现,鼓励学术界采用它。

原始的AprilTag检测器使用图像梯度来检测高对比度的边缘。与之前使用朴素阈值的方法相比,这种方法具有对阴影和照明变化的鲁棒性。对部分闭塞标签的检测是可能的,首先将线段与梯度拟合,然后搜索形成四边形状或四边形的线段组合。分段优先方法的一个缺点是产生的候选四边形的数量很大。大量的处理时间花费在试图解码无效的候选四边形上。根据经验,AprilTag检测器花了大部分时间将线与梯度边缘拟合,其中许多都不是有效标记检测的一部分。

除了方形二进制标签,其他的标签编码方案也被提出。特别是,reacTIVision[7]使用了d-touch[8]引入的独特的拓扑标签识别系统。FourierTags[9]是径向对称标签,旨在通过平滑降级增加检测范围。符文标记[10]是根据组成基准标记的圆形点模式(不连接的椭圆环)命名的。选择点是为了在牺牲计算时间的情况下提供定位精度,同时对模糊、噪声和部分遮挡具有鲁棒性。Pi-Tag[11]使用交叉比来识别标记,注意到一条直线上四个点的交叉比在相机射影几何下是不变的。色谱仪[12]是AprilTags的扩展,其中混合了两个双色标签,以最大化CIELAB颜色空间中的梯度大小。与灰度图像相比,彩色空间转换减少了边缘的数量,从而加快了检测速度。

3.标签检测

我们的系统具有一个改进的四边形检测器,它可以在灰度图像中找到候选标签。然后对每个候选项进行解码,以确定它们是否是有效的AprilTag检测。该方法比以前的先进检测器更少的假阳性,同时可靠地检测到有效的未封闭的四边形,有助于降低整体的假阳性率

A.经验教训

对标记检测器的改进是受到了用户对常见用例的反馈的启发。我们了解到,在大多数部署中,部分遮挡标签的检测作用有限。遮挡标签通常有一个或多个误码,由于对假阳性率的影响,大多数用户禁用误码标签的解码。没有已知用户接受超过两个比特错误的标签,这使得解码算法更快。根据我们的经验,提高的检测速度是一个有利的权衡,而不是恢复部分遮挡的标签边界的能力。

B.自适应阈值

第一步是将灰度输入图像阈值化为黑白图像。一些阈值方法试图为整个图像找到一个全局阈值[13],而另一些方法则寻找局部或自适应阈值[14]。我们采用自适应阈值方法,其思想是在每个像素周围的区域中找到最小值和最大值。

我们不是计算每个像素周围的精确极值(最大值和最小值),而是将图像分成4x4像素的块,并在每个块中计算极值。为了防止极值差异较大的像素块边界之间产生伪影,我们在3x3周边像素块的邻域中找到极值,确保在计算相邻像素块的极值时最小有一个块重叠。然后使用平均值(max+min)/2作为阈值(图3B),将每个像素分配为白色或黑色的值。对于我们的应用,我们只需要区分形成标签的亮像素和暗像素,为了节省计算时间,我们将图像中对比度不足的部分(如图3b中灰色部分)排除在后续处理中。

C.连续边界分割

给定二值化的图像,下一步是找到可能形成标签边界的边缘。一种直接的方法是识别具有相反颜色邻居的边缘像素,然后形成连接的边缘像素组。然而,当标签边界之间的空白仅接近一个像素宽时,这种方法就失效了,这可能发生在物理上很小或很远的标记上。如果两个标记边界合并错误,则标记将无法被检测到。我们提出的解决方案是根据产生边缘的黑色和白色成分的身份分割边缘。

使用union-find算法[15](图3c)分割亮和暗像素的连接组件,该算法给每个组件一个唯一的ID。对于每一对相邻的黑白组件,我们将这两个区域边界上的像素识别为一个独特的集群。通过使用散列表,通过黑色和白色组件id为每个集群建立索引,可以有效地完成这种聚类,如图4所示。在前面提到的单个像素宽的白色组件分隔两个不同的黑色组件的情况下,我们通过允许相同的白色像素出现在两个结果类中来解决这个问题。

D.拟合四边形

一步是为每个无序边界点簇拟合一个四边形,将这些点划分为四个组对应线段,然而,计算使直线拟合误差最小的最优分区计算量很大。即使对于n个点的有序列表,也有O(n4)种可能的方法来划分这些点。我们的方法通过找到少量的角点来计算一个近似的分区,然后迭代所有可能的角点组合。

首先,点按角度以一致的绕其质心的顺序排序。这种排序允许我们将相邻点定义为排序点的范围。累积的第一和第二弯矩统计数据在经过这些点的一次通过中计算,使第一和第二弯矩能够在恒定时间内的任何点范围内计算。

角点是通过尝试将一条线拟合到相邻点的窗口中,并在窗口扫过这些点时找到均方误差函数的峰值来识别的。线拟合计算采用主成分分析(PCA)[16],其中椭圆拟合样本均值和协方差。最佳拟合线是对应于第一主成分的特征向量。使用预先计算的统计量,所有候选线拟合可以在O(n)时间内计算,其中n是点的数量。均方误差的最强峰值被确定为角点。

最后,我们遍历四个可判断角的所有排列,将线拟合到候选四边形的每一边。在这一步,我们选择四个角,产生最小的平均平方线拟合误差。预滤波被执行以拒绝糟糕的四变形拟合,例如那些没有至少四个角,其平均平方误差太大,或其角角偏离90太远。

四边形拟合步骤输出一组候选四边形用于解码(图3d)。注意,四边形检测器正确地发现环境中的许多四边形结构,包括镜面,开关和单个标签像素。解码步骤将四边形的内容与已知的码字进行比较,过滤掉错误的候选四边形。

E.快速解码

解码标记的一种直接方法是将检测到的代码(在其四种可能的旋转中)与标记族中的每个代码进行异或。标记被识别为与检测到的代码具有最小汉明距离的代码。然而,如果我们将纠正的误码数限制为2位或更少,则有可能枚举标记族中有效代码的两个误码内的所有O(n2)个可能代码。这些代码可以预先计算并存储在哈希表中,从而加快从O(n)到O(1)的比较的解码速度,其中n是标记族的大小。

F.边缘精细化

阈值图像在用于分割和四边形边界检测的同时,也会引入噪声。例如,阴影和眩光会在阈值设定后冲击边缘,导致生成的标签定位精度较差。我们提供一个可选的一种利用原始图像提取边缘的计算成本低廉的方法。

其思想是使用沿候选四边形边缘的图像梯度来拟合新的边缘,近似于原始AprilTag检测器的行为。沿着每条边缘,在均匀间隔的采样点上,我们沿着边缘法线对图像梯度进行采样,以找到梯度最大的位置。我们知道标签在内部是暗的,并且在四边形中的点的缠绕顺序,我们拒绝那些梯度不是预期符号的点(即来自有噪声的单个像素)。我们计算沿法线的点的加权平均值,用梯度幅度加权。沿着这些加权平均点的线拟合然后被用作四边形的边缘。四角被计算为这些线的交点。

如果只对检测标签感兴趣,则边缘细化不是至关重要的,尽管它可以帮助解码非常小的标签。然而,当标签用于位姿估计时,边缘细化步骤提高了定位精度。

图3. AprilTag检测器的中间步骤。使用自适应阈值化(b)对输入图像(a)进行二值化。将连通的黑白区域分割为连通的分量(c)。采用一种新的算法对元件边界进行分割,有效地将边界位于同一黑白区域的像素聚类。最后,四边形适合每一簇边界像素(d),糟糕的四边形适合和不可修改的标签被丢弃,并输出有效的标签检测(e)。

4.实验结果

A.假阳性率

AprilTags的一个关键优势是在自然场景中对假阳性检测的弹性。之前的检测器被证明有比理论上预期的更低的假阳性率,这主要是由于标签生成过程中的复杂性启发式。我们注意到,假阳性的数量不仅是标记码字本身的一个特征,也是检测器生成的候选四边形数量的一个函数。产生较少的候选四边形的检测器应该产生较少的假阳性。

我们使用与前一篇论文相同的LabelMe[17]数据集进行了一个实验,以比较新检测算法与前一篇论文的性能。此数据集由自然场景的图像组成,其中没有一个包含AprilTags。注意,通过允许最多2位的错误被纠正,误报的可能性被有意增加。假阳性数量的减少比我们仅从较低的四检检出率中所预期的要多(表I)。检测器的选择性也更强,因此假阳性率更低。对产生假阳性的图像的分析表明,噪声图像区域更有可能意外解码为有效码字。新检测中的连续边界分割算法很可能对这种增加的鲁棒性负责,因为它不太可能拟合一个候选四边形噪声。

B.定位精度

为了表征探测器的定位精度,我们使用理想的针孔相机模型生成射线跟踪图像,其中标签的真实位置和方向是已知的。一个已知边长的标签被放置在场景中,同时改变距离和方向。在第一个实验中,标签位置被约束在与摄像机中心的固定距离上,而标签的方向被固定平行于图像平面。估计距离的误差是根据标签到相机的距离绘制的(图5)。在第2次实验中,为了使相机的光轴通过中心,固定了标签的位置。标签的方向是随机生成的,它的法向量与摄像机轴成相同的角度。估计方向的误差是根据离轴角绘制的(图6)。

两次定位误差实验都是在相同的图像被缩小到原来大小的一半的情况下进行的。当使用破坏图像时,新检测器的性能大大优于旧检测器,而对未破坏图像的定位精度没有显著影响。当标签在仿真图像中移动得更远时,检测率证明了这一观察结果;新的检测器在检测小标签方面的能力要强得多(图7)。对输入图像进行削弱的能力是新检测器计算效率的关键之一。

我们试图解决的另一个问题是,仿真结果是否会转化为现实世界的表现。为了回答这个问题,我们收集了一个大的AprilTag马赛克在增加距离的真实图像。相机与马赛克的中心标签对齐,并垂直移动远离马赛克平面。groundtruth是用激光卷尺测量的。到中心标记的估计距离如图9所示。除了提高定位精度,新探测器还能在全距离范围内检测标签,而旧的探测器检测率迅速下降(图10)。

C.计算时间

在LabelMe实验中,我们记录了处理每张图像所需的尺寸和挂墙时间。两个标签探测器都在Intel Xeon E5-2640 2.5GHz核上以单线程模式运行。在数据集中的所有图像中,每像素的平均时间为新探测器每像素约0.254微秒,而旧探测器每像素为0.374微秒。对于一张640 x 480的图像,这分别相当于78毫秒和115毫秒。(绝对时间并不意味着具有代表性,只有在相互联系时才有意义。计算时间随处理速度和输入图像中四边形的数量而变化。) 正如我们上面所显示的,使用新的检测器抽取图像不会显著影响定位误差。通过2倍的抽取,新的检测器每像素只需要0.072微秒,或者对640 x 480的图像大约22毫秒。探测器的性能足够好,可以在功率相对较低的iPhone和类似的智能手机处理器上运行,为将AprilTags嵌入小规模应用程序提供了新的可能性

5.结论

本文介绍了一种新的AprilTag检测算法,该算法在原有检测的基础上进行改进,降低了误报率,提高了检测率,减少了检测所需的计算时间。这些改进使健壮的标记检测在计算有限的系统上可行,如智能手机,并扩展了标记跟踪在实时应用程序中的有用性。在iPhone app Store1中有一个免费的AprilTag检测器应用程序。去年发布的检测器实现是开源的,可以在我们的网站上免费获得。

基准标签的灵活布局

摘要-基准是人工特征,在计算机视觉中有多种用途,如目标跟踪和定位。我们提出了视觉基准系统的灵活标签布局的思想。与传统的方形标签相比,灵活的标签布局允许圆形、环形或其他需要的形状。布局灵活性的一个用途是增加标准方形标签的数据密度。此外,我们描述了一种比AprilTag 2和ArUco检测器更快、召回率更高的检测器,同时保持精度。

1.简介

基准是人为的视觉特征,被设计成易于检测。它们在计算机视觉、增强现实和机器人技术中都有应用,因为它们极大地简化了感知问题。流行的基准系统已经聚合到一个标准布局上,其易于检测的方形边界围绕着一个独特的数据位模式,如图2a所示。然而,这种形状并不是适用于所有应用程序的完美解决方案。

们发现传统的方形布局存在三个问题。首先,标准布局基准标签的很大一部分区域由标签的检测边界组成。这就为标签的数据位留下了更少的空间。其次,正方形标记不能有效地利用圆形对象上的空间。例如,AprilTag基准已经被用于跟踪从蜜蜂[1]到微型圆形机器人[2]的所有东西,这些方形标签就像一个正方形的钉子插入圆孔。第三,与传统布局相比,标记无人机着陆点等应用将受益于可在更大距离范围内检测到的标签。我们提出的系统通过允许标签的布局为每个应用程序自定义来解决这些问题。我们可以生成具有更高数据密度和更小边界的布局(图2b, c),圆形标签(图2e, f),或者自定义标签布局(图2f),在中间的空白区域放置更小的标签,允许这种递归标签在大范围的距离内被检测到。这种递归标签可用于标记四旋翼着陆地点,如图1。

图1. 一个四旋翼飞行器,使用双嵌套的AprilTag在其着陆垫上方进行定位。这个标签由一个大的递归标签和一个小的递归标签组成,这个小的递归标签粘贴在这个标签里面

制作灵活的标签布局的一个挑战是保持低的假阳性率,使基准的效用。以前的基准系统通过使用复杂性度量[3]来实现这些低速率,[3]预测标签与自然发生的模式相似的可能性。找到一个在许多标签布局都有效的复杂性度量在新标签家庭中保持健壮性是必要的。

我们提出的标签设计可以适应许多不同的视觉基准系统。为了与传统标签进行直接比较,我们将我们的工作整合到流行的AprilTag[4]基准系统中。近年来,AprilTag应用的一些例子包括为机械臂[5]提供groundtruth,校准相机-激光雷达系统[6],允许无人机跟踪汽车[7],以及跟踪建筑材料[8]。

我们提出了一个基准系统的评估方案,它允许在针对不同用例调整的检测器之间进行公平的比较。基准系统的两个关键指标是检测器的速度和标签可以被检测到的距离。这两个特性之间有一个自然的权衡,因为在检测器的算法中花费更多的时间来增加检测距离将导致检测速度的降低。我们表明,我们的检测器比以前的基准系统更快,有更长的检测距离。

这项工作的贡献包括:

我们引入了一个灵活的布局系统,用户可以通过该系统生成标签集,其中数据位按指定的形状排列(有一些限制);我们引入了一个适用于不同标签布局的复杂度度量,我们用它来生成低假阳性率的标签;为了比较基准探测器的速度和召回率,我们引入了一种评价方案。我们将我们的探测器与AprilTag 2和ArUco探测器进行比较。

2.相关工作

根据标签的形状,我们可以将基准系统分为两类:外部有黑白边框的方形标签;和其他形状的标签。

对于方形标签,最早的例子之一是AR- Toolkit[9],它使用黑色边框和标签内部的图像。ARTag[10]引入了2D条形码,使标签解码更容易。AprilTag[3],[4]引入了基于字典编码的标记生成方法,以减少假阳性检测和更高效的检测算法。ArUco[11],[12]使用混合整数线性规划生成标签和检测器也兼容ARTag和AprilTag。ChromaTag使用红-绿颜色梯度来加快检测过程[13]。虽然我们已经用单色标签实现了我们的布局,但同样的思想也可以应用到像ChromaTag这样的彩色标签上。

还有许多系统使用非正方形标记。CALTag[14]使用正方形标签网格来提高定位精度和遮挡鲁棒性。符文标签[15]使用了一个由圆形圆点组成的标签。傅里叶标记[16]提出了圆形标记,用标记的径向强度函数的频率编码比特。ReacTIVision[17]使用由它们的拓扑结构标识的不同形状的标记。

与各种各样的非方形标签布局相比,方形基准标签系统似乎已经聚合到相对标准的10x10布局上。AprilTag 2和ArUco都支持这种布局。特别是,目前没有一个基准系统使用非正方形的总体布局,同时保持来自这些标记系统的经过验证的正方形检测边界。

3.方法

我们提出了一种生成和检测标签的方法,具有灵活的(即用户指定的)布局。这包括降低假阳性率的复杂性度量以及具有高召回率的快速检测器。

A.灵活的布局

以前的方形基准系统只允许一个布局参数的变化:标签的大小。标签的形状和标签内数据位的位置总是相同的。我们的系统允许数据位的位置是任意的。我们的标签不再一定是正方形的,除了每个单独的位仍然由一个正方形的黑色或白色像素表示。

现在将标签的布局指定为字符串,每个字符对应于结果标签家族的一个像素。有四个选项:白色(“ W”),黑色(b'),数据('d')和忽略('x')。鉴于此字符串,我们的系统生成了带有该布局的标签家族。例如,我们的圆形布局使用布局字符串中的ignore (x)字符来创建一个近似圆形的光栅(见图3)。

图3. 将21h7圆形标记族的布局字符串覆盖到该标记族的示例标记上

布局必须具有四重对称,并包含用于检测标签的黑白边框。然而,数据位不需要停留在边界内部,边界的外部可以是黑色或白色。我们提出了一种新的标准布局,它将边界向内移动,并在边界的外围有一层数据位(参见图2b),无论总体标记大小如何,都给每个标记额外的16个数据位。虽然较小的边界可能会降低位姿精度和检测距离,但在许多应用中,数据密度的增加和相应的假阳性率的降低是可取的。我们建议将这些新样式的标签命名为uramaki,将旧样式的标签命名为maki,因为数据位和边界的位置类似于寿司卷中米饭和海藻的位置。

我们还可以指定一个自定义布局字符串,以便自定义标记形状、假阳性率和标记数量。例如,我们生成一个递归标记,用于标记四旋翼机的着陆点(参见图3f)。递归标记在标记的中心使用一组忽略位。在那个空间内,我们插入一个较小的标签,在那个较小的标签中,我们插入一个更小的标签。将从较长的范围检测到较大/中间的标签,但将超过较短范围的相机视野,这是在检测到中间/较小标签的时候。当然,在某些距离可能会检测到多个标签,在这种情况下,较大的标签可以提供额外的定位精度。

B. 复杂度度量

一些数据位模式更有可能在自然图像中偶然出现。例如,在任何深色矩形对象上都可能错误地检测到由全0组成的标记(显示为纯黑色)。之前的研究表明如果我们使用复杂度度量[3]只生成非常不可能的标记模式,则假阳性率可以降低。对于我们的灵活布局来说,这种特定的复杂性指标的选择并不明显是最好的。我们测试了以下三个指标,并基于我们的实验评估选择了Ising模型。

我们的第一个复杂度度量是矩形复杂度度量[3]的扩展。我们的方法呈现整个标签,包括边框,并计算渲染该图像所需的(可能重叠的)矩形的数量。对于带有x像素的标签布局,我们渲染图像两次,每次都将所有x位设置为白色或黑色,取两者的最小复杂度。

我们的第二个指标是渲染图像的Ising模型能量,忽略x位

这相当于标记中白色和黑色像素之间的总长度。这个指标来自于一种直觉,即现实世界中的物体往往在相邻区域之间具有强度的相关性。

我们的第三个指标是标签中连接组件的数量。这里的连接组件被定义为白色或黑色的4连接像素集。

C.检测速度

1. 分解:算法的拆卸步骤减小了图像的大小,从而增加了后期步骤的速度。选择拆卸因子允许在召回和速度之间进行权衡。

Apriltag 2使用了一个box过滤器进行拆卸。每个输出像素的值是通过在输出像素周围“box”中的多个输入像素的值来计算的,我们使用点采样替代,输出像素的值设置为输入图像中单个像素的值。

盒形滤波器更接近低通滤波器,通常在其他图像处理应用分解之前使用,而点采样在保留边缘方面更好,但容易产生混叠。我们通过实验确定点采样对标签检测效果更好。这是有意义的,因为标记检测管道的第一阶段依赖于检测输入图像中的边缘。

2.联合查找。通过减少对union-find数据结构的调用数量,查找连接组件的速度得到了提高。通过跟踪输入图像的值,我们可以避免已经合并的输入之间的冗余调用,见图5。此外,我们还会对太小的连接组件进行早期拒绝,因为我们知道它们无法产生可解码的标签。

3.拟合四边形。该算法将图像中检测到的轮廓拟合成四边形。轮廓中的第一个点按它们相对于轮廓边框中心的角度排序。然后,四条直线拟合轮廓中的点集。为了加快这一进程,已经做了一些改变。

计算每个轮廓中所有点相对于边界框中心的角度非常耗时,因为需要调用atan2。新的检测器不是通过计算角度来计算排序键,而是将该点所在的象限和该点在该象限内的斜率的组合来计算排序键。

使用216的值,因为给定典型图像的大小,它大于y/x的任何可能值。这将给出一个排序键,其结果与实际角度的排序顺序相同。

算法的下一部分将直线与轮廓相匹配。这需要计算许多不同的候选最小二乘线拟合的误差。之前的检测器计算直线的法线,以计算拟合误差的标准差。相反,我们将线拟合误差计算为我们拟合线的点的协方差矩阵的最小特征值。这删除了对sin/cos的调用,并在计算相同数量时仅添加了sqrt的调用。

4.标签检测。第一步是做透视校正。这需要找到标签的期望姿势和实际姿势之间的转换。换句话说,我们要解出3x3矩阵H:

下标I在标签的每个角的点上从1到4。之前的算法用SVD来求解这个9x9 Ax = 0方程。如果我们通过添加H33 = 1的限制来固定矩阵H的尺度,然后,我们可以以8x8 ax = b方程的形式编写此问题,并使用高斯消元求解。

限制H33 = 1固定了矩阵的尺度,但它也限制我们拟合H33 不等于 0的单应性。我们可以通过考虑在H33 = 0的情况下,图像如何转换标签的中心来证明这一限制。在这种情况下,我们有

换句话说,H33 = 0的单应性将标记的中心映射到图像平面上无穷远处的一个点,这种情况我们不关心,因为这样的标记一开始就不会被检测到。

D.检测小标签

AprilTag 3没有使用最近的相邻像素对每个标记中心的像素值进行采样,而是使用双线性插值来提取每个标记单元中心的像素值。

像素值被读入二维数组并锐化。这使得邻近较暗的较亮像素更有可能被读取为白色像素。锐化应该有助于抵消在非常小的标签图像中发生的模糊。例如,如果标记来自36h11族,则每个单元格中心的值将被读入6x6数组。然后用3x3拉普拉斯核锐化这个2D数组,然后尝试对这些修改后的值进行解码:

E.实验设置

我们通过使用LabelMe[18]数据集测量假阳性率来评估复杂性度量的选择。此数据集由不包含任何apriltag的自然图像组成,因此在此数据集上的任何检测都是假阳性。LabelMe有207920张图像,其中6090028个候选四边形被检测器提取为41h12族,6128551为21h7族。

不同的复杂性指标导致标签数量略有不同,所以我们使用前1500标签为每个41h12族和前35标签为每个21h7族,使这些实验结果在每一组标签族直接比较。

我们在一个数据集上评估了检测器的速度,该数据集由来自maki 36h11家族的160张标签图像和来自uramaki家族的160张标签图像组成。这些图片的分辨率为1296x964,是用点灰色变色龙相机拍摄的。

每个家庭的10个不同的标签被拍摄在距离相机20厘米到160厘米的距离上,每增加20厘米。在每个距离都有一个标签正面对着相机的图像和另一个标签旋转45度远离相机的图像。每个标签打印的尺寸为4厘米,穿过标签的外部界限。

我们比较了ArUco检测器使用DM FAST模式、旧的AprilTag 2检测器和新AprilTag 3检测器在maki 36h11图像上的性能,以及新AprilTag 3检测器在uramaki 41h12图像上的性能。我们将AprilTag 2检测器的抽取参数设置在1到17之间,AprilTag 3检测器的抽取参数设置在1到24之间,ArUco检测器的minMarkerSize参数设置在0到0.11之间,步骤为0.01。这些参数的选择是从最小值到每个检测器根本无法检测到任何标记的值。每个探测器的速度是在2.80GHz运行的Intel R CoreTM i7-7600U CPU上测量的。

图4. 通过在36h11标签的真实图像上运行算法,说明了检测算法的步骤。1)输入。2) Decimated,在这个例子中是2倍。3)阈值。4)通过联合查找算法连接组件。5)白色和黑色成分之间的轮廓。6)四边形符合轮廓。7)读取透视校正和数据位。8)数据位被锐化并最终解码

4.结果和讨论

A.灵活布局

我们使用新的灵活布局系统(以及新的复杂性度量,参见第IV-B小节)来生成几个新的标签族。第一个是新的uramaki AprilTag(见图2b),汉明距离为12。这个标签家族是9x9细胞大小,共有2115个标签,相比之下,老maki 36h11家族(见图2a)是10x10细胞大小,只有587个标签。将数据位放在标记的边界之外允许我们增加由数据而不是边界组成的标记的比例。需要强调的是,新的9x9 uramaki标签布局比传统的10x10 maki标签有更大的汉明距离和编码更多的标签,尽管它的整体单元格更少。如果以相同的物理尺寸打印,9x9标签将有更大的位间距,这将提高其检测范围。总之,标签性能的提高是本文的主要贡献。

我们用uramaki布局生成了一个10x10标签族,它有52个数据位,汉明距离为13,以及48714个唯一标签。这些带有更多可能标签的新标签族可以实现新的应用,如跟踪可变形物体或大规模部署机器人。

我们还制作了两个圆形标记族(参见图2d和图2e)。较小的圆形标记族有38个惟一标记,较大的圆形标记族有65698个惟一标记。对于将标签安装在圆形物体[1]、[2]上的应用,能够更好地利用可用空间可以显著提高最小汉明距离或不同标签的数量。

最后,我们生成了一个递归标签族,它在外面有一层数据位,中间有一个2x2的孔,其中没有数据位。我们从这个系列中打印出三个大小不同的标签,以便每个标签都可以放在另一个标签的中间。我们使用这个90.2x90.2 cm双嵌套标签来定位一个四旋翼飞行器,如图1所示。该标签允许在较长的距离内进行检测,从0.08到16.15到0.03米,甚至使用来自板载树莓派相机模块V2的低分辨率640x480图像。

B.复杂性度量

在LabelMe[18]数据集上比较了使用三种不同复杂度指标生成的标签族的假阳性率(见第III-E小节)。从表一和表二可以看出,对于41h12和21h7族,最佳的复杂度指标是Ising能量。对于21h7族,Ising能量度量降低了假阳性率,甚至低于比特均匀随机分布的预期率。因此在AprilTag3中,我们专门使用Ising模型。

C.检测器速度

AprilTag和ArUco探测器都具有允许在速度和召回率之间权衡的参数。对于AprilTag检测器,这是抽取因子,对于ArUco检测器,这是minMarkerSize。由于这些参数,很容易得出关于两个基准系统的相对性能的错误结论,因为它们可能是不同的调优。在包含各种不同大小标记的数据集上,我们对两个检测器的相关参数进行参数扫描。这种比较的结果如图7所示。我们可以看到,AprilTag 3检测器比AprilTag 2和ArUco检测器更快,召回率更高。

我们认为,在包含所有不同大小标签的数据集上,通过显示每个检测器的参数扫描来比较不同检测器的速度和召回率是重要的。

在基准检测器的主要权衡是召回之间,特别是小标签,和速度。以这种方式比较探测器允许在可能具有不同默认参数设置的系统之间进行公平的比较。我们还可以比较新探测器的性能时,使用Uramaki41h12标签族与使用maki 36h11标签族的新探测器。当对最大召回率进行调优时,使用这两种检测器的性能大致相当。然而,当调整为更高的速度(高抽取因子)时,41h12标记族的召回率低于36h11标记族。这可能是因为我们数据集中的所有标签都是在白色背景上拍摄的,这使得36h11标签有了一个有效的更大的外部边界。

D.检测小标签

使用与上面相同的数据集,我们可以更仔细地查看是什么原因导致检测器无法检测到标签。在图8中,我们可以看到每个检测器的召回率(参数设置为最大召回率)与标签距离的关系。检测器之间召回率的差异主要是由于检测器开始无法检测到标签的距离的差异。可以看出,APRILTAG 3检测器的性能优于Apriltag 2和Aruco检测器在检测小标签时的性能。

5.结论

本文提出了一种能够在多种布局中生成和检测基准标签的基准系统。我们引入了有用的布局,包括更高数据密度的方形标签、圆形标签和递归标签。我们展示了一个递归标签的例子,用于四旋翼飞行器在着陆点上方的定位。

我们对AprilTag的改进,包括在第III-C小节中描述的新标签族和性能改进,已经被合并到开源的AprilTag分发版中,由密歇根大学的APRIL实验室维护。https://april.eecs.umich.edu).

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

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

【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】

一、获取代码方式 获取代码方式1: 完整代码已上传我的资源:【光学】基于matlab GUI双缝干涉和牛顿环【含Matlab源码 2165期】 点击上面蓝色字体,直接付费下载,即可。 获取代码方式2: 付费专栏物理应用(Matlab) 备注: 点击上面蓝色字体付费专栏物理应用(Matlab),扫…...

idea无法正常显示配置文件图标

1、首先project structure界面将项目对应的文件夹转成source和resource文件夹。 2、然后进入setting在file types中的YAML&#xff0c;查看下面的Registered Patterns中是否有*.yml&#xff0c;若没有&#xff0c;则添加上去&#xff1b;最后保存就可以了。 注意&#xff1a; …...

计算机系统的软件有,计算机系统软件有哪些

软件系统是在硬件系统的基础上。为有效地使用计算机而配置的。没有系统软件&#xff0c;现代计算机系统就无法正常地、有效地运行。那么&#xff0c;计算机系统软件有哪些呢&#xff1f;1、操作系统操作系统是控制和管理计算机各种资源、自动调度用户作业程序、处理各种中断的软…...

学生信息管理系统

1、项目介绍 学生信息管理系统拥有三种角色&#xff0c;分别为学生、教师和管理员&#xff0c;功能更加完善&#xff0c;可以作为初学者参照学习课程设计。 学生&#xff1a;班级通讯录查询、个人信息查看修改、成绩查询、密码修改 教师&#xff1a;教师通讯录查询、个人信息…...

IDEA 文件上面图标显示不对

一次设置编辑器的.properties 文件时&#xff0c;发现自己的文件标识与别人的 不一样 自己的 别人的 百度了半天也没有找到解决方案&#xff0c;最后在查找 设置 file type 的时候发现&#xff0c;as的标志代表这样的文件&#xff0c;最下面选项中加了 .*es 会把所有 .*es的…...

sql高级语法的应用

-- auto-generated definition create table chouti_book (id integer not nullprimary key autoincrement,title varchar(64) not null,price integer not null,color varchar(64) not null,page_num integer,publish_id integer not n...

什么是蜂窝移动网络?

文章目录前言移动网络 vs WIFI蜂窝移动通信网蜂窝网络和移动网络的联系蜂窝网络实现移动上网通信网架构总结前言 本博客仅做学习笔记&#xff0c;如有侵权&#xff0c;联系后即刻更改 科普&#xff1a; 移动网络 vs WIFI 计网课外实验月&#xff0c;我走在宿舍一楼正数着AP有…...

计算机硬盘分区显示不全,windows7系统磁盘分区图标显示不正常的两种解决方法【图】...

操作windows7系统的过程中&#xff0c;难免会遇到一些问题困扰着大家&#xff0c;最近就有用户反映硬盘的图标显示不正常&#xff0c;有时候只有系统分区有卷标&#xff0c;有时候还出现硬盘的图标损坏了&#xff0c;影响正常操作。那么有什么方法可以解决呢?针对这个问题&…...

Herman miller Aeron 一代 气压杆(气压棒,气柱)更换笔记(电脑椅中的劳斯莱斯)

作为腰痛星人的程序员&#xff0c;看了一圈&#xff0c;发现aeron椅子能缓解痛苦。 看了京东&#xff0c;一万二的报价还是忍住了&#xff0c;没钱闹的。从某海鲜市场买了一把二手aeron 1代办公椅&#xff0c;一切皆好&#xff0c;就是坐下时有点小晃&#xff08;毕竟10年以上的…...

惠普计算机图标不在桌面,惠普笔记本电脑桌面图标显示图标不正常如何还原 惠普笔记本电脑桌面图标显示图标不正常还原的方法...

今天给大家带来惠普笔记本电脑桌面图标显示图标不正常如何还原&#xff0c;惠普笔记本电脑桌面图标显示图标不正常还原的方法&#xff0c;让您轻松解决问题。惠普笔记本电脑桌面图标显示图标不正常怎么还原 很多惠普笔记本电脑用户都习惯了固定大小的桌面图标&#xff0c;可…...

思科UCS服务器怎么安装系统,安装Redhat/CentOS操作系统在UCS M系列服务器

简介本文描述如何安装Redhat企业Linux (RHEL)或在思科统一计算系统(UCS)使用局部存储器&#xff0c; M系列服务器的CentOS Linux。Cisco 建议您了解以下主题&#xff1a;Cisco UCS Manager 2.5或3.1版本存储设备配置文件Linux操作系统(OS)使用的组件本文档中的信息根据UCS M系列…...

MATLAB源码-GRABIT从图像文件中提取数据点。

源码链接&#xff1a; https://download.csdn.net/download/tgs2033/87238015https://download.csdn.net/download/tgs2033/87238015 GRABIT从图像文件中提取数据点。 GRABIT启动用于从图像文件中提取数据的GUI程序。它能够读取BMP、JPG、TIF、GIF和PNG文件&#xff08;IMREAD…...

常用关系型数据库管理系统

1、Oracle 数据库 Oracle 前身叫 SDL&#xff0c;由 Larry Ellison 和另两个编程人员在1977创办&#xff0c;他们开发了自己的拳头产品&#xff0c;在市场上大量销售&#xff0c;1979年&#xff0c;Oracle 公司引入了第一个商用 SQL关系数据库管理系统。Oracle公司是最早开发…...

windows7远程桌面设置

远程桌面连接组件是从Windows 2000 Server开始由微软公司提供的&#xff0c;在WINDOWS 2000 SERVER中他不是默认安装的。 该组件一经推出受到了很多用户的拥护和喜好&#xff0c;所以在WINDOWS XP和2003中微软公司将该组件的启用方法进行了改革&#xff0c;我们通过简单的勾选…...

CR渲染器全景图如何渲染颜色通道_3DMAX产品渲染教程,看看惊艳效果表现背后那些不为人知的技巧~...

618好课狂欢&#xff0c;优惠不等人&#xff0c;早买早便宜特推超级会员限时疯狂抢购点击了解支持微信公众号小程序APPPC网站多平台学习(IOS系统&#xff0c;公众号左下角学习)...

Docker基础入门

1、概述 目录 1、概述 2、相关网站地址 3、对比传统虚拟机技术 4、基本组成 5、安装Docker 6、底层原理 7、常用命令 Docker 是一个开源的应用容器引擎&#xff0c;基于 Go 语言 并遵从 Apache2.0 协议开源。 Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级…...

tree命令-以树形结构显示目录下的内容

一、命令详解 1.1【功能说明】 tree命令功能是以树形结构列出指定目录下的所有内容&#xff0c;包括所有文件、子目录及子目录里的目录和文件。 1.2 【语法格式】 [root7bfe451a2fe1:~]#tree --help usage: tree [option] [<directory list>]1.3【选项说明】 -a 显示…...

飞思卡尔 S12 (X)串口下载移植

1 参考文章 https://blog.csdn.net/hellolru/article/details/84939856 和 Serial Bootloader for S12(X).pdf 2 修改启动程序。 Bootloader_S12X 里的汇编代码 StartS12X.s&#xff0c;找到对应人pin脚&#xff0c;如有pp0 改成 pt7 _BootStart: ; ----------------------…...

文件管理系统:5款优秀的文档管理系统

1. easyopen 一个简单易用的接口开放平台&#xff0c;平台封装了常用的参数校验、结果返回等功能&#xff0c;开发者只需实现业务代码即可。 技术点 加密算法&#xff08;MD5、AES、RSA&#xff09; Netty&#xff08;编解码、长连接、断开重连&#xff09; 限流&#xff08;…...

基于Opencv图像识别实现答题卡识别示例详解

1. 项目分析 首先在拿到项目时候&#xff0c;分析项目目的是什么&#xff0c;要达到什么样的目标&#xff0c;有哪些需要注意的事项&#xff0c;同时构思实验的大体流程。 图1. 答题卡测试图像 比如在答题卡识别的项目中&#xff0c;针对测试图片如图1 &#xff0c;首先应当实…...

MYSQL中LIKE(模糊查询)

0 写在前面 通常我们在搜索的时候总是不会特别精准&#xff0c;例如在百度上搜索&#xff0c;主要搜索关键字&#xff0c;然后加载页面之后再挑选。 所以&#xff0c;在数据库中&#xff0c;有时候会将查询条件不一定直接使用uuid这样的标准查询。实际业务中可能存在模糊查询…...

经验分享——教务管理系统有几大功能

在众多学校、教育机构的校区运营管理中&#xff0c;教务管理一直是核心工作内容&#xff0c;但繁杂的工作内容让大家疲惫不堪&#xff0c;而教育管理系统的出现极大地缓解了这一现象&#xff0c;那么究竟教务管理系统有何作用呢&#xff1f;下面我们就来一探究竟。 教务管理系…...

二叉树题目归纳:首个共同祖先与后继者

二叉树题目归纳 后继者 思路&#xff1a; 思路比较简单&#xff0c;二叉树中序遍历的一道题 首先知道二叉树左子树值小于根结点值&#xff0c;右子树值大于根结点值。如果后继结点值大于根结点值&#xff0c;那么在右子树中递归查找。否则在左子树中&#xff0c;那么此时后继…...

使用接口操作mybatis的开发

Mybatis接口开发的练习 –1&#xff0c;需求&#xff1a;查询car表里的所有数据 –2&#xff0c;开发步骤 准备表和数据 DROP TABLE IF EXISTS car; CREATE TABLE car (id int(11) NOT NULL auto_increment,name varchar(10) default NULL,color varchar(10) default NULL,p…...

TiDB -- TiDB CDC POC 测试

TiDB CDC1.1 简介1.2 测试逻辑1.3 POC测试1.3.1 集群搭建准备&#xff1a;部署集群和启动&#xff1a;1.3.2 创建CDC同步任务和验证1.3.3 创建TiFlash同步任务1.3.4 启动kafka消费程序往TiDB灌测试数据1.3.5 启动kafka消费程序接收CDC数据写入DB1.4 结论1.4.1 观察和统计分析Ti…...

CrossApp 设置App启动页(无任何黑屏白屏,显示完启动画面之间到显示出首页界面)

初始情况下,不管iOS或是Android在点击App图标到显示出图像.这之间都是会出现黑色屏幕的过渡情况。 iOS: 在iOS上相对来说要比Android上简单的多。设置下图片、文件即可 Android: 在android上就要麻烦的多了。我在设置的过程中就碰上了各种问题(黑屏、白屏、显示系统桌面等)。下…...

java计算机毕业设计ssm物流快递管理系统

项目介绍 通篇文章的撰写基础是实际的应用需要&#xff0c;然后在架构系统之前全面复习大学所修习的相关知识以及网络提供的技术应用教程&#xff0c;以物流快递管理的实际应用需要出发&#xff0c;架构系统来改善现物流快递管理工作流程繁琐等问题。不仅如此以操作者的角度来…...

windows7系统的“ .exe”图标显示不正常解决办法

windows7系统的“ .exe”图标显示不正常&#xff0c;但是却可以正常使用软件&#xff0c;解决办法如下&#xff1a; 1、按“WinR”打开“运行”窗口&#xff0c;输入“cmd”命令打开命令提示符窗口&#xff1b; 2、在打开命令提示符下输入以下命令行窗口&#xff0c;便可恢复。…...

无法安装此app因为无法验证其完整性

app安装时提示这个&#xff1a;权威回复&#xff0c;造成这个现象的原因是自己手贱在开发者网站或者app uploader中把开发证书删除了&#xff0c;我每次删开发证书都有一批人报这个问题。网上搜到的答案都是互相转发的&#xff0c;唉。...

上海内推 | 微软亚洲研究院上海人工智能组招聘深度学习研究实习生

合适的工作难找&#xff1f;最新的招聘信息也不知道&#xff1f;AI 求职为大家精选人工智能领域最新鲜的招聘信息&#xff0c;助你先人一步投递&#xff0c;快人一步入职&#xff01;微软亚洲研究院微软亚洲研究院上海人工智能组的研究方向聚焦在与机器学习和人工智能相关的热点…...

鸿蒙系统有哪些手机可以应用,鸿蒙系统手机有哪些

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。鸿蒙系统手机有荣耀系列的&#xff0c;包括荣耀9和荣耀10&#xff0c;以及mate系列和p20、p30等等。华为鸿蒙(英语&#xff1a;Harmony OS&#xff0c;开发代号&#xff1a;Ark)是基…...

idea导入maven依赖出现xxx.jar包找不到

出现&#xff1a;xxx.jar包找不到 明明已经导入依赖成功了&#xff0c;也把jar包下载了&#xff0c;就是一运行就报错&#xff0c;显示xxx.jar包找不到。 使用idea自带的maven3就可以正常运行&#xff0c;换成自己设置的maven就出现问题。 这个是2020.1版本的idea的bug&#…...

COCO 2017 数据集下载

参考COCO 2017 数据集下载 - 云社区 - 腾讯云 COCO官方&#xff1a;地址 COCO2017数据集简介: CoCo数据集一共有五种标注类型&#xff0c;分别(5种类型)&#xff1a; 目标检测&#xff0c;关键点检测&#xff0c;素材分割&#xff0c;全景分割&#xff0c;图像说明 标注信息使…...

codeforces刷题一

C. Removing Smallest Multiples 难度1200 题意&#xff1a;给定一个串S和一个串T S串是{1,2&#xff0c;......&#xff0c;n}的数 而T串是输入的 现在要使得S串变为T串的 最小花费 删除操作是删除k的最小倍数的数 花费的定义为k的总和 思路 直接用 i 枚举 1 - n 然后用…...

php移除excel密码,excel保护密码忘记怎么撤销保护工作表

excel保护密码忘记撤销保护工作表的方法&#xff1a;第一步&#xff0c;先找到一个带有有工作表保护密码的Excel工作表&#xff0c;然后把后缀名称改为.rar。第二步&#xff0c;用压缩文件打开&#xff0c;然后找压缩的对应路径。第三步&#xff0c;把从压缩文件里面找到的.xml…...

单片机晶振概述及工作原理

一、单片机晶振简单介绍 单片机晶振是单片机内部电路产生单片机所需的时钟频率的部件&#xff0c;单片机晶振提供的时钟频率越高&#xff0c;那么单片机运行速度就越快&#xff0c;单片接的一切指令的执行都是建立在单片机晶振提供的时钟频率。晶振结合单片机内部电路产生单片…...

年少痴狂,怀恋曾经的创业岁月,语音识别的应用远远未到高潮,本人的软件源码开源,需要的留下Email,我给大家发...

年少痴狂&#xff0c;怀恋曾经的创业岁月&#xff0c;语音识别的应用远远未到高潮&#xff0c;本人的软件源码开源&#xff0c;需要的留下Email,我给大家发 本人大学时代激情四射&#xff0c;活力太足&#xff0c;同时也不太懂得这个社会的商业规则&#xff0c;大学时代的激情…...

2022下半年Java面试题总结,20多类1100道面试题含答案解析

2022年一眨眼就快到十一月了&#xff0c;总结了下半年各类Java面试题&#xff0c;初中级和中高级都有&#xff0c;包括Java OOP面试题、Java集合/泛型面试题、Java异常面试题、Java种的IO与NIO面试题、Java反射面试题、Java序列化面试题、Java注解面试题、多线程与并发面试题、…...

2021面试题

1 Java相关 1.1 反射和动态代理 反射&#xff1a;在运行状态中&#xff0c;对于任意的一个类&#xff0c;都能够知道这个类的所有属性和方法&#xff0c;对任意一个对象都能够通过反射机制调用一个类的任意方法&#xff0c;这种动态获取类信息及动态调用类对象方法的功能称为…...

Github每日精选(第56期):支持多语言的文字识别EasyOCR

EasyOCR EasyOCR一款好用的OCR&#xff0c;支持80多种语言和所有流行的书写脚本&#xff0c;包括拉丁语、汉语、阿拉伯语、德瓦纳加里语、西里尔语等。 OCR &#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是指电子设备&#xff08;例如扫描…...

ImageNet ISLVRC2012数据集下载和使用

最近要在imagenet数据集上做实验&#xff0c;以前只知道这个数据集很大&#xff0c;但是没用过&#xff0c;这次亲自下载然后按照训练集和验证集划分好了&#xff0c;记录一下。 主要参考了这个 https://zhuanlan.zhihu.com/p/370799616 目录1. 数据集下载2. 数据集处理2.1 训…...

机器学习常见数据集下载(免费)

机器学习常见数据集下载&#xff08;免费&#xff09;数据集下载从sklearn库中获取数据集示例&#xff08;加州住房数据集&#xff09;机器学习用到数据集都在UCI上面&#xff0c;做个笔记方便找。 UCI官网&#xff08;老版本&#xff09;&#xff1a;https://archive.ics.uci…...

思科无线POC测试要包含哪些测试项

https://cdn.ttgtmedia.com/searchNetworking/downloads/17_1587058898_ch17.pdf http://www.ieee802.org/1/files/public/docs2008/avb-gs-802-11-qos-tutorial-1108.pdf...

图像的小波变换处理(一)

目录 1 、小波变换的基本概念 2、 连续小波变换 1 、小波变换的基本概念 信号分析&#xff1a;获得时间和频率之间的相互关系。傅立叶变换&#xff1a;提供频率域的信息&#xff0c;但有关时间的局部化信息却基本丢失。小波变换&#xff1a;缩放母小波的宽度来获得信号的频率…...

iphone屏幕镜像如何全屏_苹果投屏有什么方法?使用“屏幕镜像”功能,任意切换大小屏幕...

日常打游戏、刷抖音&#xff0c;我们可以忍受手机几英寸的小屏幕&#xff0c;但是日常追剧的时候&#xff0c;手机的小屏幕就会让我们觉得异常的憋屈了。今天&#xff0c;小峰想要为大家分享的&#xff0c;便是如何让手机在大屏幕和小屏幕之间随意切换&#xff01;别看小峰这里…...

【文档】开发者常用术语

&#x1f4d4; 笔记介绍 大家好&#xff0c;这里是千寻简笔记&#xff0c;我是作者星辰&#xff0c;笔记内容整理并发布&#xff0c;内容有误请指出&#xff0c;笔记源码已开源&#xff0c;前往Gitee搜索《chihiro-notes》感谢您的观看。 作者各大平台直链&#xff1a; GitHu…...

vue配置不同环境部署后控制面板是否显示console

1.安装相关依赖 npm install babel-plugin-transform-remove-console --save-dev 2.修改babel.config.js文件 目前有三个环境:本地环境(.env.development)、测试环境(.env.staging)、生产环境(.env.production) .env.development: # 添加自定义变量,evn变量必须以VUE_APP为…...

byr面经两则

人人&#xff0c;金山西山居&#xff0c;腾讯互娱&#xff0c;微信&#xff0c;网易游戏offer及面经 首先感谢师兄在两年前发的贴&#xff08;【天道酬勤】 腾讯、百度、网易游戏、华为Offer及笔经面经 &#xff09;&#xff0c;这篇文章对我帮助很大。我写这篇文章一是为了感谢…...

LQ0161 九数分三组【枚举+置换】

题目来源&#xff1a;蓝桥杯2015初赛 Java A组C题 题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 1~9的数字可以组成3个3位数&#xff0c;设为&#xff1a;A,B,C, 现在要求满足如下关系&#xff1a; B 2 * A C …...

Java学习(尚硅谷)反射学习之调用运行时类中指定的结构:属性、方法、构造器

package com.atguigu.java2;import com.atguigu.java1.Person; import org.junit.Test;import java.lang.reflect.Constructor; import java.lang.reflect.Field; import java.lang.reflect.Method;/*** 调用运行时类中指定的结构&#xff1a;属性、方法、构造器* author * cre…...

SQL116 删除记录(二)

删除记录&#xff08;二&#xff09;_牛客题霸_牛客网 (nowcoder.com)https://www.nowcoder.com/practice/964c9f7fffbb4ab18b507cfed4111b4a?tpId240&tqId2223562&ru/exam/oj&qru/ta/sql-advanced/question-ranking&sourceUrl%2Fexam%2Foj%3Fpage%3D1%26tab%…...

小波变换的理解

文章目录前言一、傅里叶变换的劣势以及小波变换的优势二、连续小波变换&#xff08;CWT&#xff09;的理解2.1 什么是小波变换&#xff1f;2.2 为什么小波变换能确定信号频率和其对应的时间区间&#xff1f;2.3 连续小波变换最大的特点是什么&#xff1f;2.4 其它补充三、离散小…...

1.数据的导入与导出

数据的导入与导出 更多MATLAB数据分析视频请点击&#xff0c;或者在网易云课堂上搜索《MATLAB数据分析与统计》 http://study.163.com/course/courseMain.htm?courseId1003615016 在用MATLAB进行编程时&#xff0c;不可避免的要涉及到数据的导入与导出&#xff0c;如果数据…...

Java面试题记录贴

注释&#xff1a;本帖仅供自己复习面试题所用。 目录 计算机网络部分 操作系统部分 Java语言部分 springboot部分 数据结构与算法部分 数据库部分 计算机网络部分 1.如何让UDP协议变得可靠&#xff1f; RUDP RUDP 提供一组数据服务质量增强机制&#xff0c;如拥塞控制…...

求数组下标

import java.util.Scanner; public class New1{public static void main(String [] args){Scanner input new Scanner(System.in);int a input.nextInt();int [] arr {1,2,3,4,5,6,7,8,9,10};System.out.println("输入查询数字");// 线性方法// int index -1; fo…...

POC测试是什么

POC测试&#xff0c;即Proof of Concept 可以理解为&#xff1a;根据客户需求进行测试 是业界流行的针对客户具体应用的验证性测试&#xff0c;根据用户对采用系统提出的性能要求和扩展需求的指标&#xff0c;在选用服务器上进行真实数据的运行&#xff0c;对承载用户数据量和…...

游戏面试的维度与思考

1. 负责移动游戏产品的测试⼯作,涉及功能、性能、兼容等纬度; 2. 负责游戏测试⽤例的编写、review、持续优化,拓展测试⼴度和深度; 3. 负责运营期游戏项⽬的质量反馈收集、分析和跟进; 4. 负责竞品相关数据的收集、分析和跟进; 任职资格: 1. ⼤专及以上学历,2年以上游…...

贪吃蛇项目设计

绪 言 贪吃蛇游戏是一个深受人们喜爱的游戏&#xff0c;一条在密闭的围墙内&#xff0c;在围墙内随机出现一个食物&#xff0c;通过按键盘上四个光标键控制蛇向上下左右四个方向移动&#xff0c;蛇头撞到食物&#xff0c;则表示食物被蛇吃掉&#xff0c;这时蛇的身体长一节&am…...

计算机毕业设计(附源码)python中小型医院综合管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…...

Python八种数据导入方法,你掌握了吗?赶紧收藏

数据分析过程中&#xff0c;需要对获取到的数据进行分析&#xff0c;往往第一步就是导入数据。导入数据有很多方式&#xff0c;不同的数据文件需要用到不同的导入方式&#xff0c;相同的文件也会有几种不同的导入方式。下面总结几种常用的文件导入方法。 大多数情况下&#xf…...

如何通过Java实现485通信

1、整体架构的选择 首先根据需求&#xff0c;我这边使用的是springbootnetty的架构&#xff0c;使用了一个串口转网口的转换模块。为什么这么使用&#xff1f;部署的时候使用的是Linux的系统&#xff0c;在Linux下安装驱动比较麻烦&#xff0c;所以网口可以节省大量的服务器配…...

学电脑先学什么

要学电脑&#xff0c;首先应该学习操作&#xff0c;包括熟练使用键盘&#xff0c;使用鼠标&#xff0c;能基本使用操作系统&#xff08;包括使用操作总统&#xff0c;安装应用软件&#xff09;&#xff0c;然后在学习打字&#xff08;专业的打字非学习五笔不可&#xff09;&…...

零基础可以学计算机编程吗,计算机编程好学吗,零基础小白可以吗,入门应该先学什么?...

计算机编程技术好学吗&#xff0c;零基础小白可以入门吗&#xff0c;入门应该先学什么&#xff1f;其实想要进入编程行业&#xff0c;入门最为关键&#xff0c;经常能听到很多人说&#xff0c;想学习编程其实不难&#xff0c;入门更为简单&#xff0c;只要你对他感兴趣就能学&a…...

计算机专业找工作学什么好,学电脑学什么专业好找工作

计算机在互联网时代是主要的工作工具&#xff0c;大家都知道学和计算机相关的技术能够让我们更好地实现就业&#xff0c;但是却不知道学电脑学什么专业好找工作。如今&#xff0c;市面上比较热门的岗位&#xff0c;要数电脑cg设计了。所谓cg设计&#xff0c;是指借助计算机软件…...

学计算机还有绘画基础,学电脑绘画应该从什么学起

电脑的出现让我们的工作越来越便捷&#xff0c;尤其是在设计行业之中&#xff0c;在早先&#xff0c;设计师的创作都是通过纸张来完成&#xff0c;可是这种方式不仅不易修改&#xff0c;还不容易保存&#xff0c;经常会出现损坏和发霉。直到电脑的出现&#xff0c;设计师可以直…...

0基础学java可行吗_零基础可以学习JAVA吗?

肯定是可以学的&#xff0c;每一个人做每一件事都是从0基础开始的&#xff0c;他们并不是生下来就会Java&#xff0c;会编程&#xff0c;都是通过后天的努力说得到的技能你只需要找对方法&#xff0c;找对带你的人&#xff0c;你就可以学好学习Java的方式有这几种&#xff1a;3…...

利用scrapy爬取东方资讯的新闻

之前学习用的&#xff0c;爬取东方资讯新闻列表的代码 ArticlelistItem文件中的字段可根据自己的需要改变 # -*- coding: utf-8 -*- import scrapy import json import time import pymysql from articlelist.items import ArticlelistItemclass EastdaySpider(scrapy.Spider)…...

[附源码]计算机毕业设计springboot作业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…...

国产蓝牙耳机排行,500元蓝牙耳机性价比之王

蓝牙耳机可以说是这两年来最受用户追捧的数码产品之一&#xff0c;其之所以能快速受到大众喜爱&#xff0c;除了便携和手机耳机接口的迭代外&#xff0c;还有技术的成熟&#xff0c;音质方面与有线耳机的差距越越来越小了&#xff0c;尤其是我们的国产品牌&#xff0c;在音质表…...

气传导耳机什么牌子的好,最好的气传导耳机排行榜

或许我们的日常生活中充满了噪声&#xff0c;例如马路、地铁还有公交上&#xff0c;嘈杂的声音会影响我们的心情&#xff0c;同时还会损伤我们的耳朵&#xff0c;在嘈杂的环境中&#xff0c;想听歌想煲剧了怎么办&#xff0c;又不想沉浸在自己的世界里&#xff0c;就可以使用气…...

python matplotlib打开相机

如何通过按键保存图片呢&#xff1f;&#xff1f;&#xff1f; import cv2 import matplotlib.pyplot as pltcapture cv2.VideoCapture(0) fig plt.figure() plt.ion()if capture is not None:while (True):# 获取一帧ret, frame capture.read()if frame is not None:# ope…...

Android WebView中打开相机拍照和选择相册

一般在项目中与js交互&#xff0c;可能会遇到上传文件图片等操作&#xff0c;避免不了一些坑&#xff0c;下面简单说一下&#xff0c;Android 在不同版本中webView调用相机&#xff0c;选择相册的方法是不一样的&#xff0c;3.0以下的调用 public void openFileChooser(ValueCa…...

Halcon联合VS2010打开相机并显示

在开始之前需要安装好Halcon 12和VS2010&#xff0c;具体的话VS2010是免费的可以直接在微软官方下载&#xff0c;Halcon12这个可以参考Halcon学习网&#xff08;http://www.ihalcon.com/read-7605-1.html&#xff09;一、打开Halcon&#xff0c;打开助手&#xff0c;获取打开相…...

Android7.1 关闭双击电源键打开照相机功能

diff --git a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml index 2a61967..aab832d 100755 --- a/frameworks/base/core/res/res/values/config.xml b/frameworks/base/core/res/res/values/config.xml -2427,7 2427...

Android 多进程同时打开相机

转载&#xff1a;多进程打开相机 多进程打开相机 只要满足一定的条件是可以多进程打开相机 1、CameraService打开相机的入口 Status CameraService::connectDevice(const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb,const String16& cameraId,…...

打开相机

using System.Collections; using System.Collections.Generic; using UnityEngine;public class cameraView : MonoBehaviour {public GameObject cameraViewPlan;public static Texture2D viewTexture;public static WebCamTexture viewTextureCamera;// Use this for initi...

OpenCV学习笔记(六)—— OpenCV for Android打开相机

在之前的篇章中&#xff0c;我们完成了Android平台开发环境的配置&#xff0c;也找到了剔除OpenCV Manager API的办法&#xff0c;那么接下来我们开始从零开始&#xff0c;完成一个个人的程序&#xff0c;实现功能如下&#xff1a; 1.识别指定的图片&#xff0c;并用彩色框绘制…...

运维面试精选:3、Docker面试题

文章目录1、Docker 中cmd add copy区别&#xff1f;2、请说一说Docker中Cgroups&#xff0c;namespace&#xff0c;unionFS&#xff1f;3、容器的rootfs层&#xff1f;4、Docker的网络模式有哪些&#xff1f;5、Docker 存储引擎6、docker和kvm区别1、Docker 中cmd add copy区别…...

MySQL运维基础面试问答题(42题)

面试题001&#xff1a;请解释关系型数据库概念及主要特点&#xff1f; 关系型数据库模型是把复杂的数据结构归结为简单的二元关系&#xff0c;对数据的操作都是建立在一个或多个关系表格上&#xff0c;最大的特点就是二维的表格&#xff0c;通过SQL结构查询语句存取数据&#…...

运维面试必问的负载均衡高频面试题(2021年最新版)

前言 网上的运维基础面试题文章有非常多,在我的博客中也有一些是这些年运维人员面试的面试题,但是大部分都比较老了。之前一些经典的面试题我已经整理到专栏《运维面试宝典》里,这个专栏里的面试技巧可以说永远不会过时,而且我会每隔一段时间进行补充和优化。 从一开始开…...

[附源码]JAVA毕业设计交通事故档案管理系统(系统+LW)

[附源码]JAVA毕业设计交通事故档案管理系统&#xff08;系统LW&#xff09; 目运行 环境项配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目…...

MIME type (‘text/html‘) is not a supported stylesheet MIME type, and strict MIME checking is enabled

项目场景&#xff1a; 在index.html中引入一个css文件 问题描述 在index.html中引入一个css文件&#xff0c;报如下错误&#xff1a; Refused to apply style from http://localhost:8080/theme/index.css because its MIME type (text/html) is not a supported stylesheet…...

常见mimeType大全

常见mimeType&#xff0c;来源aliyunoss SDK $mimeTypes [xlsx > application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xltx > application/vnd.openxmlformats-officedocument.spreadsheetml.template,potx > application/vnd.openxmlformats-offi…...

IOS开发之——上传-获取文件的MIMEType(03)

一 概述 常用文件的MIMEType如何通过一次请求获取文件的MIMEType 二 常用文件的MIMEType 2.1 图片 类型文件拓展名MIMEType图片pngimage/png图片bmp\dibimage/bmp图片jpe\jpeg\jpgimage/jpeg图片gifimage/gif 2.2 多媒体 类型文件拓展名MIMEType多媒体mp3audio/mpeg多媒体m…...

异常:MIME type may not contain reserved characters

前言 在微服务技术栈中&#xff0c;我们会经常Fegin调用&#xff0c;Fegin确实简化了http调用细节&#xff0c;让我们可以像调用内部方法一样调用外部接口。但是Fegin调用也有很多问题&#xff0c;这里来和大家一起看看MIME type may not contain reserved characters异常。 …...

解决:PHP 阿里云OSS访问图片地址默认下载而不是在线预览

修改文件--保存后再上传图片就可以在线预览了 将阿里云图片属性改为"image/jpg" 也可直接替换下方文件,已经是修改后的了,新上传的图片则不会出现不可在线预览了 image/jpg 文件地址&#xff1a; vendor/aliyuncs/oss-sdk-php/src/OSS/Core/MimeTypes.php <?phpn…...

常用的MIMETYPE列表

text/plain&#xff08;纯文本&#xff09; text/html&#xff08;HTML文档&#xff09; text/javascript&#xff08;js代码&#xff09; application/xhtmlxml&#xff08;XHTML文档&#xff09; image/gif&#xff08;GIF图像&#xff09; image/jpeg&#xff08;JPEG图像&a…...

MIME type 问题的解决

出现背景&#xff1a;在angular项目最后的打包部署阶段&#xff0c;打包成一个dist静态文件夹&#xff0c;其内放置的是一些静态文件&#xff0c;然后在编辑器中直接运行index.html&#xff0c;出现以下错误&#xff1a;Refused to execute script from URL because its MIME t…...

Django提示mimetype无法识别错误

Django1.7把mimetype改成了content_type。请使用content_type。...

tomcat中mime type配置说明

在一些场景下 tomcat下的一些文件 在浏览器中访问的时候 浏览器会直接打开这个文件内容 而不是下载该文件 反之亦然. 这时候需要设置tomcat下的配置打开tomcat目录下的conf文件夹下的web.xml文件(切记不是工程目录下的web.xml)。例如&#xff1a;<mime-mapping> …...

Android获取文件的mimeType的封装

概述 MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。是设定某种扩展名的文件用一种应用程序来打开的方式类型&#xff0c;当该扩展名文件被访问的时候&#xff0c;浏览器会自动使用指定应用程序来打开。多用于指定一些客户端自定义的文件名&#xff0…...

iOS开发网络篇 一一 获取文件MIMEType的方式

一共有三种方式: // 获取MIMEType//1. 发送请求,可以在响应头(内部有MIMEType)//2. 百度 MIMEType//3. 调用C语言API//4. application/octet-stream 任意的二进制数据类型代码如下:// Created by 朝阳 on 2017/12/12. // Copyright © 2017年 sunny. All rights reserved…...

常见文件对应的MIMEType类型

常见文件对应的MIMEType类型 序号文件格式对应MIMEType类型1.pngimage/png2.jpegimage/jpeg3.jpgimage/jpeg4.gifimage/gif5.webpimage/webp6.xlsapplication/vnd.ms-excel7.xlsxapplication/vnd.openxmlformats-officedocument.spreadsheetml.sheet8.docapplication/msword9.…...

java的mime类型_常用的mimeType,以及java获取mime类型

将文件系统上的文件获取了这些mimeTypegif : image/gifbmp : image/bmpico : image/x-icojpeg : image/jpegjpg : image/jpegpng : image/pngzip : application/ziprar : application/x-rarjsp : text/htmlpdf : application/pdfpng : image/pngjpg : image/jpegmp4 : video/mp…...

java 设置mime type_将Mimetype添加到MimetypesFileTypeMap - java

我在将Mimetypes添加到MimetypesFileTypeMap时遇到问题。我已经尝试添加META-INF / mime.types文件&#xff0c;就像Documentation所说的那样。但MimetypesFileTypeMap似乎没有读取它。我想念什么吗&#xff1f;这是一个Spring / Maven Web项目。任何帮助&#xff0c;将不胜感激…...

常用MIME Type 配置

Video TypeExtensionMIME TypeMPEG-4.mp4video/mp4Ogg Video.ogvvideo/oggFlash Video.flvvideo/x-flvA/V Interleave.avivideo/x-msvideoMicrosoft Windows Media.wmvvideo/x-ms-wmvRealMedia Variable Bitrate.rmvbapplication/vnd.rn-realmedia-vbrreine Textdateien.txtte...

HTML MIME Type

MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type)&#xff0c;MIME使用一个简单的字符串组成&#xff0c;最初是为了标识邮件Email附件的类型&#xff0c;在html文件中可以使用content-type属性表示&#xff0c;描述了文件类…...

Android MIME TYPE的基本用法

MIME_TYPE external/mime-support/mime.types frameworks/base/mime/java-res/android.mime.types MIME类型 MIME type的缩写为(Multipurpose Internet Mail Extensions)代表互联网媒体类型(Internet media type)&#xff0c;MIME使用一个简单的字符串 组成&#xff0c;最初…...

Android MIME类型

一、MIME TYPE描述 多用途互联网邮件扩展&#xff08;MIME&#xff0c;Multipurpose Internet Mail Extensions&#xff09;是一个互联网标准&#xff0c;它扩展了电子邮件标准&#xff0c;使其能够支持非ASCII字符、二进制格式附件等多种格式的邮件消息。 内容类型&#xff08…...

史上最全的mime-type大全

原文地址&#xff1a;http://blog.haoji.me/mime-type.html?fromxa 什么是mime-type 简单来讲&#xff0c;它的作用就是服务器告诉浏览器你这个内容到底是个什么东东&#xff0c;是一张网页&#xff1f;还是一张图片&#xff1f;还是一个视频&#xff1f;浏览器只有知道了你…...

生物化学 药物设计与研发笔记:变构(Allostery)药物设计

视频连接&#xff1a;创新药物设计与研发 总结&#xff1a; 本次的主题为变构&#xff08;Allostery&#xff09;药物设计。 对于抗糖尿病靶标PPARγPPAR\gammaPPARγ的激动剂RSG具有骨密度下降等不良反应&#xff0c;在同时给药 PPARγPPAR\gammaPPARγ的变构激动剂BVC发现…...

数字理想助力第一届中国“互联网+”生态环境科技创投大赛圆满收官

12月4日&#xff0c;历时8个月的“北控水务杯”第一届中国“互联网”生态环境科技创投大赛全国总决赛顺利举办。本次大赛有来自全国90家企业、7支创新团队、104个项目报名&#xff0c;1000余名创业者的热情参与。数字理想作为北控水务的重要合作伙伴&#xff0c;为大赛提供全面…...

福布斯2019全球最佳创投人榜单发布,沈南鹏蝉联全球第一...

北京时间4月2日&#xff0c;美国《福布斯》杂志公布了2019年“全球最佳创投人”榜单&#xff08;The Midas List&#xff09;。红杉中国的沈南鹏再次荣膺榜首&#xff0c;卫冕全球第一创投人的称号。去年&#xff0c;沈南鹏首次登顶该榜单&#xff0c;不仅刷新了由他创造和保持…...

福布斯2019全球最佳创投人榜单发布,沈南鹏蝉联全球第一

北京时间4月2日&#xff0c;美国《福布斯》杂志公布了2019年“全球最佳创投人”榜单&#xff08;The Midas List&#xff09;。红杉中国的沈南鹏再次荣膺榜首&#xff0c;卫冕全球第一创投人的称号。去年&#xff0c;沈南鹏首次登顶该榜单&#xff0c;不仅刷新了由他创造和保持…...

九合创投王啸演讲:5G 时代下的产业变革机会

导读近日&#xff0c;网易科技《5G未来沙龙》投资人专场在线上进行直播&#xff0c;九合创投创始人王啸进行了题为《5G 时代下的产业变革机会》的演讲。 王啸表示&#xff0c;目前正从流量时代过渡到效率时代&#xff0c;他详细地分辨了 5G 时代与之前的不同&#xff0c;他表示…...

腾讯研究院报告解读:AI创新、创业、创投浪潮十大真相

点击关注&#xff0c;抢跑AI世代一、人工智能开启的微智时代AI能否完成人类历史上的颠覆式创新,开启人类新时代&#xff1f;60余年来人们对这个话题一直争论不休。2006年&#xff0c;Hinton教授发明了一种训练深层网络的新思路&#xff0c;随后三篇论文炸开了深度学习算法突破口…...

陆奇新东家落定,YC入华将开创另类创投

陆奇&#xff0c;作为科技领域最耀眼、最受关注人物之一&#xff0c;有了新的职场归宿。2018年8月15日&#xff0c;北京&#xff0c;全球知名创业投资及加速器Y Combinator&#xff08;以下简称YC&#xff09;宣布正式入华&#xff0c;并成立Y Combinator中国&#xff08;简称Y…...

红岭创投爆1亿坏账给谁敲响了警钟?

昨日&#xff0c;深圳P2P网贷“老大”红岭创投的董事长周世平在其官方社区发贴声称&#xff0c;“有利空来了&#xff0c;慢慢消化吧。”业内专家指出&#xff0c;该“利空”指的是1亿元的借款项目被“跑路”。而红岭创投的此次坏账&#xff0c;极可能创下目前中国P2P史上最大的…...

冷暖自知——“2016中国创投市场分析报告”解读

点击标题下「中国云报」可快速关注 编者按 2016年&#xff0c;创投圈“资本寒冬”之声一直不绝于耳。投资机构更加谨慎&#xff0c;创业者融资周期不断延长&#xff0c;时不时传出有些创业项目被“投决会”否定。然而&#xff0c;资本到底“寒”到什么程度&#xff1f;透过三个…...

启明创投甘剑平:破解独角兽公司的基因密码

http://tech.163.com/16/0511/07/BMP60NRG00094P40.html &#xff08;原标题&#xff1a;启明创投甘剑平&#xff1a;破解独角兽公司的“基因密码”&#xff09; 无论行业如何迭代&#xff0c;伟大的独角兽公司都具备着相似的“基因密码”。 甘剑平&#xff0c;启明资本合伙人。…...

EPPlus(Document Manipulation Libraries 二)

一、前言 全称为&#xff1a;ExcelPacketPlus。支持对excel文档的读写和基本图表的实现。 支持.Net Framework和.Net Core。可在NuGet直接搜索下载。 可参考&#xff1a;https://github.com/EPPlusSoftware/EPPlus.Sample.NetCore 二、使用介绍 待补充...

EPPLUS中单元格的属性

//1&#xff0c;赋值 worksheet.Cells[int row, int col].Value "xxx"; //或者 worksheet.Cells["A1"].Value "xxx"; //或者 worksheet.SetValue(row,col,value);//2&#xff0c;单元格合并//指定开始行&#xff0c;开始列&#xff0c;结束行&…...

Excel操作库--EPPLUS常用操作命令汇总(1)

1.添加引用 using OfficeOpenXml; using OfficeOpenXml.Drawing; using OfficeOpenXml.Drawing.Chart; using OfficeOpenXml.Style; 2.所有操作应该在using中 using (ExcelPackage package new ExcelPackage()) { } 3.添加表格 var worksheet pa…...

Excel Epplus

下面是Excel中写入一个折线图&#xff1b;两条折线&#xff0c;其中第二条折线的Y轴为次坐标轴(右边轴)&#xff1b;Excel单元格格式设置 :worksheet.Cells[row,colum].Style.Numberformat.Format "";单元格类型设置为文本类型worksheet.Column(colum).Style.Number…...

epplus 速度,使用EPPLUS .CSV文件加载速度慢

I have loads of .csv files I need to convert to .xslx after applying some formatting.A file containing approx 20 000 rows and 7 columns takes 12 minutes to convert.If the file contains more than 100 000 it runs for > 1 hour.This is unfortunately not ac...

c# epplus 使用插入图片,链接

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using...

epplus保存为流_通过EPPlus导出Excel文件

小弟刚刚走上工作岗位不久&#xff0c;工作中常常遇到要导出Excel的情况&#xff0c;但感觉两种常见的导出方式(一种是通过GridView&#xff0c;另一种是通过微软的COM组件)都不是很理想&#xff0c;前者导出的灵活度太低&#xff0c;后者又常常出现进程无法回收&#xff0c;所…...

epplus 速度,调试时,Epplus Save(),SaveAs()等方法的运行非常缓慢

Environment - Windows 10, Visual Studio 2017, netcore2.0, Debug build.When saving an Excel file using Epplus 4.1.1 while debugging, the save operation takes a much longer amount of time than I would expect.Heres some timing when ran with Debug -> Start...

epplus 速度_VSTO学习之路:学习使用Epplus(1)

关于读取其它工作簿数据的几个方式的比较&#xff1a;1、VBA的GetObject方法&#xff0c;会调用Excel程序打开工作簿(虽然不可见&#xff0c;但确实是打开的)2、SQL&#xff0c;使用繁琐缺少灵活&#xff0c;不支持单元格样式的操作&#xff0c;也似乎不支持delete语句删除源数…...

【人工智能/算法】搜索求解(Solving Problems by Searching)

文章目录一、求解与搜索二、盲目式搜索1. 深度优先搜索&#xff08;Depth First Search, DFS&#xff09;回溯搜索&#xff08;Backtracking Search&#xff09;2. 广度优先搜索&#xff08;Breadth First Search, BFS&#xff09;一致代价搜索&#xff08;Uniform-cost Search…...

I am a boy!

对于一个字符串&#xff0c;请设计一个算法&#xff0c;只在字符串的单词间做逆序调整&#xff0c;也就是说&#xff0c;字符串由一些由空格分隔的部分组成&#xff0c;需要将这些部分逆序。例&#xff0c;输入"I am a boy!", 输出"boy! a am I"#include&l…...

elementUI el-table上移下移

<el-table :data"channelForm.selectedChannelList" style"width: 100%"> <el-table-column type"index"> </el-table-column> <el-table-column prop"...

iOS 首页标题支持展示图片点击展示lottie动画实现方案

现状&#xff1a;app首页标题只支持展示文字 需求 app首页标题支持展示图片&#xff0c;json 动画 如图 实现思路&#xff1a;将需要展示的资源包下载到沙盒中&#xff0c;在创建频道标题视图的时候&#xff0c;根据该频道在沙盒中是否有对应的图片、json资源来确定是否展示…...

Python安全攻防之第一章渗透测试概述

渗透测试的具体方法一、如何绕过CDN获取网站的真实IP地址通过内部邮箱获取。一般情况下&#xff0c;邮箱服务器位于内网&#xff0c;我们可以通过注册邮箱或者订阅邮件&#xff0c;目的就是让对方给我自己发送邮件&#xff0c;这样查看邮件的原始邮件头&#xff0c;就会发现邮件…...

MySQL-45讲学习笔记(1-3)

0. 开篇词 0.1 学习专题目的 在工作中对于MySQL&#xff0c;最重要的两点就是&#xff1a;如何设计表&#xff0c;还有如何对表查询进行优化&#xff01;能够写出逻辑正确的SQL语句&#xff0c;同时也能够知道语句是不是最优的数据库使用出现了问题&#xff0c;能够快速定位问…...

指针赋值问题

最近写了个代码&#xff0c;被日本客户指出来有问题&#xff0c;对此做了一项研究。 我最开始的时候写的是&#xff1a; char *pointer NULL; pointer “string”; printf(“%s\n”, pointer); 日本客户指出&#xff0c;pointer当前没有分配空间&#xff0c;给它赋值是不规…...

DOM编程-获取文本框的value

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>DOM编程-获取文本框的value</title> </head> <body> <script> /* 1、JavaS…...

Android基础教程——从入门到精通(下)

本文是对B站教程 动脑学院 Android教程 学习过程中所做的笔记。文章分为上下两部分&#xff0c;此文是下部分&#xff0c;上部分链接为&#xff1a;Android基础教程——从入门到精通&#xff08;上&#xff09;。源视频教程并没有录制全&#xff0c;本文还补充了 Service 和 网…...

leadtools 22.0.6 Crack .NET 7 Support

Charlotte, NC (January 9, 2023) - LEAD is pleased to announce the release of another major update to LEADTOOLS Version 22. Highlighting this release is support for .NET 7, the ability to add eSignatures to documents and PDFs, significant recognition enha...

Day882.隐式函数转换索引问题 -MySQL实战

隐式函数转换索引问题 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于隐式函数转换索引问题的内容。 在 MySQL 中&#xff0c;有很多看上去逻辑相同&#xff0c;但性能却差异巨大的 SQL 语句。 对这些语句使用不当的话&#xff0c;就会不经意间导致整个数据库的压…...

第七章:ElasticSearch集群的搭建

上一章&#xff1a;《第六章&#xff1a;IK分词器和Elasticsearch集成使用》 文章目录7.1 集群节点7.2 集群的搭建7.2.1 windows环境下es集群的搭建1.准备三台elasticsearch服务器2.修改每台服务器的配置7.2.2 linux环境下搭建es集群7.3 集群测试7.4 springboot集成客户端使用7…...

《第一行代码》kotlin Android SQLite

参考 《第一行代码 第三版》教程 Android 内置了SQLite数据库 SQLite 是一款轻量级的关系型数据库&#xff0c;运算速度快&#xff0c;占用资源少&#xff0c;支持标准SQL语法&#xff0c;数据库ACID事务&#xff0c;可以用于记录复杂的关系性数据 创建数据库 Android提供了S…...

es-Mapping

文章目录es-Mapping概念查看mappingES数据类型两种映射类型映射参数es-Mapping 概念&#xff1a;映射是定义文档及其包含的字段的存储和索引方式的过程两种映射方式 dynamic mapping&#xff08;动态映射或自动映射&#xff09;expllcit mapping &#xff08;静态映射或手动映…...

Spring事物管理

一.事物的概念? 事物可以看做是由对数据库的若干操作组成的一个单元 事物是一系列的动作,一旦其中有一个动作出现错误,必须全部回滚,提供将事物中对数据库的所有已完成的操作全部撤销,滚回到事物开始的状态,避免出现由于数据不一致而导致接下来的一系列错误. 事物的出现是为…...

九龙证券|重金买入百余股,这类资金连增六日!这个行业被重点盯上

两融资金接连6个交易日添加&#xff0c;杠杆资金加仓哪些股票&#xff1f; 证券时报•数据宝计算&#xff0c;到2月6日&#xff0c;沪深两融余额为15577.13亿元&#xff0c;较上一交易日添加58.79亿元&#xff0c;其间融资余额14641.43亿元&#xff0c;较上一日添加60.38亿元。…...

Self-training 与 Self supervised learning 简明对比

前言 最近搜 self supervised learning 工作时&#xff0c;不知怎么就输成了 self-training 自己还没反应过来已经搜错了hhh&#xff0c;这篇文章简明对比一下。 正文 Self-training 想要详细了解的可以看一篇综述 https://arxiv.org/pdf/2202.12040.pdf Self-training 其…...

C语言——字符串+内存函数及其模拟实现

目录0. 思维导图1. 前言2. 函数介绍2.1 strlen2.2 strcpy2.3 strcat2.4 strcmp2.5 strncpy2.6 strncat2.7 strncmp2.8 strstr2.9 strtok2.10 strerror2.11 memcpy2.12 memmove2.13 memcmp2.14 memset3. 库函数模拟实现3.1 模拟实现strlen3.2 模拟实现strcpy3.3 模拟实现strcat3…...

网络流量回溯分析对业务系统慢访问分析案例

需求简介 某外高桥公司的OA系统是其重要的业务系统&#xff0c;OA系统负责人表示&#xff0c;部分用户反馈&#xff0c;访问OA系统时比较慢。需要通过分析系统看一下实际情况。 报告内容 本报告内容主要为&#xff1a;OA性能整体分析 分析时间 报告分析时间范围为&#xf…...

全志H616——通过语言来控制手机刷抖音

思路&#xff1a;配置语言模块硬件库&#xff08;说什么话之类的&#xff09;刷固件到语言模块上&#xff08;USB转TTL&#xff09;连接安卓手机&#xff0c;使其能处于USB调试状态测试shell指令&#xff08;abd shell指令&#xff09;编写并封装串口收发函数&#xff08;下一篇…...

NVIDIA GPU开源驱动编译学习架构分析

2022年5月&#xff0c;社区终于等到了这一天&#xff0c;NVIDIA开源了他们的LINUX GPU 内核驱动&#xff0c; Linux 内核总设计师 Linus Torvalds 十年前说过的一句话&#xff0c;大概意思是英伟达是LINUX开发者遇到的硬件厂商中最麻烦的一个&#xff0c;说完这句话之后&#x…...

C语言基础知识(61)

多维数组多维数组的定义格式是&#xff1a;数据类型 数组名称[常量表达式1][常量表达式2]…[常量表达式n];定义了一个名称为num&#xff0c;数据类型为int的二维数组。其中第一个[3]表示第一维下标的长度&#xff0c;就像购物时分类存放的购物&#xff1b;第二个[3]表示第二维下…...

MCU - C51 单片机「实例」

前言 本文主要讲述 C51 单片机 学习需要掌握的基础内容纲领「实例代码地址」 订阅专栏&#xff0c;后续会陆续更新每章节内容 文章目录前言概览1. Hello Wriprin2. 创建工程文件 (.c) .hex 调试3. I/O 口控制小灯任意位置任意数量4. 数码管显示5. 外部中断 int0 int16. 定时器…...

训练营打卡Day58

训练营打卡Day58 文章目录训练营打卡Day58题124&#xff1a;[392. 判断子序列](https://leetcode.cn/problems/is-subsequence/)思路代码题125&#xff1a;[115. 不同的子序列](https://leetcode.cn/problems/distinct-subsequences/https://leetcode.cn/problems/distinct-sub…...

ansible实战应用系列教程5:管理playbook

ansbile实战应用系列教程5:管理playbook 编写并运行playbookAnsible Playbooks and Ad Hoc CommandsFormat of an Ansible Playbook运行playbook选项optionsplaybook中编写多个playsWriting Multiple PlaysRemote Users and Privilege Escalation in Playsplaybook提权配置文件…...

PostgreSQL中offset...limit分页优化常见手段

大部分开发人员习惯使用order by offset limit进行分页&#xff0c;使用该方法可能会导致扫描的数据放大&#xff0c;因为offset的行会被扫描。表现就是一般offset的行比较小的情况也&#xff0c;也就是翻页&#xff0c;是很快的&#xff0c;但是一旦offset的值很大&#xff0c…...

vue2 vue3 打包单文件组件为独立的js文件,动态加载组件,异步加载组件

1.我被自己坑了(需求) 我想要的是 "异步加载组件",但是 根据以前的经验 搜索的关键字是"动态加载组件" "动态加载组件" 在vue中有另外的意思. 另外 "打包单文件组件为独立js" 这个关键字搜索到的内容也不是我想要. 我的需求就是 把…...

Android面试题 ---- 沉浸式状态栏适配

关于屏幕适配 ---- 状态栏 关于状态栏 这么多年了 适配主要也就是沉浸式 所以这篇文章主要是说一说沉浸式&#xff0c;还有一些相关的方法 沉浸式的实现方式 从4.4到今天&#xff0c;也有过很多次变更&#xff0c;这里我们只讲一些变动比较大的部分&#xff0c; 我们也一起都看…...

理解「业务」与「技术」概念

技术也好&#xff0c;业务也罢&#xff1b; 01【什么是业务&#xff1f;】 对于那些久经职场的人&#xff0c;也很难一句话说明白&#xff1b; 业务&#xff0c;作为工作中绝对的核心点&#xff0c;即便在一个公司待的足够久&#xff0c;对业务足够熟悉&#xff0c;也很难简单…...

ESP32 Arduino (九) EEPROM和NTP对时

EEPROM一、简介EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器。是一种掉电后数据不丢失的存储芯片。 EEPROM 可以在电脑上或专用设备上擦除已有信息&#xff0c;重新编程。一般用在即插即用。在EPS32中已经将EEPROM弃用。对于ESP…...

sqlsugar 多租户设置AOP

最近为了整合公司项目中间件API的开发&#xff0c;耗费了不少人力&#xff0c;其中涉及到多个且不同类型的数据库&#xff08;不知道之前的项目立案&#xff0c;数据库到底是怎么设计&#xff0c;整的我写一些业务逻辑得写好几套代码&#xff0c;简直不要太恶心&#xff09; 因…...

Redis三 高级篇-1. 分布式缓存

分布式缓存 《Redis三 高级篇-1. 分布式缓存》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis三 高级篇-1. 分布式缓存》分布式缓存《Redis三 高级篇-1. 分布式缓存》1.Redis持久化1.1.RDB持久化1.1.1.执行时机1.1.2.RDB原理1.1.3.小结1.2.AOF持…...

IPV6实验(华为)

题目&#xff1a; 思路&#xff1a; 分成三个部分。需要运用到IPV6地址来解题&#xff0c;左边是IPV4和IPV6右边只有IPV6&#xff0c;中间是IPV4。三个部分需要用到不同的协议。此题与之前最大的区别在用IP地址的不同&#xff0c;此题运用IPV6地址与之前大不相同&#xff0c;所…...

C++入门(二)初识类和对象

初识类和对象一&#xff0c;类的引入二&#xff0c;类的定义三&#xff0c;类的访问限定符四&#xff0c;类的作用域五&#xff0c;类的实例化六&#xff0c;类的对象大小的计算七&#xff0c;类成员函数的this指针一&#xff0c;类的引入 在C语言中&#xff0c;结构体内只允许…...

机试_3_数据结构(一)

本章学习基本的线性数据结构&#xff0c;包括向量、队列和栈。这些基础的数据结构是后续很多高级内容的基础。 一、向量 数组作为一种基本的数据类型&#xff0c;它是有限个类型相同的变量的线性集合&#xff0c;组成数组的各个变量称为数组的元素。每个元素对应一个下标&…...

axios使用fordata上传文件

文章目录一、FormData的作用&#xff1f;二、使用步骤1.获取file文件数据2.读入数据FormData对象的相关常用方法一、FormData的作用&#xff1f; FormData提供一种表示表单数据的键值对的构造方式&#xff0c;实现表单数据的序列化&#xff0c;从而减少表单元素的拼接&#xff…...

Java基础集合上篇

本篇博文目录:一.集合框架二.List1. ArrayList &#xff08;数组&#xff09;2.Vector &#xff08; 数组实现、线程同步&#xff09;3.LinkList&#xff08;链表&#xff09;三.Set1.HashSet&#xff08;Hash 表&#xff09;2.LinkedHashSet&#xff08; HashSetLinkedHashMap…...

共聚焦显微镜能做什么

共聚焦显微镜主要采用3D捕获的成像技术&#xff0c;它通过数码相机针孔的高强度激光来实现数字成像&#xff0c;具有很强的纵向深度的分辨能力。 共聚焦显微镜成像原理 共焦显微镜装置是在被测对象焦平面的共轭面上放置两个小孔&#xff0c;其中一个放在光源前面&#xff0c;…...

分享五款小伙伴们私信推荐最多的功能软件

最近陆陆续续收到好多小伙伴的私信&#xff0c;这边也是抓紧时间整理出几个好用的软件&#xff0c;希望可以帮到大家。 1.浏览器下载插件——FVD Downloader FVD Downloader是一款非常知名的浏览器插件&#xff0c;能够帮助你在任何网页上下载视频、音频文件。众所周知&#…...

快速测温医疗级电子体温计方案开发

电子体温计开发方案由单片机SIC8833型号&#xff0c;通过单片机程序开发而成&#xff1b;它与以往的水银体温计不同&#xff0c;是通过电子元器件来代替水银&#xff0c;测量后体温度数还可以一数字显示到小显示屏上。一、电子体温计方案规格简介&#xff1a;温度部&#xff1a…...

TimeSeries时间序列函数-移动平均法

简单移动平均法clc, cleary [533.8 574.6 606.9 649.8 705.1 772.0 816.4 892.7 963.9 1015.1 1102.7];m length(y);n [4,5]; % n位移动平均的项数&#xff0c;选取4和5分别做一次运算for i 1:length(n)for j 1:m-n(i)1yhat{i}(j) sum(y(j:jn(i)-1))/n(i);endy_predict(i…...

MMDetection3D:数据加载简析

目录数据加载流程create datadatasetpipelinedataloader参考资料数据加载流程create data从数据集的原始数据文件中读取数据&#xff0c;并且按指定的格式组织成 pickle 文件保存&#xff0c;在 data_converter 里有具体的各个数据集的转换方式。如果想用于训练\测试的数据内容…...

QT实现自定义控件之控件代理--comboboxDelegate

QT实现了MVC&#xff0c;那么QT在操作控件的时候也就三板斧了&#xff0c;显示自然是View&#xff0c;Model提供数据&#xff08;访问数据都靠其中的索引QModelIndex&#xff09;,控制自然就是代理了&#xff0c;而且关键是代理&#xff0c;因为代理的作用是在数据模型和显示vi…...

代码随想录day23

669. 修剪二叉搜索树 https://leetcode.cn/problems/trim-a-binary-search-tree/ 首先分情况&#xff1a;root是null直接返回&#xff1b;root值小于low&#xff0c;root直接变为right&#xff1b;root值大于high&#xff0c;root直接变为left&#xff1b;当前遍历到的结点的左…...

【测试方法】Android 7 及以上系统信任用户自定义证书

一、背景 测试工作经常会启用代理服务来协助测试&#xff08;用于抓包、mock 数据、埋点自动化测试等&#xff09;&#xff0c;而 Android 7 及以上系统版本不再信任用户自己导入的 CA 证书&#xff0c;导致无法在 Android 7 及以上系统的设备上处理 https 协议的请求。 二、操…...

(深度学习快速入门)第四章第六节:重要和常见的卷积神经网络结构

文章目录一&#xff1a;经典网络结构&#xff08;1&#xff09; LeNet-5&#xff08;CNN开山始祖&#xff09;&#xff08;2&#xff09;AlexNetA&#xff1a;简介B&#xff1a;网络结构&#xff08;3&#xff09;VGGNetA&#xff1a;简介B&#xff1a;网路结构二&#xff1a;复…...

数据值中查找数学公式:TuringBot Crack

TuringBot 是一款桌面软件&#xff0c;它使用符号回归从数据值中查找数学公式。 终极回归工具 假设您想从一组输入变量中预测一个数值。到 2023 年&#xff0c;大多数人会采用以下两种方式之一&#xff1a; 对数据拟合直线或多项式。使用一些极其复杂的黑盒方法&#xff08;神经…...

RESA车道线路沿检测

一、当前车道线检测遇到的问题 1、车道标注中固有的稀疏监督信号&#xff0c;使其一直很有挑战性 2、传统卷积不能很有效的提取细长的车道线和路沿(方格内有效特征很少)&#xff0c;没有利用形状先验 3、SCNN提出在行列间传递信息&#xff0c;但是顺序信息传递是耗时的&…...

Java 最接近原点的 K 个点

最接近原点的 K 个点中等给定一个数组 points &#xff0c;其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点&#xff0c;并且是一个整数 k &#xff0c;返回离原点 (0,0) 最近的 k 个点。这里&#xff0c;平面上两点之间的距离是 欧几里德距离&#xff08; √(x1 - x2)2 (y…...

2023年情人节即将到来,跨境卖家们准备好了吗?

再过不久&#xff0c;就是一年一度的2月14日情人节。这不仅是一个浪漫的节日&#xff0c;同时也是一个促销的大好时机。情人节是美国的第四大消费节日&#xff0c;Nox聚星数据显示&#xff0c;2022年美国情人节消费高达239亿美元&#xff0c;同比增长9.6%。 目前情人节相关的热…...

游戏服务器丢包该怎么办

如果游戏玩家用户在多人游戏中遇到延迟和卡顿&#xff0c;尽管所使用的独立服务器提供高速连接&#xff0c;也可能遇到数据包丢失的问题。下面本文将深入探讨什么是丢包&#xff0c;什么不是丢包&#xff0c;并探索一些简单的解决方案。文章后续还将解释有时无法解决丢包问题的…...

【Hadoop】面试

文章目录1.MR流程2. Namenode、Datanode、SecondaryNamenode作用3. Hdfs的介绍与应用场景4. SecondaryNamenode如何恢复数据&#xff08;检查点机制)5. 小文件问题6. Hadoop和Spark的区别1.MR流程 数据输入——Mapper——Shuffle——Reducer——数据输出 数据输入——>Map…...

java不理解this?5分钟彻底弄懂this关键字

注&#xff1a;也可以观看视频&#xff1a;https://www.bilibili.com/video/BV1XM4y1X79jthis &#xff0c;翻译为&#xff1a;这、这个&#xff0c;在java中应该翻译为 “本对象” 或 “对象本身” &#xff0c;指向的是对象自己类似于日常的称呼&#xff0c;比如&#xff0c;…...

C/C++之动态内存申请

前言 在开发中&#xff0c;如果需要在运行时才能确定需要申请的资源类型及内存大小&#xff0c;则需要进行动态内存申请&#xff0c;C提供了mallco/free来进行资源申请,C还提供了new/delete以及new[]/delete[]来申请资源&#xff0c;手动申请资源需要非常谨慎&#xff0c;如果…...

数据结构与算法(1)稀疏数组

当一个数组中大部分元素为 0&#xff0c;或者为同一个值的数组时&#xff0c;可以使用稀疏数组来保存该数组。 稀疏数组的处理方法是: ①记录数组一共有几行几列&#xff0c;有多少个不同的值&#xff1b; ②把具有不同值的元素的行列及值记录在一个小规模的数组中&#xff0c;…...

Python入门第二课——Python的变量和简单数据类型

目录前言一、变量变量的命令规则&#xff1a;二、简单的数据类型1.字符串2.整数3.浮点数三、注释总结前言 学习任何计算机语言之前我们都需要了解该语言的变量和简单的数据类型&#xff0c;这部分内容往往很简单&#xff0c;同时也是很多人会忽略的地方&#xff0c;要知道&…...

Redis设计与实现 -- 浅谈Redis持久化

在讲解Redis持久化相关的话题之前&#xff0c;我们需要了解的是Redis为什么这么快&#xff1f;也就是Redis的IO模型 – 多路复用。 我们一句话概括为什么Redis这么快&#xff1a; Redis是单线程的&#xff0c;使用多路复用的IO模型。(当然&#xff0c;这只是很重要的一个方面&…...

SP800_186_OverView

文章目录2. Overview of Elliptic Curves2.1 Non-binary Curves2.1.1 Curves in Short-Weierstrass Form2.1.2 Montgomery Curves2.1.3 Twisted Edwards Curves2.2 Binary Curves3. Recommended Curves for U.S. Federal Government Use3.1 Choice of Underlying Fields3.1.2. …...

全球化安全生产 质量保障体系建设探索

作者&#xff1a;肖刚毅、张俊、李晶磊&#xff08;全球化业务平台团队&#xff09; 全球化电商中的业务、技术及架构和国内技术都有一定差异&#xff0c;从安全生产保障和质量保障角度&#xff0c;这些差异带来了更多的挑战&#xff0c;本文将为大家分享安全生产和质量保障相关…...

手机发射机的功能电路(4)---上变频器、功率放大器

一、发射上变频器 发射上变频器实际上是一个频谱搬移电路,它存在于带发射上变频的发射机电路结构中。在发射上变频器中,发射中频处理电路输出的发射已调中频信号,与RXVCO或UHFVCO、RFVCO)信号进行混频,得到最终发射信号。发射上变频器也是一个混频电路,前面讲混频器时说,混频器…...

记一次 Mockito.mockStatic 泄漏导致的单元测试偶发报错排查过程

相信用 Java 写过单元测试的读者们对 Mockito 不会陌生。至于 Mockito 是什么&#xff0c;为什么要用 Mockito&#xff0c;本文不再赘述。本文记录了一次在 Apache ShardingSphere 项目中&#xff0c;由 Mockito.mockStatic 使用不当导致的单元测试偶发报错排查过程。 文章目录…...