OCR 场景文本识别: 文字检测 + 文字识别 您所在的位置:网站首页 links分为 OCR 场景文本识别: 文字检测 + 文字识别

OCR 场景文本识别: 文字检测 + 文字识别

2023-08-21 22:49| 来源: 网络整理| 查看: 265

OCR 场景文本识别: 文字检测 + 文字识别

一. 应用背景

OCR(Optical Character Recognition)文字识别技术的应用领域主要包括: 证件识别, 车牌识别, 智慧医疗, PDF 文档转换为 Word, 拍照识别, 截图识别, 网络图片识别, 无人驾驶, 无纸化办公, 稿件编辑校对, 物流分拣, 舆情监控, 文档检索, 字幕识别文献资料检索等. OCR 文字识别主要可以分为: 印刷体文字识别和手写体文字识别. 文字识别方法的一般流程为: 识别出文字区域, 对文字区域矩形分割成不同的字符, 字符分类, 识别出文字, 后处理识别矫正.

二. 文字检测

文字检测是文字识别过程中的一个非常重要的环节, 文字检测的主要目标是将图片中的文字区域位置检测出来, 以便于进行后面的文字识别, 只有找到了文本所在区域, 才能对其内容进行识别.

1.[CTPN]

CTPN, 全称是 "Detecting Text in Natural Image with Connectionist Text Proposal Network", 将文本行在水平方向解耦成 slices 进行检测, 再将 slices 区域合并成文本框. CTPN 结构与 Faster R-CNN 类似, 但加入了 RNN(LSTM 层)用于序列的特征识别来提高检测精度, 目前 CTPN 针对水平长行文本的检测是工业级的, 算法鲁棒.

算法流程:

Feature Map:N(images) - C(channels) - H(height) - W(width)

(1). 骨干网络 VGG16 提取特征, 第 5 个 block 的第三个卷积层 conv5(stride=16,size=N*C*H*W)作为特征图;

(2). 在 con5 上做 3*3 滑窗, 每个点都结合周围 3*3 区域生成 3*3*C 特征向量, 输出 N*9C*H*W 空间特征图;

(3). Reshape 特征图: N*9C*H*W -> (NH)*W*9C;

(4). 以 batch=NH,Tmax=W 的数据流输入双向 LSTM, 学习每一行的序列特征(注: LSTM/Reverse-LSTM 都包含 128 个 hidden layer),BLSTM 输出(NH)*W*256 空间序列混合特征图;

(5). Reshape 特征图:(NH)*W*256 -> N*256*H*W;

(6). 将 RNN 的结果输入到 FC 层(256*512 的矩阵参数), 变为 N*512*H*W 的特征;

(7). 将 FC 层得到的特征输入类似 Faster R-CNN 的 RPN 网络, 获得 text proposals.2k vertical coordinate 和 k side-refinement 用来回归 k 个 anchor 的位置信息并进行校准, 2k scores 表示 k 个 anchor 的类别.

(8). 采用文本线构造办法, 把 text proposal 连接成一个文本检测框.

关键策略:

(1). text proposals 网络.

左侧分支用于 b-box 回归, FC 特征图每个点配备了 10 个对应原图尺度的 Anchor(红色小矩形框确定字符位置), 宽度相等(width=[16]), 高度 10 个尺度([11,16,23,33,48,68,97,138,198,283]), 保证 Anchor 在 x 方向上覆盖原图每个点且不相互重叠并在 y 方向上覆盖差异较大的不同高度文本目标. 获得 Anchor 后, b-box regression 只修正并预测包含文本的 Anchor 的中心 y 坐标与高度 h(没预测起始坐标 x 是因为在构造标签时有固定偏移), 故 rpn_bbox_pred 有 20 个 channels. 右边分支用于 Softmax 分类, 判断 Anchor 中是否包含文本, 选出 score 大的正 Anchor.

(2). 标签构造.

如图, 给定一个文本的标注框 (x, y, w, h), 沿着水平方向进行切分, 偏移为 16 个像素(conv5 的 stride 为 16, 特征图中的一个像素对应标签的 16 的宽度), 得到了一系列的文本小片. 将左右标记为红色的小片(两端 50 像素以内) 作为 side-refinement 时候的标签, 约束网络对文本起始和终止点的矫正.

(3). 文本线构造.

如图, 有 2 个 text proposal, 包含红蓝 2 组 Anchor. 首先按水平 x 坐标排序 Anchor. 然后按照规则依次计算每个 boxi 的 pair(boxj), 组成 pair(boxi,boxj), 规则如下:

正向寻找: 1. 沿水平正方向, 寻找和 boxi 水平距离小于 50 的候选 Anchor;2. 从候选 Anchor 中, 挑出与 boxi 竖直方向 overlapv>0.7 的 Anchor;3. 挑出符合条件 2 中 Softmax score 最大的 boxj.

再反向寻找: 1. 沿水平负方向, 寻找和 boxj 水平距离小于 50 的候选 Anchor;2. 从候选 Anchor 中, 挑出与 boxj 竖直方向 overlapv>0.7 的 Anchor;3. 挑出符合条件 2 中 Softmax score 最大的 boxk.

最后对比 scorei 和 scorek: 如果 scorei>=scorek, 这是一个最长连接, 设置 Graph(i,j)=True; 如果 scorei0.7 且 score 最大的是 box7(j=7);box7 反向寻找, 满足 overlapv>0.7 且 score 最大的是 box3(k=3). 因为 scorei=3>=scorek=3,pair(box3,box7)是一个最长连接, 设置 Graph(3,7)=True. 对于 box4, 正向寻找得到 box7;box7 反向寻找得到 box3, 但 scorei=4>=scorek=3, 所以 pair(box4,box7)不是最长连接, 包含在 pair(box3,box7)中.

以这种方式, 建立一个 N*N(N 是正 Anchor 数量)的 connect graph, 并遍历 graph.Graph(0,3)=True 且 Graph(3,7)=True, 所以 Anchor index 0->3->7 组成蓝色文本区域; Graph(6,10)=True 且 Graph(10,12)=True, 所以 Anchor index 6->10->12 组成红色文本区域.

综上, 我们通过 Text proposals 确定了文本检测框.

2.[SegLink]

Seglink 是在 SSD 基础上改进的, 基本思想是: 一次性检测整个文本行比较困难, 就先检测局部片段, 然后通过规则将所有的片段进行连接, 得到最终的文本行. 可以检测任意长度和多方向的文本行, CTPN 只能检测水平方向.

全卷积网络. 输入: 任意尺寸图像; 输出: segments 和 links.

算法流程:

(1). 沿用 SSD 网络结构, VGG16 作为 Backbone 并将最后两个全连接层改成卷积层(fc6,fc7->conv6,conv7), 再额外增加 conv8, conv9, conv10, conv11, 用于提取更深的特征, 最后的修改 SSD 的 Pooling 层, 将其改为卷积层;

(2). 提取 conv4_3, conv7, conv8_2, conv9_2, conv10_2, conv11 不同层的特征图, 尺寸 1/2 倍递减;

(3). 对不同层的特征图使用 3*3 卷积, 产生 segments 和 links 来检测不同尺度文本行;

(4). 通过融合规则, 将 segment 的 box 信息和 link 信息进行融合, 得到最终的文本行.

关键策略:

(1). Segment 检测.

segment 可以看作是增加了方向信息的 b-box, 可以表示为: b = (xb,yb,wb,hb,θb). 卷积后输出通道数为 7, 包含 segment 相对于默认框 (default boxes) 的偏移量 (xs,ys,ws,hs,θs) 及 segment 是否为文字的置信度 (0,1). 特征图上的点在原图中的映射, 就是默认框的位置. 6 层特征图, 每层都要输出 segments, 例如: l 层尺寸为 wl* hl, 一个点在特征图上的坐标为(x,y), 对应原图坐标(xa,ya) 的点, 那么一个默认框的中心坐标就是(xa,ya):

不同于 SSD, 特征图每个位置只有一个长宽比为 1 的默认框, 根据当前层的感受野通过经验等式进行设置. 最后, 通过默认框和特征图回归 segment 的位置, 预测的 offsets 里除了Δx, Δy, Δw, Δh, 多了一个Δθ.

(2). Link 检测.

links 分为 Within-Layer Link 和 Cross-Layer Link:

within-layer link 在同一个 feature map 层, 特征图中每个位置只预测一个 segment, 所以对于层内 link, 我们只考虑当前 segment 与它周围的8连通邻域的 segment 的连接情况, 每个 link 有正负两个分数, 正分用来表示二者是否属于同一个单词, 负分表示二者是否属于不同单词(应断开连接). 这样, 每个 segment 的 link 是 8*2=16 维的向量, links 就是每个特征图卷积后输出 16 个通道, 每两个通道表示 segment 与邻近的一个 segment 的 link.

segment 可能会被不同的 feature map 检测到, 如果不同层输出 segment 是同一个位置, 只是大小不一样, 会造成重复检测的冗余问题. cross-layer link 连接的是相邻两层 feature map 产生的 segments. 前一层特征图的 size 是后一层的特征图的两倍, 这个 size 必须是偶数, 所以输入图像的宽和高必须是 128 的倍数. 对于跨层 link, 特征图的每个位置需要预测 2*4=8 个权重,4表示与上一层的4个邻域.

综上, conv4_3 层输出的 link 维度为 2*8=16;conv7, conv8_2, conv9_2, conv10_2, conv11 其输出的 link 维度为 2*8+2*4=24.

(3). 合并算法.

每层特征图提取出来后, 再经过卷积, 输出既有 segments 又有 links 的预测.

2 表示二分类分数(是不是字符),5表示位置信息(x, y, w, h, θ),16 表示8个同层的 neighbor 连接或不连接的2种情况,8表示前一层的 4 个 neighbor 连接与不连接情况. 对于 conv4_3: 其预测输出维度为: 2+5+2*8=23 , 因为该层没有 cross-layer link; 对于 conv7, conv8_2, conv9_2, conv10_2, conv11, 其预测输出维度为: 2+5+2*8+2*4=31.

输出一系列的 segments 和 links 后, 1. 首先人工设定α和β(对应 segments 和 links 的置信度设置不同的阈值)过滤噪声; 2. 再采用 DFS(depth first search)将 segments 看做 node,links 看做 edge, 将他们连接起来; 3. 将连接后的所有结果作为输入, 将连接在一起的 segments 当作是一个小的集合, 称为 B;4. 将 B 集合中所有 segment 的旋转角求平均值作为文本框的旋转角称为θb;5. 求 tanθb 作为斜率, 得到一系列的平行线, 求得 B 集合中所有 segment 的中心点到直线距离的和最小的那条直线; 6. 将 B 集合中所有 segment 的中心点垂直投影到 3 步骤中找到的直线上; 7. 在投影中找到距离最远的两个点(xp,yp),(xq,yq);8. 上述两点的均值作为框的中心点, 距离为框的宽, B 集合中所有 segment 的高的均值就是高.

注: 3-5 其实就是最小二乘法线性回归.

(4). 训练.

训练当前网络需要生成 groundtruth, 包括 default box 的 label, 偏移(x, y, w, h, θ), 层内 link 及跨层 link 的 label. 求 segments 和 links 的标签前先确定与其对应的 default box 的标签值. 图像只有一个文本框时, 满足如下 2 点就是正样本(否则负样本):1. default box 的中心在当前文本行内; 2. default box 的大小 al 与文本框的高 h 满足公式:. 图像中有多个文本框时, default box 对于任意文本框都不满足上述条件时为负样本, 否则为正样本, 满足多个文本框时, 该 default box 为与其大小最相近的文本框的正样本, 大小相近指的是:. 通过上述规则得到 default box 的正样本后, 基于这些正样本计算 segments 相对于 default box 的位置偏移量. offset 只对正样本有效, 负样本不需要计算.

将文本框顺时针旋转θ与 default box 进行水平对齐, 然后进行裁剪, 宽度保留与 default box 相交的部分, 最后再绕文本框中心点逆时针转回到原来的角度, 就可以得到一个 segment. 根据公式(segment 检测), 就可以求出 segment 和 default box 的偏移量, 用来训练 segment.link 的标签值只要满足下面两个条件即为真: 1. link 连接的两个 default box 都为正样本; 2. 两个 default box 属于同一个文本框.

损失函数定义如下:

ys 表示所有的 segments 的标签值, 如果第 i 个 default box 为正样本, yis=1, 否则为 0;yl 表示所有 links 的标签值; cs,cl 分别为 segments 和 links 的预测值; Lconf 为 softmax loss, 用于计算 segments 和 links 置信度的损失; Lloc 为为 Smooth L1 regression loss, 用于计算 segments 预测偏移量和标签值的损失; Ns 为图像中所有正样本的 default box 的数量; Nl 为图像中所有正样本的 links 的个数;λ1=λ2=1. 关于 Data Augmentation 和 Online Hard Negative Mining, 做法和 SSD 中一致.

3.[EAST/AdvancedEAST]

EAST 可以实现端到端文本检测.

a~d 是几种常见的文本检测过程, 典型的检测过程包括候选框提取, 候选框过滤, b-box 回归, 候选框合并等阶段, 中间过程比较冗长. EAST 模型检测过程简化为只有 FCN,NMS 阶段, 中间过程大大缩减, 且输出结果支持文本行, 单词的多角度检测, 高效准确, 适应性强. EAST 模型的网络结构分为特征提取层, 特征融合层, 输出层三大部分.

算法流程:

(1). PVANet(也可采用 VGG16,Resnet 等)作为主干网络提取特征, 并借鉴 FPN 思想, 抽取 4 个尺度 (1/4,1/8,1/16,1/32 input) 的特征图;

(2). 参考 .NET 的方法, 从 feature extractor 顶部按规则向下合并特征;

(3). 输出文本得分和文本形状. 检测形状为 RBOX 时, 输出检测框置信度, 检测框的位置角度 (x,y,w,h,θ) 共 6 个参数; 检测形状为 QUAD 时, 输出检测框置信度, 任意四边形检测框 (定位扭曲变形文本行) 的位置坐标 (x1, y1), (x2, y2), (x3, y3), (x4, y4) 共 9 个参数.

关键策略:

(1). 特征融合规则.

最后一层特征图被最先送入 uppooling 层放大2倍, 再与前一层的特征图进行 concatenate, 然后依次进行 1*1 和 3*3 卷积; 再重复上述过程 2 次, 卷积核的个数 (128,64,32) 依次递减; 最后经过 3*3,32 的卷积层.

(2). 训练.

QUAD 训练样本生成:

通常数据集提供的标注为平行四边形的四个顶点(x1, y1), (x2, y2), (x3, y3), (x4, y4), 训练网络时, 需要的将其转化为网络需要的形式, 即这个平行四边形生成的 9 个单通道图片.

通道 1: 置信度 score map.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将平行四边形的四个顶点两两相连, 连成一个四边形 Q;3. 将这个四边形向内缩小 0.3, 得到 Q1;4. 将四边形 Q1 内的点置为 1;5. 将矩阵 A 按比例缩小为原图的 1/4, 得到 score map(长 M/4, 宽 N/4).

通道 2: 四边形位置 germety map_1.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = x1-xi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_1(长 M/4, 宽 N/4).

通道 3: 四边形位置 germety map_2.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = y1-yi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_2(长 M/4, 宽 N/4).

通道 4: 四边形位置 germety map_3.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = x2-xi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_3(长 M/4, 宽 N/4).

通道 5: 四边形位置 germety map_4.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = y2-yi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_4(长 M/4, 宽 N/4).

通道 6: 四边形位置 germety map_5.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = x3-xi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_5(长 M/4, 宽 N/4).

通道 7: 四边形位置 germety map_6.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = y3-yi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_6(长 M/4, 宽 N/4).

通道 8: 四边形位置 germety map_7.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = x4-xi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_7(长 M/4, 宽 N/4).

通道 9: 四边形位置 germety map_8.

1. 生成一个大小为 MxN 的全零矩阵 A,M,N 为原图的长和宽; 2. 将四边形的四个顶点两两相连, 连成一个四边形 Q;3. 给四边形 Q 内的每一个像素赋值, A(xi,yi) = y4-yi; 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_8(长 M/4, 宽 N/4).

RBOX 训练样本生成:

通常数据集提供的标注为 5 个值 Theta,x1,y1,x3,y3, 训练网络时, 需要的将其转化为网络需要的形式, 即这个旋转的矩阵生成的 6 个单通道图片. 在此之前, 先利用 theta,x1,y1,x2,y2, 生成矩形的另外两个顶点(x2,y2),(x4,y4), 这样, 矩形的四个顶点可以表示为(x1,y1),(x2,y2),(x3,y3),(x4,y4).

通道 1: 置信度 score map.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 将矩形 Q 内的点置为 1;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 score map(长 M/4, 宽 N/4).

通道 2: 角度 angle map.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 将矩形 Q 内的点置为 theta, 如果 theta=-0.5, 那么 Q 内的所有点都为 - 0.5;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 angle map(长 M/4, 宽 N/4).

通道 3: 矩形位置 germety map_1.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 给矩形 Q 内的每一个像素赋值, A(xi,yi) = distance[ A(xi,yi), 直线 A(x1,y1)A(x2,y2)] ;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_1(长 M/4, 宽 N/4).

通道 4: 矩形位置 germety map_2.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 给矩形 Q 内的每一个像素赋值, A(xi,yi) = distance[ A(xi,yi), 直线 A(x2,y2)A(x3,y3)] ;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_2(长 M/4, 宽 N/4).

通道 5: 矩形位置 germety map_3.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 给矩形 Q 内的每一个像素赋值, A(xi,yi) = distance[ A(xi,yi), 直线 A(x3,y3)A(x4,y4)] ;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_3(长 M/4, 宽 N/4).

通道 6: 矩形位置 germety map_4.

1. 生成一个大小 MxN 为全零矩阵 A,M,N 为原图的长和宽; 2. 将矩形的四个顶点两两相连, 形成一个矩形 Q;3. 给矩形 Q 内的每一个像素赋值, A(xi,yi) = distance[ A(xi,yi), 直线 A(x4,y4)A(x1,y1)] ;4. 将矩阵 A 按比例缩小为原图的 1/4, 得到 germety map_4(长 M/4, 宽 N/4).

训练 Loss:

loss 由分数图损失 (score map loss) 和几何形状损失 (geometry loss) 两部分组成. 分数图损失采用的是类平衡交叉熵, 用于解决类别不平衡训练, 具体实战中, 一般采用 dice loss, 收敛速度更快. 几何形状损失, 针对 RBOX loss 采用 IoU 损失, 针对 QUAD loss 采用 smoothed-L1 损失. 本文中几何体数量较多, 普通的 NMS 计算复杂度过高, EAST 提出了基于行合并几何体的方法, locality-aware NMS.

为改进 EAST 的长文本检测效果不佳的缺陷, 有人提出了 Advanced EAST.Advanced EAST 以 VGG16 作为网络结构的骨干, 同样由特征提取层, 特征合并层, 输出层三部分构成, 比 EAST, 尤其是在长文本上的检测准确性更好.

三. 文字识别

文字识别, 根据待识别的文字特点一般分为定长文字, 不定长文字两大类, 前者 (如: 验证码识别) 相对简单, 这里不做分析.

1.[LSTM+CTC]

LSTM(Long Short Term Memory, 长短期记忆网络)是一种特殊结构的 RNN, 用于解决 RNN 的随着输入信息的时间间隔不断增大, 出现 "梯度消失" 或 "梯度爆炸" 的长期依赖问题. CTC(Connectionist Temporal Classifier, 联接时间分类器), 主要用于解决输入特征与输出标签的对齐问题. 由于字符变形等原因, 分块识别时, 相邻块可能会识别为同个结果, 字符重复出现. 通过 CTC 来解决对齐问题, 模型训练后, 对结果中去掉间隔字符, 去掉重复字符.

2.[CRNN]

CRNN(Convolutional Recurrent Neural Network, 卷积循环神经网络)是目前比较流行的文字识别模型, 可以进行端到端的训练, 不需要对样本数据进行字符分割, 可识别任意长度的文本序列, 模型速度快, 性能好.

算法流程:

(1). 卷积层: 从输入图像中提取出特征序列;

先做预处理, 把所有输入图像缩放到相同高度, 默认是 32, 宽度可任意长; 然后进行卷积运算(由类似 VGG 的卷积, 最大池化和 BN 层组成); 再从左到右提取序列特征, 作为循环层的输入, 每个特征向量表示了图像上一定宽度内的特征, 默认是单个像素 1(由于 CRNN 已将输入图像缩放到同样高度了, 因此只需按照一定的宽度提取特征即可).

(2). 循环层: 预测从卷积层获取的特征序列的标签分布;

循环层由一个双向 LSTM 构成, 预测特征序列中的每一个特征向量的标签分布. 由于 LSTM 需要时间维度, 模型中把序列的 width 当作 time steps."Map-to-Sequence" 层用于特征序列的转换, 将误差从循环层反馈到卷积层, 是卷积层和循环层之间的桥梁.

(3). 转录层: 把从循环层获取的标签分布通过去重, 整合等操作转换成最终的识别结果.

转录层是将 LSTM 网络预测的特征序列的结果进行整合, 转换为最终输出的结果. 在 CRNN 模型中双向 LSTM 网络层的最后连接上一个 CTC 模型, 从而做到了端对端的识别.

四. 代码实现

CTPN:https://github.com/eragonruan/text-detection-ctpnSegLink:https://github.com/dengdan/seglinkEAST:https://github.com/argman/EASTAdvancedEAST:https://github.com/huoyijie/AdvancedEASTCRNN:https://github.com/Belval/CRNN

五. Reference

https://my.oschina.net/u/876354https://zhuanlan.zhihu.com/p/34757009https://www.jianshu.com/p/109231be4a24https://zhuanlan.zhihu.com/p/37781277https://me.csdn.net/imPlok

来源: https://www.cnblogs.com/lh2n18/p/12382213.html

与本文相关文章 OCR 技术系列之三大批量生成文字训练集 从事 ocr 识别算法票总管的冼健龙 OCRopus 示例代码(OCR识别C库) OCR 技术系列之四基于深度学习的文字识别 (3755 个汉字) ocr 识别 - 中安私有云方案设计 c#验证码识别并OCR提取图片上的数字 Tesseract Ocr 文字识别 服务端调用微信小程序 OCR 识别接口实现


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有