CRAFT:Character Region Awareness for Text Detection,Naver公司的CLOVA研究院,CVPR2019

  • 其他文本检测模型,参考
  • CRAFT算法:论文阅读 Character Region Awareness for Text Detection(CRAFT)
  • 文字识别/文本检测数据集

复现工程:

  • 工程:CRAFT-Reimplementation
  • 数据集:Syndata - SynthText,数据集比较大,大约41G
  • 所使用的PyTorch版本:Which version of python and CUDA is used ?

环境:

pip3 install --user torch==1.7.0 torchvision==0.8.1 seaborn==0.11.0 tqdm==4.56.0 Polygon3==3.0.9.1

下载PyTorch的CUDA10版本

conda install pytorch==1.0.1 torchvision==0.2.2 cudatoolkit=10.0

PyTorch的历史版本,找到cu100版本,下载torch-1.0.1-cp37-cp37m-linux_x86_64.whl,torchvision正常pip安装即可。

即:

pip3 install --user torch-1.0.1-cp37-cp37m-linux_x86_64.whl
pip3 install --user torchvision==0.2.2

在CRAFT-Reimplementation工程中,修改对应的数据和模型路径之后

即可训练。


中文数据集

  • CASIA Online and Offline Chinese Handwriting Databases
  • ICDAR 2019 Robust Reading Challenge on Multi-lingual scene text detection and recognition

ICDAR 2019样本Chinese部分(下载需要注册),非常具有挑战:


CRAFT-pytorch

论文作者的工程:

测试模型:

测试逻辑

python test.py --trained_model=mydata/models/craft_mlt_25k.pth --test_folder=mydata/imgs/ --cuda=False

测试过程中,一些没有见过的图像,效果较差,需要fine-tune训练:

测试模型General:

特征图:

检测图:


CRAFT-Re-reimplementation

弱监督学习的模型:

  • Syndata.pth,已训练好的合成模型,用于监督数据。
  • vgg16_bn-6c64b313.pth,需要fine-tune的模型。
  • ICDAR 2015,需要弱监督的数据,只有word,没有character。

模型下载链接:craft_models.zip

替换相应位置即可。

工程参考:CRAFT-Re-reimplementation

  • trainSyndata.py,训练合成数据,模型只需要vgg16_bn-6c64b313.pth
  • trainic15data.py,弱监督训练词,模型需要Syndata.pth和vgg16_bn-6c64b313.pth

环境2080x4:

修改自定义的数据输入:data_loader.py

继承craft_base_dataset类,自定义数据集加载类,主要覆写load_image_gt_and_confidencemask函数,匹配输出格式如下:

image: 例如(778, 1114, 3),图像
character_bboxes: list,15个nx4x2的数组,多个文字框;
words: list,15个str
ones图像尺寸数组
confidences:list,15个1.0

数据如下:

其他细节:

  • self.charbox是arr的box数组,需要合并和拼接,同时格式是np.float64格式,参考
line_dict[line_num].append([word, bbox2rec(bbox)])  # box转换成rec
bbox_arr = np.array(bbox_list)  # rec转换为数组
sample_boxes_arr = np.concatenate(sample_boxes, axis=0).astype(np.float64)  # 数组合并到一起

ICDAR 2015

ICDAR 2015数据集是ICDAR于2015年举办的场景文本检测竞赛中使用的官方数据集,包含了1000张训练图和500张测试图。

下载地址:ICDAR_2015.zip

数据集比较小,比较适合训练弱监督学习,参考trainic15data.py。

样本都是困难样本:


SynthText

SynthText数据来源牛津大学(University of Oxford)的视觉几何组(Visual Geometry Group)。

样本:

样本数量 词数 字符数 尺寸
85w(858,750) 726w(7,266,866) 2897w(28,971,487) 41G

下载链接:SynthText.zip,慢慢下载即可。

文本处理逻辑:

img_texts = gt_data['txt'][0]
sample_img_text = img_texts[0]
words = [re.split(' \n|\n |\n| ', t.strip()) for t in sample_img_text]
words = list(itertools.chain(*words))  # 二维数组转换为1维

词样本的效果(8/ballet_106_0.jpg):

文字:

words: ['Lines:', 'I', 'lost', 'Kevin', 'will', 'line', 'and', 'and', 'the', '(and', 'the', 'out', 'you', "don't", 'pkg']

数据集的使用脚本,参考myutils:

#!/usr/bin/env python
# -- coding: utf-8 --
"""
Copyright (c) 2021. All rights reserved.
Created by C. L. Wang on 25.5.21
"""
import itertools
import os
import reimport cv2
import scipy.io as sci_iofrom myutils.cv_utils import show_img_bgr, draw_rec_list
from root_dir import DATA_DIRclass SynthTextChecker(object):"""检测数据集的格式"""def __init__(self):passdef check_sample(self):print('[Info] check sample')synth_text_folder = os.path.join(DATA_DIR, 'SynthText')data_path = os.path.join(synth_text_folder, 'gt.mat')gt_data = sci_io.loadmat(data_path)print('[Info] data: {}'.format(type(gt_data)))print('[Info] data: {}'.format(gt_data.keys()))char_boxes = gt_data['charBB'][0]word_boxes = gt_data['wordBB'][0]img_names = gt_data['imnames'][0]img_texts = gt_data['txt'][0]print('[Info] char_box {}'.format(char_boxes.shape))print('[Info] image {}'.format(len(img_names)))print('[Info] img_txt {}'.format(len(img_texts)))sample_char_box = char_boxes[0]sample_char_box = sample_char_box.transpose((2, 1, 0))  # 转换位置sample_word_box = word_boxes[0]sample_word_box = sample_word_box.transpose((2, 1, 0))sample_img_name = img_names[0]sample_img_text = img_texts[0]print('[Info] sample_char_box: {}'.format(sample_char_box.shape))print('[Info] sample_word_box: {}'.format(sample_word_box.shape))print('[Info] sample_img_name: {}'.format(sample_img_name))print('[Info] sample_img_text: {}'.format(sample_img_text))rec_list = []for word_box in sample_word_box:rec_list.append(word_box.astype(int).tolist())words = [re.split(' \n|\n |\n| ', t.strip()) for t in sample_img_text]words = list(itertools.chain(*words))  # 二维数组转换为1维print('[Info] num of words: {}'.format(len(words)))print('[Info] words: {}'.format(words))img_path = os.path.join(synth_text_folder, sample_img_name[0])img_bgr = cv2.imread(img_path)show_img_bgr(img_bgr)draw_rec_list(img_bgr, rec_list, is_show=True)print('[Info] 处理完成: {}'.format(data_path))passdef main():stc = SynthTextChecker()stc.check_sample()if __name__ == '__main__':main()

CRAFT字符检测算法和SynthText合成文本数据集相关推荐

  1. Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)

    Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...

  2. 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本

    中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 本文介绍 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 中文OCR光学字符检测与识 ...

  3. BF算法和KMP算法

    给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...

  4. 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)

    图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...

  5. RSA算法和RSA数字签名算法的实现

    RSA算法和RSA数字签名算法的实现 http://blog.chinaunix.net/uid-21880738-id-1813146.html 顾婷婷 李涛 (四川大学计算机系(西区) 成都 61 ...

  6. openssl java aes_Java AES算法和OpenSSL配对

    近日工作上的原因,需要实现Java  AES算法和C语言下基于OpenSSL的AES 算法通信.这是个老问题了,网上搜到不少资料,但都不是很详细,没能解决问题.只能自己来了. 先说说AES算法.AES ...

  7. 使用Apriori算法和FP-growth算法进行关联分析

    目录 1. 关联分析 2. Apriori原理 3. 使用Apriori算法来发现频繁集 4. 使用FP-growth算法来高效发现频繁项集 5. 示例:从新闻网站点击流中挖掘新闻报道 扩展阅读 系列 ...

  8. WPTools改进了光标定位算法和RTF编写器

    WPTools改进了光标定位算法和RTF编写器 改进的光标定位算法. 优化的RTF编写器. 结合wPDF v5改进了PDF/标签创建. 改进了WPReporter. 整体性能增强. WPTools是一 ...

  9. RSA算法和RSA数字签名算法

    一.引言 随着网络技术的飞速发展,信息安全性已成为亟待解决的问题.公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中 ...

  10. 基于Huffman算法和LZ77算法的文件压缩的改进方向

    基于Huffman算法和LZ77算法的文件压缩(八) 到这里已经简单实现基于Huffman算法和LZ77算法的文件压缩, GitHub源码:点我 根据基于Huffman算法和LZ77算法的文件压缩(七 ...

最新文章

  1. Ubuntu 系统 Pycharm中无法使用中文输入法问题
  2. war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
  3. c++数据结构中 顺序队列的队首队尾_yiduobo的每日leetcode 622.设计循环队列
  4. 3_3 ObserverMode 观察者模式
  5. 如何使用Notepad++格式化XML文件
  6. 暑期英语学习(词组积累)【持续更新中】
  7. 为什么Swift可能是深度学习的下一代重要的工具
  8. Java集合系列---Collection源码解析及整体框架结构
  9. [胡言乱语] 20170622
  10. Oracle SQL查询,日期过滤条件要注意的一点
  11. 虹科和ELPRO推出符合GxP标准的自助式温度分布验证套装
  12. python 读取npy文件
  13. 经济学基础(本)【4】
  14. js区号插件(全国电话区号)
  15. lookup无序查找_数据查找之LOOKUP篇(一):LOOKUP函数解析
  16. Windows下主机名和IP映射设置
  17. OpenCV学习之Canny算法自实现
  18. begin to drop messages due to rate-limiting
  19. 桌面删除的文件如何找回
  20. Excel数据分析学习笔记(四)如何建立规范的数据表

热门文章

  1. Oracle LiveLabs实验:Introduction to Oracle Spatial Studio
  2. 文件下载文件中文名问题
  3. java实用工具之XOM
  4. JSON学习之XOM的认识
  5. 台式电脑添加共享计算机,台式电脑怎么设置wifi共享
  6. win怎么在计算机里按日期搜索文件,通用win7系统搜索某时间段内的文件的方法...
  7. [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
  8. 举个栗子~Tableau 技巧(208):使用“显示/隐藏”按钮,快速切换图表
  9. 精选黑科技资源站点,总会有你需要的干货!
  10. Oracle 文字排序,按照拼音,姓氏笔画等