OCR文本检测模型:FCENet论文阅读笔记

2023-11-04


前言

最近在查找OCR开源项目时,发现了商汤公司的MMOCR,它和百度公司的PaddleOCR一样都是用于OCR文本检测和识别的开源框架,里面也集成了很多当下比较优秀的检测与识别模型,比如DBNet, CRNN等。之前有用过PaddleOCR,还真没用过MMOCR。出于好奇,研究了下MMOCR支持的检测与识别模型,发现了在PaddleOCR里没有实现的两个2021年的新模型,一个是用于文本检测的FCENet模型,一个用于文本识别的SegOCR模型,这里主要跟大家分享下FCENet模型。

看MMOCR检测结果还不错, 和DBNet相比(MMOCR测试)好像FCENet的结果更好一些,但是从测试数据上看,FCENet的测试图像分辨率更高,epoch数量也更大,而且好像backbone也不相同,所以仅从数据中就说FCENet比DBNet更好是不可靠的。

MMOCR中DBNet测试结果:
在这里插入图片描述
MMOCR中PCENet测试结果:
在这里插入图片描述

论文链接:Fourier Contour Embedding for Arbitrary-Shaped Text Detection


摘要(Abstract)

任意形状文本检测的主要挑战就是能够设计一个足够好的文本实例表示,能够允许网络去学习多样的文本几何变化。大部分现有的方法是对图像中文本实例进行空域建模,即在笛卡尔或者极坐标系下的掩膜(mask)或者轮廓点序列建模。然而,掩膜表示可能带来高成本的后处理,点序列的方式对高度弯曲的文本形状建模可能有容量限制的问题。为了解决这些问题,论文在傅里叶域(Fourier,通常说的频域)对文本实例建模,提出一种新颖的傅里叶轮廓嵌入(Fourier Contour Embedding, FCE)的方法来将任意形状的文本轮廓表示为紧凑的特征。论文在此基础上搭建了FCENet,包括特征提取层(backbone),特征金字塔网络(FPN, neck)和由反向傅里叶变换(IFT)和非极大值抑制(NMS)组成的简单后处理。和之前的方法不同,在测试期间,FCENet首先为文本实例预测傅里叶特征,然后根据IFT和NMS来重新构建文本轮廓。实验证明FCE对定位场景文本的轮廓是非常准确的鲁棒的,对高度弯曲的文本形状也是如此;实验也验证了FCENet对任意形状文本检测的效率和优秀的泛化能力。实验结果表明了FCENet在CTW1500和Total-Text数据集上获得当时最优结果,特别是在有挑战性的高度弯曲文本子集中。

1. 介绍(Introduction)

在这里插入图片描述

论文中,在傅里叶域中对文本实例轮廓建模取代以前空域建模的方法,通过使用傅里叶变换可以以一种鲁棒且简单的方式通过渐进近似来拟合任何封闭轮廓(所有文本实例都是封闭的吗?如果不是封闭的,会怎么样?)。Fig.1(a)表明傅里叶变换可以准确拟合极其复杂的形状,比如肖像素描,通过使用非常紧促的特征,比如 K = 125 K=125 K=125,表明随着傅里叶度数 k k k的增加,重构的形状越接近真实(Ground Truth)。和 T e x t R a y TextRay TextRay 这个在极坐标系下使用文本轮廓点序列的当时最优模型相比,论文提出的傅里叶轮廓表示可以对高度弯曲的文本更好地建模,如Fig.1(b-c)所示。

论文提出FCE方法将文本实例轮廓从点序列转换为傅里叶特征向量。首先,论文提出一种重采样机制来获得每一文本轮廓固定数量的稠密点。为了保证傅里叶特征向量的独特性,论文将文本轮廓域穿过文本中心点的水平线的最右边的交点作为采样起始点,固定采样方向为顺时针方向,沿着文本轮廓进行等间隔采样。其次,空间域中轮廓采样点序列通过傅里叶变换被嵌入到傅里叶域中。

FCE对于文本实例表示而言由三点优势:

  1. 灵活(Flexible):任何闭合轮廓,包括极其复杂的形状,都可以被准确拟合;
  2. 紧凑(Compactness):傅里叶特征向量是紧凑的,在实验中,傅里叶度数 K = 5 K=5 K=5就可以实现文本精确近似;
  3. 简单(Simplicity):采样点序列与傅里叶特征向量间通过傅里叶变换和反傅里叶变换就可以实现,没有引入复杂的后处理(傅里叶变换与反傅里叶变换不是很耗时吗?即使有快速傅里叶变换方法,但是和普通空间域操作相比还是需要更长的时间)。

配备了FCE,论文搭建了FCENet用于任意形状文本检测。FCENet由三部分组成:backbone - ResNet50_DCN,即配备了可变形卷积的残差网络模型作为特征提取层;特征金字塔网络(FPN)作为neck层;FCE作为head层。这个head层由两个独立的分支组成:分类分支和回归分支。分类分支用来预测文本区域掩膜和文本中心区域掩膜。回归分支用来预测傅里叶域中文本的傅里叶特征向量,然后将该特征向量输入到反向傅里叶变换进行文本轮廓点序列的重建。真实(Ground Truth)文本轮廓点序列用作监督信号。由于FCE的重采样机制,回归分支中的损失兼容不同数据集,即使像CTW1500和Total-Text这样每一个文本实例有不同数量的轮廓点。

实验证实了FCENet对于任意形状文本检测的有效性和优秀的泛化能力。而且,FCENet在CTW1500和Total-Text数据集上超过了当时最优模型,尤其是在高度弯曲文本子集中。

论文的主要贡献:

  1. 提出FCE方法,它可以准确近似任意闭合形状,包括任意形状的文本轮廓,生成紧凑的傅里叶特征向量;
  2. 提出FCENet,第一个在傅里叶域中预测文本实例的傅里叶特征向量,然后通过反向傅里叶变换在图像空间域中重建文本轮廓点序列。这个过程可以进行端到端的学习,不需要任何复杂的后处理过程就可以进行推理。
  3. 对提出的FCE和FCENet进行了大量的实验验证。实验结果表明了FCE具有优秀的表示能力,特别在高度弯曲的文本方面;当在小数据集上进行训练时,FCENet有很好的泛化能力。而且,FCENet在CTW1500和Total-Text数据集上超过了了当时最优模型。(个人表示很期待FCENet在中文检测上的能力

2. 相关工作(Related Work)

论文主要就文本检测的两个主要方向进行了阐述:基于分割的方法和基于回归的方法,这里就不细说了,大家感兴趣可以自行阅读论文。


3. 方法(Approach)

这一章节,首先引入FCE方法,它可以将任意形状的文本轮廓近似表示为紧凑的傅里叶特征向量。然后提出了配备FCE的FCENet来检测任意形状的文本。

3.1 傅里叶轮廓嵌入(Fourier Contour Embedding)

在这里插入图片描述
论文使用一个复函数来表示任一文本闭合轮廓:
在这里插入图片描述
上式中, i i i表示复函数的虚部, t ∈ [ 0 , 1 ] t\in [0,1] t[0,1] ( x ( t ) , y ( t ) ) (x(t),y(t)) (x(t),y(t))表示在时刻 t t t的空间坐标。因为 f f f是一个闭合轮廓,所以 f ( t ) = f ( t + 1 ) f(t)=f(t+1) f(t)=f(t+1) f ( t ) f(t) f(t)的反傅里叶变换表示为:
在这里插入图片描述
上式中, k k k表示频率, c k c_{k} ck表示傅里叶系数,用它来描述频率 k k k的初始状态。公式中每一个累加单元 c k e 2 π i k t c_{k}e^{2\pi ikt} cke2πikt表示了一个圆形移动,它使用一个初始右旋向量 c k c_{k} ck和固定频率 k k k。因此,这个轮廓可被视为不同频率的圆形移动的组合,如图Fig.2中粉色圆所示。从公式(2)可知,低频单元可以定位粗粒度的文本轮廓,高频单元可定位轮廓的细节。论文经验发现仅保留 K K K个最低(论文实验中 K = 5 K=5 K=5)的频率同时废弃其它频率单元就可以找到满意的近似文本轮廓,如图Fig.5所示。
在这里插入图片描述
因为无法获得实际应用中文本轮廓函数 f f f的分析形式(个人理解就是连续函数),论文对连续函数 f f f离散化到 N N N个点,即 f ( n N ) {f(\frac{n}{N})} f(Nn),这里 n ∈ [ 1 , . . . , N ] n\in [1,...,N] n[1,...,N]。这里,公式(2)中的 c k c_{k} ck可通过如下傅里叶变换公式计算:
在这里插入图片描述
这里, c k = u k + i v k c_{k}=u_{k} + iv_{k} ck=uk+ivk u k u_{k} uk表示实部, v k v_{k} vk表示虚部。当 k = 0 k=0 k=0时, c 0 = u 0 + i v 0 = 1 N ∑ n f ( n N ) c_{0} = u_{0} + iv_{0}=\frac{1}{N}\sum_{n}{f(\frac{n}{N})} c0=u0+iv0=N1nf(Nn),表示轮廓的中心位置。对于任一文本轮廓 f f f,FCE方法可以用一个紧凑的 2 ( 2 K + 1 ) 2(2K+1) 2(2K+1)维的向量 [ u − K , v − K , . . . , u 0 , v 0 , . . . , u K , v K ] [u_{-K}, v_{-K}, ..., u_{0}, v_{0}, ..., u_{K}, v_{K}] [uK,vK,...,u0,v0,...,uK,vK]在傅里叶域中表示,论文称它为傅里叶特征向量。

FCE方法包括两个过程:重采样阶段和傅里叶变换阶段。在重采样阶段,在文本轮廓上按照固定采样点数 N N N(论文实验中 N = 400 N=400 N=400)采样,获得重采样点序列 { f ( 1 N ) , . . . , f ( 1 ) } \{f(\frac{1}{N}), ..., f(1)\} {f(N1),...,f(1)}。这个重采样过程是必须的,这是因为不同的数据集文本实例有不同的真实(ground truth)点数,一般相对比较小,比如 CTW1500中有14个轮廓点,然而Total-Text仅有 4   8 4~8 4 8个轮廓点。重采样策略让FCE能够使用相同的配置兼容所有的数据集。在傅里叶变换阶段,重采样点被转换为相应的傅里叶特征向量中。

傅里叶特征向量唯一性:从以上FCE的处理过程中,我们可以很简单的看到:不同的重采样点序列可能导致不同的傅里叶特征向量,即使是对于相同的文本轮廓也是如此。为了保证文本轮廓特征向量的独特性,并且让网络训练更加稳定,论文对起始点,采样方向以及移动速度 f ( t ) f(t) f(t)进行限制:

  1. 起始点:设置起始点 f ( 0 ) ( 或 者 f ( 1 ) ) f(0) (或者f(1)) f(0)f(1)为最右边轮廓与通过中心点 ( u 0 , v 0 ) (u_{0}, v_{0}) (u0,v0)的水平直线的交点。
  2. 采样方向:总是研制文本轮廓顺时针方向进行重采样;
  3. 统一速度:对文本轮廓采样点统一,即相邻采样点距离相同。

说实话,这部分读了几遍也不理解FCE方法的傅里叶变换过程是怎么学习的,为什么要学习傅里叶变换过程?可能要阅读源码才能理解吧

3.2 FCENet

在这里插入图片描述
基于FCE方法,论文提出了无锚框(anchor free)的FCENet用来检测任意形状的文本。

网络架构
PCENet使用了自顶向下的方式,如图Fig.3所示,包括带可变形卷积网络的ResNet50的特征提取曾作为backbone, 特征金字塔网络作为neck层用来提取多尺度特征,以及傅里叶预测header。这个header包含两个分支,分别用来预测分类与回归。每个分支都由3个 3 × 3 3\times 3 3×3卷积层和1个 1 × 1 1\times 1 1×1卷积层组成,每一卷积层后紧跟着一个 R e L U ReLU ReLU非线性激活函数层。

在分类分支,论文预测文本区域(TR, Text Regions)的每一像素的掩膜。论文发现文本中心区域(TCR, Text Center Region)的预测能进一步提升性能。论文认为这就是因为TCR可以 过滤掉文本边界的低质量预测。

在回归分支,对文本中的每一像素回归得到傅里叶特征向量。为了能够处理不同尺度的文本实例, P 3 , P 4 , P 5 P3, P4, P5 P3,P4,P5特征图对应小、中、大的文本实例。

使用IFT和NMS将检测结果从傅里叶域到空间域重建, 如图Fig.4。
在这里插入图片描述
生成Ground-Truth
对于分类任务,论文使用了 T e x t S n a k e TextSnake TextSnake中的方式来获得TCR的掩膜,通过使用收缩因子为 0.3 0.3 0.3来收缩文本区域,如Fig.2中绿色掩膜区域。对于回归任务,论文计算真实(ground truth)轮廓的傅里叶特征向量 c ‾ \overline{c} c通过使用FCE方法。注意对于在一个文本实例掩膜的所有像素,论文预测文本轮廓,因此需要在在复数域坐标系中 ( 0 , 0 ) (0,0) (0,0)位置对应的像素的傅里叶特征向量。在相同的文本实例中不同的像素共享相同的傅里叶特征向量,除了 c 0 c_{0} c0

从论文中没法了解详细的生成的Ground-Truth的过程,看来还是要看源码啊

损失函数
基于FCE的网络的优化目标函数如下:
在这里插入图片描述
上式中, L c l s , L r e g L_{cls},L_{reg} Lcls,Lreg分别表示分类损失和回归损失, λ \lambda λ表示平衡系数,论文中使用 λ = 1 \lambda = 1 λ=1

L c l s L_{cls} Lcls由两部分组成:
在这里插入图片描述
上式中 L t r , L t c r L_{tr}, L_{tcr} Ltr,Ltcr分别表示文本区域与文本中心区域的交叉熵损失。为了解决样本不平衡问题,对于 L t r L_{tr} Ltr使用 O H E M OHEM OHEM正负采样比率为 1 : 3 1:3 1:3

对于 L r e g L_{reg} Lreg,论文不是对预测的傅里叶特征向量与相应的真实值进行最小化距离优化,而是对重建后的空间域文本轮廓进行最小化优化,更能反应文本检测的质量,公式如下:
在这里插入图片描述
这里 l 1 l_{1} l1表示 s m o o t h − l 1 smooth-l_{1} smoothl1损失, F − 1 ( ⋅ ) F^{-1}(\cdot) F1()表示公式(2)中的IFT。 T T T表示文本区域像素索引。 c i ‾ , c i ^ \overline{c_{i}}, \hat{c_{i}} ci,ci^分别表示像素 i i i的真实傅里叶特征向量和预测傅里叶特征向量。如果像素 i i i属于对应的文本中心区域,那么 w i = 1 w_{i}=1 wi=1,否则 w i = 0.5 w_{i}=0.5 wi=0.5 N ′ N^{'} N表示在文本轮廓上采样点数。如果 N ′ N^{'} N太小( N ′ < 30 N^{'}<30 N<30),将造成过拟合。因此,论文实验中设置 N ′ = 50 N^{'}=50 N=50

回归损失对于FCENet是非常重要的。在4.4章节的消融研究中,结果表明它分别对CTW1500和Total-Text数据集带来 6.9 % 6.9\% 6.9% 9.3 % 9.3\% 9.3% h-mean提升。

读完后的感觉就是,可能看源码会更清晰,捂脸啊


4.实验(Experiments)

这部分,论文首先验证了FCE对文本实例建模的有效性通过和两个最近SOTA任意形状文本表示方法,比如 T e x t R a y , A B C N e t TextRay, ABCNet TextRay,ABCNet。然后评估FCENet的文本检测能力。论文也对FCENet每一组件的有效性进行了消融研究,通过减少训练数据来验证模型的泛化能力。论文也和最近的SOTA方法在CTW1500和Total-Text数据集上做了大量的对比。因为这些对比数据集也包含大量非弯曲文本,论文构建了一个更有挑战性的子集,它包含高度弯曲或者高度非常规的文本。

之后的具体实验配置与实验结果这里就不细说了,大家感兴趣可以自行阅读论文,特别是对网络超参数配置这块,论文中都有细说,包括卷积核通道数,多尺度特征提取层缩放比例,使用的数据增强策略,论文使用的GPU配置,模型的优化策略等。

这里就简单粘贴下论文实验结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


总结

说实话,读完这篇论文也就了解了大体概念,至于为什么这样做就能提高文本检测的性能,至今还是不理解,还有就是论文中对FCE的介绍也不是很全面,后面还是看源码可能会有更深的理解,也可能是个人能力太菜,无法理解,上文如有失误,欢迎指正,谢谢大家!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OCR文本检测模型:FCENet论文阅读笔记 的相关文章

  • 如何快速申请GPT账号?

    详情点击链接 如何快速申请GPT账号 一OpenAI 1 最新大模型GPT 4 Turbo 2 最新发布的高级数据分析 AI画图 图像识别 文档API 3 GPT Store 4 从0到1创建自己的GPT应用 5 模型Gemini以及大模型
  • 用于 OCR 的 Python OpenCV 倾斜校正

    目前 我正在开发一个 OCR 项目 需要读取标签上的文本 请参见下面的示例图片 我遇到了图像倾斜的问题 我需要帮助修复图像倾斜 以便文本是水平的而不是成角度的 目前 我正在使用的过程尝试从给定范围 下面包含代码 对不同角度进行评分 但这种方
  • 训练 tesseract 后,tessdata 文件夹中应包含哪些文件?

    我使用 tesseract 作为我的 ANPR 应用程序的 OCR 引擎 我已经用车牌字体训练了 tesseract 3 01v 但我需要知道 tessdata 文件夹中应包含哪些文件 我应该使用安装 tesseract 3 01v 的同一
  • opencv 中的二值化和背景过滤

    不久 我想在OCR之前进行预处理程序 建议来自ABBYY的技术 http www abbyy developers eu en tech insideocr adaptive binarisation 文章分为两部分 Background
  • Tesseract OCR Android tessdata 目录未找到

    我目前正在使用 OCR 开发 Android 应用程序 并且已经达到了调用 BaseAPI init 方法的程度 我不断收到错误消息 指出该目录必须包含 tessdata 作为子文件夹 我已检查文件目录是否包含其中包含训练数据文件的文件夹
  • 了解 OCR 的 Freeman 链码

    请注意 我确实在寻找问题的答案 我是not寻找一些源代码或一些学术论文的链接 我已经使用了源代码 并且我已经阅读了论文 但仍然没有弄清楚这个问题的最后部分 我正在研究一些快速屏幕字体 OCRing 并且取得了很好的进展 我已经找到基线 分离
  • Tess-2 OCR 不工作

    我试图在 Android 上使用 tess two 从图像中获取文本 但这给了我一个非常糟糕的结果 01 16 12 00 25 339 I Tesseract native 29038 Initialized Tesseract API
  • unicharset_extractor:找不到命令

    我想使用超正方体创建新的列车数据 因此 请按照以下网站中提到的步骤进行操作 https blog cedric ws how to train tesseract 301 https blog cedric ws how to train
  • 在Python中从pdf中提取印地语编写的文本[重复]

    这个问题在这里已经有答案了 我想从 pdf 文档中提取印地文输入的文本 我已附上示例页面的图像 https i stack imgur com UkT86 jpg我正在处理 我尝试使用 pdfminer 从中获取文本 但文本是乱码 可能是由
  • 超正方错误 - 图像太大

    对于大小为 5 MB 的图像 我从 tesseract 收到以下错误 Tesseract 开源 OCR 引擎 v3 01 与 Leptonica 第0页 图片太大 39667 56133 处理过程中出错 文件大小是否有限制 或者是否有参数可
  • pytesseract 错误 Windows 错误 [错误 2]

    您好 我正在尝试使用 python 库 pytesseract 从图像中提取文本 请查找代码 from PIL import Image from pytesseract import image to string print image
  • OCR 扑克牌 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我决定做一个有趣的项目 我想将扑克牌的图像作为输入并返回其等级和花色 我认为我只需要查看左上角 因为那里包含了所有信息 它应该是稳健的
  • 裁剪图像后,如何找到新的边界框坐标?

    这是我得到的收据图像 我使用 matplotlib 绘制了它 x1 y1 x2 y2 x3 y3 x4 y4 bbox coords 650 850 1040 850 1040 930 650 930 image cv2 imread IM
  • 用于屏幕文本的 OCR(光学字符识别)

    我正在尝试创建一个软件 通过捕获屏幕截图来自动化 PC 然后使用 OCR 光学字符识别 来查找要单击的特定按钮 例如 我已经有了鼠标和键盘控制部分 但现在 我需要 OCR 来处理屏幕截图 我发现 Tesseract OCR 似乎不能很好地处
  • 屏幕截图中低分辨率文本的 OCR

    我正在编写一个 OCR 应用程序来从屏幕截图图像中读取字符 目前 我只关注数字 我的方法部分基于这篇博文 http blog damiles com 2008 11 basic ocr in opencv http blog damiles
  • 如何将 Tesseract 导入 Angular2 (TypeScript)

    我正在尝试将 Tesseract 导入 Angular2 TypeScript 我可以看到它保存到 node modules 文件夹中 但是在使用时 import Tesseract from types tesseract js it s
  • 在 google Vision OCR 中被识别为单个单词的特殊字符?

    我试图让谷歌视觉 OCR 正则表达式可搜索 我已经完成了它 并且当文档仅包含英文字符时效果很好 但当有其他语言的文本时 它就会失败 发生这种情况是因为我在谷歌视觉单词组件中只有英文字符 如下所示 VISION API WORD COUNTE
  • Tess4j - Pdf 到 Tiff 到 tesseract - “警告:分辨率 0 dpi 无效。使用 70 代替。”

    我正在使用 tess4j net sourceforge tess4j tess4j 4 4 0 并尝试对 pdf 文件进行 OCR 因此 据我了解 我必须首先将 pdf 转换为 tiff 或 png 其中有任何建议吗 我这样做是这样的 t
  • 如何去除给定图像中的噪声,使 ocr 输出完美?

    我已经对这个孟加拉文本图像进行了大津阈值处理 并使用 tesseract 进行 OCR 但输出非常糟糕 我应该应用什么预处理来消除噪音 我也想校正图像 因为它有轻微的倾斜 我的代码如下 import tesserocr from PIL i
  • 将姓名拆分为名字和姓氏 Java(Android OCR)[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我使用本机 Android JAVA 创建了一个 OCR 光学字符识别 应用程序 我可以将图像转换为文本视图 但是我如何使用这些词分别识别名

随机推荐

  • 思科设备命令讲解(超基础)

    作者 小刘在C站 个人主页 小刘主页 每天分享云计算网络运维课堂笔记 努力不一定有回报 但一定会有收获加油 一起努力 共赴美好人生 夕阳下 是最美的绽放 树高千尺 落叶归根人生不易 人间真情 目录 一 静态路由配置命令 二 默认路由配置命令
  • 2023年前端面试题总结

    某多多 1 Promise实现原理 2 vue组件间通信 3 性能优化 4 vuex数据流动过程 5 谈谈css预处理器机制 6 算法 Promise串行 某眼电影 1 vue组件间通信 2 react和vue更新机制的区别 3 Vue3
  • 超硬货,大型 Rust 项目经验分享

    本篇文章中 我将分享我组织大型 Rust 项目的经验 但这绝不是权威的 只是我通过尝试和错误中发现的一些小技巧 Cargo 作为 Rust 的构建系统 遵循约定大于配置的原则 它不仅为小型项目提供了一套良好的默认配置集 尤其为公共 crat
  • Flash学习笔记

    快捷键 1 F8 可以将散件转化为元件 2 Ctrl 2 满画布显示 3 F6 插入关键帧 4 Ctrl Enter 预览 一 第一章 1 颜料桶 更改填充色 墨水瓶 改变边框色 2 动画的分类 位移动画 形变动画 逐帧动画 路径动画 蒙版
  • Windows server 2012_R2 无法安装VMware Tools解决方法(详细)

    百度网盘 链接 https pan baidu com s 1QbIHSv1Df8eVAIH2ym1g8Q pwd rdi4 提取码 rdi4 官网下载链接 KB2919442https www microsoft com zh cn do
  • Table固定表头固定左侧列

    效果图 思路 把需要固定的内容进行拆封 比如左侧的表头和内容 右侧的表头和内容 都单独的存放在一个table中 在滚动条滚动的时候通过jquery scroll 区分横向纵向滚动条的方法来实现左侧内容的滚动和右侧表头的滚动 第一步 div
  • 直接线性变换解法(DLT)用于标定相机

    直接线性变换法是建立像点坐标和相应物点物方空间坐标之间直接的线性关系的算法 特点 不需要内外方位元素 适合于非量测相机 满足中 低精度的测量任务 可以标定单个相机 1 各坐标系之间的关系推导直接线性变换解法 1 1 像素坐标系与像平面坐标系
  • MATLAB中用Application Complier生成可执行文件的步骤及相关注意事项

    生成可独立执行的软件 可以分成以下5个主要的步骤 1 打开Application Complier 2 添加主程序文件 3 可执行文件设置 4 选择打包方式 5 相关文件解释 大体步骤多类似 里面有些容易出错的小细节 相关设置需要注意的有
  • node中使用express+mongodb实现分页查询

    文章目录 引言 一 分页案例 二 查询方法扩展介绍 1 find 2 limit 3 skip 4 populate 总结 引言 在Web应用程序开发中 分页查询是必不可少的功能之一 Node js提供了许多优秀的工具和框架来实现分页查询
  • 马虎的算式

    import java util public class Main public static void main String args int ans 0 for int a 1 a lt 10 a for int b 1 b lt
  • Struts2输入校验(XML方式)

    本章主要介绍struts2的XML配置方式输入校验 以下将结合一个实例程序进行说明 代码结构 关键代码 RegistAction javapackage com alfred regist action import java util D
  • libuv 高并发异步使用

    问题来源 在开发libuv客户端 服务器时 需要并发的向客户端发送数据 libuv就会用到 uv write函数 因此 我的初步方案是 1 创建线程池 2 线程池分配数据内存buf 并打包 3 将包发给 uv write 4 uv writ
  • 为什么越来越多的企业选择云数据存储而放弃本地数据存储?

    随着企业的发展 它们会产生大量数据 企业已经意识到 利用他们的数据做出数据驱动的决策对于创新和保持竞争优势至关重要 本文将会探讨企业在收集和分析大数据时可能面临的主要挑战 以及将企业数据仓库部署到本地或云数据存储的选择 我们将根据安全性 成
  • 金融行业软件测试

    金融行业软件测试 一 什么是金融行业 二 金融行业的业务特点 1 金融行业的业务特点 三 金融行业测试主要测试范围 1 功能测试 2 业务验证测试 3 客户端测试 4 接口测试 5 性能测试 6 安全性测试 四 金融行业软件测试的现状 五
  • Qt-Web混合开发-QWebEngineView加载网页最小示例(1)

    Qt Web混合开发 QWebEngineView加载网页最小示例 文章目录 Qt Web混合开发 QWebEngineView加载网页最小示例 1 概述 2 实现效果 3 实现功能 4 关键代码 5 源代码 更多精彩内容 个人内容分类汇总
  • docker原理及服务编排

    一 什么是docker Docker 是一个开源项目 诞生于2013年初 最初是dotCloud公司内部的一个业余项目 它基于Google公司推出的Go语言实现 项目后来加入了Linux基金会 遵从了Apache 2 0协议 项目代码在Gi
  • C++之 引用(refer)

    含义 变量的别名 第二名称 作用 使用别名访问原名的内存空间 即别名与原名保存同样的内存空间 语法 数据类型 别名 原名 int b a 注意事项 引用必须要初始化 对于一个变量a 不能直接写int b 而需要写int b a 引用在初始化
  • 水箱计算机控制系统设计,三容水箱计算机控制实验系统设计与控制算法研究

    摘要 三容水箱是一种典型控制对象 许多现场控制类型可以抽象成三容水箱数学模型 可作为自动化控制领域研究对象 三容水箱是一种柔性结构系统 通过水箱管路的组合形成各阶控制对象类型并且对各种控制算法进行设计 仿真和验证 目前三容水箱存在实验类型单
  • zookeeper报错 JAVA_HOME is not set

    zookeeper报错 JAVA HOME is not set 很多开发者安装zookeeper的时候 应该会发现到这么一个问题 JAVA HOME is not set 好的 那么这个是什么意思呢 就是说你的 JAVA HOME 变量没
  • OCR文本检测模型:FCENet论文阅读笔记

    文章目录 前言 摘要 Abstract 1 介绍 Introduction 2 相关工作 Related Work 3 方法 Approach 3 1 傅里叶轮廓嵌入 Fourier Contour Embedding 3 2 FCENet