mirror of https://github.com/open-mmlab/mmocr.git
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',
|
||||
data_root=mjsynth_textrecog_data_root,
|
||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
||||
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,
|
||||
ann_file='textrecog_train.json',
|
||||
pipeline=None)
|
||||
|
|
|
@ -24,7 +24,7 @@ param_scheduler = [
|
|||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
|
||||
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
|
||||
]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
|
|
|
@ -26,7 +26,7 @@ param_scheduler = [
|
|||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.mjsynth_textrecog_test, _base_.synthtext_an_textrecog_train
|
||||
_base_.mjsynth_textrecog_train, _base_.synthtext_an_textrecog_train
|
||||
]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
|
|
|
@ -15,7 +15,7 @@ _base_ = [
|
|||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.mjsynth_textrecog_test,
|
||||
_base_.mjsynth_textrecog_train,
|
||||
_base_.synthtext_textrecog_train,
|
||||
]
|
||||
test_list = [
|
||||
|
|
|
@ -12,7 +12,7 @@ _base_ = [
|
|||
'_base_crnn_mini-vgg.py',
|
||||
]
|
||||
# dataset settings
|
||||
train_list = [_base_.mjsynth_textrecog_test]
|
||||
train_list = [_base_.mjsynth_textrecog_train]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
|
|
|
@ -23,7 +23,7 @@ param_scheduler = [
|
|||
|
||||
# dataset settings
|
||||
train_list = [
|
||||
_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train,
|
||||
_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train,
|
||||
_base_.synthtext_add_textrecog_train
|
||||
]
|
||||
test_list = [
|
||||
|
|
|
@ -20,7 +20,7 @@ param_scheduler = [
|
|||
]
|
||||
|
||||
# dataset settings
|
||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
||||
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
|
|
|
@ -20,7 +20,7 @@ param_scheduler = [
|
|||
]
|
||||
|
||||
# dataset settings
|
||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
||||
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
|
|
|
@ -13,7 +13,7 @@ _base_ = [
|
|||
]
|
||||
|
||||
# dataset settings
|
||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
||||
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
|
|
|
@ -41,7 +41,7 @@ param_scheduler = [
|
|||
]
|
||||
|
||||
# dataset settings
|
||||
train_list = [_base_.mjsynth_textrecog_test, _base_.synthtext_textrecog_train]
|
||||
train_list = [_base_.mjsynth_textrecog_train, _base_.synthtext_textrecog_train]
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test,
|
||||
_base_.svt_textrecog_test, _base_.svtp_textrecog_test,
|
||||
|
|
|
@ -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
|
|
@ -0,0 +1,6 @@
|
|||
**Text Recognition**
|
||||
|
||||
```txt
|
||||
./3000/7/182_slinking_71711.jpg 71711
|
||||
./3000/7/182_REMODELERS_64541.jpg 64541
|
||||
```
|
|
@ -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
|
||||
# text recognition dataset configuration
|
||||
mjsynth_textrecog_test = dict(
|
||||
mjsynth_textrecog_train = dict(
|
||||
type='OCRDataset',
|
||||
data_root='data/rec/Syn90k/',
|
||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
||||
|
@ -374,7 +374,7 @@ train_dataloader = dict(
|
|||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=dict(
|
||||
type='ConcatDataset',
|
||||
datasets=[mjsynth_textrecog_test],
|
||||
datasets=[mjsynth_textrecog_train],
|
||||
pipeline=train_pipeline))
|
||||
val_dataloader = dict(
|
||||
batch_size=1,
|
||||
|
|
|
@ -171,7 +171,7 @@ _base_ = [ # Import all dataset configurations you want to use
|
|||
]
|
||||
|
||||
# List of training datasets
|
||||
train_list = [_base_.mjsynth_textrecog_test]
|
||||
train_list = [_base_.mjsynth_textrecog_train]
|
||||
# List of testing datasets
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
||||
|
|
|
@ -288,7 +288,7 @@ test_cfg = dict(type='TestLoop')
|
|||
|
||||
```Python
|
||||
# 识别数据集配置
|
||||
mjsynth_textrecog_test = dict(
|
||||
mjsynth_textrecog_train = dict(
|
||||
type='OCRDataset',
|
||||
data_root='data/rec/Syn90k/',
|
||||
data_prefix=dict(img_path='mnt/ramdisk/max/90kDICT32px'),
|
||||
|
@ -373,7 +373,7 @@ train_dataloader = dict(
|
|||
sampler=dict(type='DefaultSampler', shuffle=True),
|
||||
dataset=dict(
|
||||
type='ConcatDataset',
|
||||
datasets=[mjsynth_textrecog_test],
|
||||
datasets=[mjsynth_textrecog_train],
|
||||
pipeline=train_pipeline))
|
||||
val_dataloader = dict(
|
||||
batch_size=1,
|
||||
|
|
|
@ -171,7 +171,7 @@ _base_ = [ # 导入所有需要使用的数据集配置
|
|||
]
|
||||
|
||||
# 训练集列表
|
||||
train_list = [_base_.mjsynth_textrecog_test]
|
||||
train_list = [_base_.mjsynth_textrecog_train]
|
||||
# 测试集列表
|
||||
test_list = [
|
||||
_base_.cute80_textrecog_test, _base_.iiit5k_textrecog_test, _base_.svt_textrecog_test,
|
||||
|
|
|
@ -186,7 +186,8 @@ class NaiveDataObtainer:
|
|||
if '*' in src:
|
||||
mkdir_or_exist(dst)
|
||||
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)
|
||||
|
||||
elif osp.exists(src) and not osp.exists(dst):
|
||||
|
|
|
@ -50,11 +50,8 @@ class TextRecogPacker(BasePacker):
|
|||
"""
|
||||
|
||||
img_name, text = sample
|
||||
# TODO: remove hard code
|
||||
packed_instance = dict(
|
||||
instances=[dict(text=text)],
|
||||
img_path=osp.join('textrecog_imgs', self.split,
|
||||
osp.basename(img_name)))
|
||||
img_name = osp.relpath(img_name, self.data_root)
|
||||
packed_instance = dict(instances=[dict(text=text)], img_path=img_name)
|
||||
|
||||
return packed_instance
|
||||
|
||||
|
|
|
@ -122,6 +122,6 @@ class ICDARTxtTextRecogAnnParser(BaseParser):
|
|||
if text == self.ignore:
|
||||
continue
|
||||
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
|
||||
|
|
|
@ -13,14 +13,11 @@ class TestTextRecogPacker(unittest.TestCase):
|
|||
|
||||
def test_pack_instance(self):
|
||||
|
||||
packer = TextRecogPacker(data_root='', split='test')
|
||||
sample = ('test.jpg', 'text')
|
||||
packer = TextRecogPacker(data_root='data/test/', split='test')
|
||||
sample = ('data/test/test.jpg', 'text')
|
||||
results = packer.pack_instance(sample)
|
||||
self.assertDictEqual(
|
||||
results,
|
||||
dict(
|
||||
img_path=osp.join('textrecog_imgs', 'test', 'test.jpg'),
|
||||
instances=[dict(text='text')]))
|
||||
results, dict(img_path='test.jpg', instances=[dict(text='text')]))
|
||||
|
||||
def test_add_meta(self):
|
||||
packer = TextRecogPacker(data_root='', split='test')
|
||||
|
|
Loading…
Reference in New Issue