CRAFT字符检测算法和SynthText合成文本数据集
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训练:
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 |
- imnames:文件夹+图像名,如8/ballet_106_0.jpg
- charBB:字符框,4点框,需要transpose((2, 1, 0))
- wordBB:词框,4点框,需要transpose((2, 1, 0))
- txt:文本,需要预处理,标注的比较乱。
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']
#!/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合成文本数据集相关推荐
- Algorithm:C++语言实现之字符串相关算法(字符串的循环左移、字符串的全排列、带有同个字符的全排列、串匹配问题的BF算法和KMP算法)
Algorithm:C++语言实现之字符串相关算法(字符串的循环左移.字符串的全排列.带有同个字符的全排列.串匹配问题的BF算法和KMP算法) 目录 一.字符串的算法 1.字符串的循环左移 2.字符串 ...
- 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本
中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 本文介绍 中文OCR光学字符检测与识别二:用最先进的DBNet训练自己的数据集检测中文文本 中文OCR光学字符检测与识 ...
- BF算法和KMP算法
给定两个字符串S和T,在主串S中查找子串T的过程称为串匹配(string matching,也称模式匹配),T称为模式.这里将介绍处理串匹配问题的两种算法,BF算法和KMP算法. BF算法 (暴力匹配 ...
- 数据结构与算法之美笔记——基础篇(下):图、字符串匹配算法(BF 算法和 RK 算法、BM 算法和 KMP 算法 、Trie 树和 AC 自动机)
图 如何存储微博.微信等社交网络中的好友关系?图.实际上,涉及图的算法有很多,也非常复杂,比如图的搜索.最短路径.最小生成树.二分图等等.我们今天聚焦在图存储这一方面,后面会分好几节来依次讲解图相关的 ...
- RSA算法和RSA数字签名算法的实现
RSA算法和RSA数字签名算法的实现 http://blog.chinaunix.net/uid-21880738-id-1813146.html 顾婷婷 李涛 (四川大学计算机系(西区) 成都 61 ...
- openssl java aes_Java AES算法和OpenSSL配对
近日工作上的原因,需要实现Java AES算法和C语言下基于OpenSSL的AES 算法通信.这是个老问题了,网上搜到不少资料,但都不是很详细,没能解决问题.只能自己来了. 先说说AES算法.AES ...
- 使用Apriori算法和FP-growth算法进行关联分析
目录 1. 关联分析 2. Apriori原理 3. 使用Apriori算法来发现频繁集 4. 使用FP-growth算法来高效发现频繁项集 5. 示例:从新闻网站点击流中挖掘新闻报道 扩展阅读 系列 ...
- WPTools改进了光标定位算法和RTF编写器
WPTools改进了光标定位算法和RTF编写器 改进的光标定位算法. 优化的RTF编写器. 结合wPDF v5改进了PDF/标签创建. 改进了WPReporter. 整体性能增强. WPTools是一 ...
- RSA算法和RSA数字签名算法
一.引言 随着网络技术的飞速发展,信息安全性已成为亟待解决的问题.公钥密码体制中,解密和加密密钥不同,解密和加密可分离,通信双方无须事先交换密钥就可建立起保密通信,较好地解决了传统密码体制在网络通信中 ...
- 基于Huffman算法和LZ77算法的文件压缩的改进方向
基于Huffman算法和LZ77算法的文件压缩(八) 到这里已经简单实现基于Huffman算法和LZ77算法的文件压缩, GitHub源码:点我 根据基于Huffman算法和LZ77算法的文件压缩(七 ...
最新文章
- Ubuntu 系统 Pycharm中无法使用中文输入法问题
- war 发布后页面不更新_一文看懂tomcat8如何配置web页面管理
- c++数据结构中 顺序队列的队首队尾_yiduobo的每日leetcode 622.设计循环队列
- 3_3 ObserverMode 观察者模式
- 如何使用Notepad++格式化XML文件
- 暑期英语学习(词组积累)【持续更新中】
- 为什么Swift可能是深度学习的下一代重要的工具
- Java集合系列---Collection源码解析及整体框架结构
- [胡言乱语] 20170622
- Oracle SQL查询,日期过滤条件要注意的一点
- 虹科和ELPRO推出符合GxP标准的自助式温度分布验证套装
- python 读取npy文件
- 经济学基础(本)【4】
- js区号插件(全国电话区号)
- lookup无序查找_数据查找之LOOKUP篇(一):LOOKUP函数解析
- Windows下主机名和IP映射设置
- OpenCV学习之Canny算法自实现
- begin to drop messages due to rate-limiting
- 桌面删除的文件如何找回
- Excel数据分析学习笔记(四)如何建立规范的数据表
热门文章
- Oracle LiveLabs实验:Introduction to Oracle Spatial Studio
- 文件下载文件中文名问题
- java实用工具之XOM
- JSON学习之XOM的认识
- 台式电脑添加共享计算机,台式电脑怎么设置wifi共享
- win怎么在计算机里按日期搜索文件,通用win7系统搜索某时间段内的文件的方法...
- [JZOJ1320] 【Usaco2009 gold 】拯救奶牛
- 举个栗子~Tableau 技巧(208):使用“显示/隐藏”按钮,快速切换图表
- 精选黑科技资源站点,总会有你需要的干货!
- Oracle 文字排序,按照拼音,姓氏笔画等