mirror of
https://github.com/open-mmlab/mmocr.git
synced 2025-06-03 21:54:47 +08:00
parent
6d9582b6c7
commit
d0dc90253a
@ -1,17 +1,7 @@
|
|||||||
mjsynth_textrecog_data_root = 'data/rec/Syn90k/'
|
mjsynth_textrecog_data_root = 'data/mjsynth'
|
||||||
|
|
||||||
mjsynth_textrecog_test = dict(
|
mjsynth_textrecog_train = dict(
|
||||||
type='OCRDataset',
|
type='OCRDataset',
|
||||||
data_root=mjsynth_textrecog_data_root,
|
data_root=mjsynth_textrecog_data_root,
|
||||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
ann_file='textrecog_train.json',
|
||||||
ann_file='train_labels.json',
|
|
||||||
test_mode=False,
|
|
||||||
pipeline=None)
|
|
||||||
|
|
||||||
mjsynth_sub_textrecog_train = dict(
|
|
||||||
type='OCRDataset',
|
|
||||||
data_root=mjsynth_textrecog_data_root,
|
|
||||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
|
||||||
ann_file='subset_train_labels.json',
|
|
||||||
test_mode=False,
|
|
||||||
pipeline=None)
|
pipeline=None)
|
||||||
|
@ -24,7 +24,7 @@ param_scheduler = [
|
|||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [
|
train_list = [
|
||||||
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
|
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
|
||||||
]
|
]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
|
@ -26,7 +26,7 @@ param_scheduler = [
|
|||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [
|
train_list = [
|
||||||
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
|
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
|
||||||
]
|
]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
|
@ -15,7 +15,7 @@ _base_ = [
|
|||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [
|
train_list = [
|
||||||
_base_.mjsynth_textrecog_test,
|
_base_.mjsynth_textrecog_train,
|
||||||
_base_.synthtext_textrecog_train,
|
_base_.synthtext_textrecog_train,
|
||||||
]
|
]
|
||||||
test_list = [
|
test_list = [
|
||||||
|
@ -12,7 +12,7 @@ _base_ = [
|
|||||||
'_base_crnn_mini-vgg.py',
|
'_base_crnn_mini-vgg.py',
|
||||||
]
|
]
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [_base_.mjsynth_textrecog_test]
|
train_list = [_base_.mjsynth_textrecog_train]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||||
|
@ -23,7 +23,7 @@ param_scheduler = [
|
|||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [
|
train_list = [
|
||||||
_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train,
|
_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train,
|
||||||
_base_.synthtext_add_textrecog_train
|
_base_.synthtext_add_textrecog_train
|
||||||
]
|
]
|
||||||
test_list = [
|
test_list = [
|
||||||
|
@ -20,7 +20,7 @@ param_scheduler = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||||
|
@ -20,7 +20,7 @@ param_scheduler = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||||
|
@ -13,7 +13,7 @@ _base_ = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||||
|
@ -41,7 +41,7 @@ param_scheduler = [
|
|||||||
]
|
]
|
||||||
|
|
||||||
# dataset settings
|
# dataset settings
|
||||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||||
|
37
dataset_zoo/mjsynth/metafile.yml
Normal file
37
dataset_zoo/mjsynth/metafile.yml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
Name: 'Synthetic Word Dataset (MJSynth/Syn90k)'
|
||||||
|
Paper:
|
||||||
|
Title: Reading Text in the Wild with Convolutional Neural Networks
|
||||||
|
URL: https://arxiv.org/pdf/1412.1842.pdf
|
||||||
|
Venue: International Journal of Computer Vision
|
||||||
|
Year: '2016'
|
||||||
|
BibTeX: '@InProceedings{Jaderberg14c,
|
||||||
|
author = "Max Jaderberg and Karen Simonyan and Andrea Vedaldi and Andrew Zisserman",
|
||||||
|
title = "Synthetic Data and Artificial Neural Networks for Natural Scene Text Recognition",
|
||||||
|
booktitle = "Workshop on Deep Learning, NIPS",
|
||||||
|
year = "2014",
|
||||||
|
}
|
||||||
|
|
||||||
|
@Article{Jaderberg16,
|
||||||
|
author = "Max Jaderberg and Karen Simonyan and Andrea Vedaldi and Andrew Zisserman",
|
||||||
|
title = "Reading Text in the Wild with Convolutional Neural Networks",
|
||||||
|
journal = "International Journal of Computer Vision",
|
||||||
|
number = "1",
|
||||||
|
volume = "116",
|
||||||
|
pages = "1--20",
|
||||||
|
month = "jan",
|
||||||
|
year = "2016",
|
||||||
|
}'
|
||||||
|
Data:
|
||||||
|
Website: https://www.robots.ox.ac.uk/~vgg/data/text/
|
||||||
|
Language:
|
||||||
|
- English
|
||||||
|
Scene:
|
||||||
|
- Synthesis
|
||||||
|
Granularity:
|
||||||
|
- Word
|
||||||
|
Tasks:
|
||||||
|
- textrecog
|
||||||
|
License:
|
||||||
|
Type: N/A
|
||||||
|
Link: N/A
|
||||||
|
Format: .txt
|
6
dataset_zoo/mjsynth/sample_anno.md
Normal file
6
dataset_zoo/mjsynth/sample_anno.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
**Text Recognition**
|
||||||
|
|
||||||
|
```txt
|
||||||
|
./3000/7/182_slinking_71711.jpg 71711
|
||||||
|
./3000/7/182_REMODELERS_64541.jpg 64541
|
||||||
|
```
|
40
dataset_zoo/mjsynth/textrecog.py
Normal file
40
dataset_zoo/mjsynth/textrecog.py
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
data_root = 'data/mjsynth'
|
||||||
|
cache_path = 'data/cache'
|
||||||
|
|
||||||
|
train_preparer = dict(
|
||||||
|
obtainer=dict(
|
||||||
|
type='NaiveDataObtainer',
|
||||||
|
cache_path=cache_path,
|
||||||
|
files=[
|
||||||
|
dict(
|
||||||
|
url='https://thor.robots.ox.ac.uk/~vgg/data/text/'
|
||||||
|
'mjsynth.tar.gz',
|
||||||
|
save_name='mjsynth.tar.gz',
|
||||||
|
md5='7bf2b60ad935eaf64e5b606f782d68e5',
|
||||||
|
split=['train'],
|
||||||
|
content=['image', 'annotation'],
|
||||||
|
mapping=[
|
||||||
|
[
|
||||||
|
'mjsynth/mnt/ramdisk/max/90kDICT32px/*/',
|
||||||
|
'textrecog_imgs/train/'
|
||||||
|
],
|
||||||
|
[
|
||||||
|
'mjsynth/mnt/ramdisk/max/90kDICT32px/annotation.txt',
|
||||||
|
'annotations/annotation.txt'
|
||||||
|
]
|
||||||
|
]),
|
||||||
|
]),
|
||||||
|
gatherer=dict(type='MonoGatherer', ann_name='annotation.txt'),
|
||||||
|
parser=dict(
|
||||||
|
type='ICDARTxtTextRecogAnnParser',
|
||||||
|
separator=' ',
|
||||||
|
format='img text',
|
||||||
|
remove_strs=None),
|
||||||
|
packer=dict(type='TextRecogPacker'),
|
||||||
|
dumper=dict(type='JsonDumper'),
|
||||||
|
)
|
||||||
|
|
||||||
|
delete = ['mjsynth', 'annotations']
|
||||||
|
|
||||||
|
config_generator = dict(
|
||||||
|
type='TextRecogConfigGenerator', data_root=data_root, test_anns=None)
|
@ -291,7 +291,7 @@ For example, for text recognition tasks, Syn90k is used as the training set, whi
|
|||||||
|
|
||||||
```Python
|
```Python
|
||||||
# text recognition dataset configuration
|
# text recognition dataset configuration
|
||||||
mjsynth_textrecog_test = dict(
|
mjsynth_textrecog_train = dict(
|
||||||
type='OCRDataset',
|
type='OCRDataset',
|
||||||
data_root='data/rec/Syn90k/',
|
data_root='data/rec/Syn90k/',
|
||||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
||||||
@ -374,7 +374,7 @@ train_dataloader = dict(
|
|||||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||||
dataset=dict(
|
dataset=dict(
|
||||||
type='ConcatDataset',
|
type='ConcatDataset',
|
||||||
datasets=[mjsynth_textrecog_test],
|
datasets=[mjsynth_textrecog_train],
|
||||||
pipeline=train_pipeline))
|
pipeline=train_pipeline))
|
||||||
val_dataloader = dict(
|
val_dataloader = dict(
|
||||||
batch_size=1,
|
batch_size=1,
|
||||||
|
@ -171,7 +171,7 @@ _base_ = [ # Import all dataset configurations you want to use
|
|||||||
]
|
]
|
||||||
|
|
||||||
# List of training datasets
|
# List of training datasets
|
||||||
train_list = [_base_.mjsynth_textrecog_test]
|
train_list = [_base_.mjsynth_textrecog_train]
|
||||||
# List of testing datasets
|
# List of testing datasets
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
||||||
|
@ -288,7 +288,7 @@ test_cfg = dict(type='TestLoop')
|
|||||||
|
|
||||||
```Python
|
```Python
|
||||||
# 识别数据集配置
|
# 识别数据集配置
|
||||||
mjsynth_textrecog_test = dict(
|
mjsynth_textrecog_train = dict(
|
||||||
type='OCRDataset',
|
type='OCRDataset',
|
||||||
data_root='data/rec/Syn90k/',
|
data_root='data/rec/Syn90k/',
|
||||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
||||||
@ -373,7 +373,7 @@ train_dataloader = dict(
|
|||||||
sampler=dict(type='DefaultSampler', shuffle=True),
|
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||||
dataset=dict(
|
dataset=dict(
|
||||||
type='ConcatDataset',
|
type='ConcatDataset',
|
||||||
datasets=[mjsynth_textrecog_test],
|
datasets=[mjsynth_textrecog_train],
|
||||||
pipeline=train_pipeline))
|
pipeline=train_pipeline))
|
||||||
val_dataloader = dict(
|
val_dataloader = dict(
|
||||||
batch_size=1,
|
batch_size=1,
|
||||||
|
@ -171,7 +171,7 @@ _base_ = [ # 导入所有需要使用的数据集配置
|
|||||||
]
|
]
|
||||||
|
|
||||||
# 训练集列表
|
# 训练集列表
|
||||||
train_list = [_base_.mjsynth_textrecog_test]
|
train_list = [_base_.mjsynth_textrecog_train]
|
||||||
# 测试集列表
|
# 测试集列表
|
||||||
test_list = [
|
test_list = [
|
||||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
||||||
|
@ -186,7 +186,8 @@ class NaiveDataObtainer:
|
|||||||
if '*' in src:
|
if '*' in src:
|
||||||
mkdir_or_exist(dst)
|
mkdir_or_exist(dst)
|
||||||
for f in glob.glob(src):
|
for f in glob.glob(src):
|
||||||
if not osp.exists(osp.join(dst, osp.basename(f))):
|
if not osp.exists(
|
||||||
|
osp.join(dst, osp.relpath(f, self.data_root))):
|
||||||
shutil.move(f, dst)
|
shutil.move(f, dst)
|
||||||
|
|
||||||
elif osp.exists(src) and not osp.exists(dst):
|
elif osp.exists(src) and not osp.exists(dst):
|
||||||
|
@ -50,11 +50,8 @@ class TextRecogPacker(BasePacker):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
img_name, text = sample
|
img_name, text = sample
|
||||||
# TODO: remove hard code
|
img_name = osp.relpath(img_name, self.data_root)
|
||||||
packed_instance = dict(
|
packed_instance = dict(instances=[dict(text=text)], img_path=img_name)
|
||||||
instances=[dict(text=text)],
|
|
||||||
img_path=osp.join('textrecog_imgs', self.split,
|
|
||||||
osp.basename(img_name)))
|
|
||||||
|
|
||||||
return packed_instance
|
return packed_instance
|
||||||
|
|
||||||
|
@ -122,6 +122,6 @@ class ICDARTxtTextRecogAnnParser(BaseParser):
|
|||||||
if text == self.ignore:
|
if text == self.ignore:
|
||||||
continue
|
continue
|
||||||
img_name = anno['img']
|
img_name = anno['img']
|
||||||
samples.append((osp.join(img_dir, osp.basename(img_name)), text))
|
samples.append((osp.join(img_dir, img_name), text))
|
||||||
|
|
||||||
return samples
|
return samples
|
||||||
|
@ -13,14 +13,11 @@ class TestTextRecogPacker(unittest.TestCase):
|
|||||||
|
|
||||||
def test_pack_instance(self):
|
def test_pack_instance(self):
|
||||||
|
|
||||||
packer = TextRecogPacker(data_root='', split='test')
|
packer = TextRecogPacker(data_root='data/test/', split='test')
|
||||||
sample = ('test.jpg', 'text')
|
sample = ('data/test/test.jpg', 'text')
|
||||||
results = packer.pack_instance(sample)
|
results = packer.pack_instance(sample)
|
||||||
self.assertDictEqual(
|
self.assertDictEqual(
|
||||||
results,
|
results, dict(img_path='test.jpg', instances=[dict(text='text')]))
|
||||||
dict(
|
|
||||||
img_path=osp.join('textrecog_imgs', 'test', 'test.jpg'),
|
|
||||||
instances=[dict(text='text')]))
|
|
||||||
|
|
||||||
def test_add_meta(self):
|
def test_add_meta(self):
|
||||||
packer = TextRecogPacker(data_root='', split='test')
|
packer = TextRecogPacker(data_root='', split='test')
|
||||||
|
Loading…
x
Reference in New Issue
Block a user