Spaces:
Sleeping
Sleeping
| # Copyright (c) OpenMMLab. All rights reserved. | |
| import os.path as osp | |
| import tempfile | |
| from unittest import TestCase | |
| import mmengine | |
| from mmocr.utils.data_converter_utils import (dump_ocr_data, | |
| recog_anno_to_imginfo) | |
| class TestDataConverterUtils(TestCase): | |
| def _create_dummy_data(self): | |
| img_info = dict( | |
| file_name='test.jpg', height=100, width=200, segm_file='seg.txt') | |
| anno_info = [ | |
| dict( | |
| iscrowd=0, | |
| category_id=0, | |
| bbox=[0, 0, 10, 20], # x, y, w, h | |
| text='t1', | |
| segmentation=[0, 0, 0, 10, 10, 20, 20, 0]), | |
| dict( | |
| iscrowd=1, | |
| category_id=0, | |
| bbox=[10, 10, 20, 20], # x, y, w, h | |
| text='t2', | |
| segmentation=[10, 10, 10, 30, 30, 30, 30, 10]), | |
| ] | |
| img_info['anno_info'] = anno_info | |
| img_infos = [img_info] | |
| det_target = { | |
| 'metainfo': { | |
| 'dataset_type': 'TextDetDataset', | |
| 'task_name': 'textdet', | |
| 'category': [{ | |
| 'id': 0, | |
| 'name': 'text' | |
| }], | |
| }, | |
| 'data_list': [{ | |
| 'img_path': | |
| 'test.jpg', | |
| 'height': | |
| 100, | |
| 'width': | |
| 200, | |
| 'seg_map': | |
| 'seg.txt', | |
| 'instances': [ | |
| { | |
| 'bbox': [0, 0, 10, 20], | |
| 'bbox_label': 0, | |
| 'polygon': [0, 0, 0, 10, 10, 20, 20, 0], | |
| 'ignore': False | |
| }, | |
| { | |
| 'bbox': [10, 10, 30, 30], # x1, y1, x2, y2 | |
| 'bbox_label': 0, | |
| 'polygon': [10, 10, 10, 30, 30, 30, 30, 10], | |
| 'ignore': True | |
| } | |
| ] | |
| }] | |
| } | |
| spotter_target = { | |
| 'metainfo': { | |
| 'dataset_type': 'TextSpotterDataset', | |
| 'task_name': 'textspotter', | |
| 'category': [{ | |
| 'id': 0, | |
| 'name': 'text' | |
| }], | |
| }, | |
| 'data_list': [{ | |
| 'img_path': | |
| 'test.jpg', | |
| 'height': | |
| 100, | |
| 'width': | |
| 200, | |
| 'seg_map': | |
| 'seg.txt', | |
| 'instances': [ | |
| { | |
| 'bbox': [0, 0, 10, 20], | |
| 'bbox_label': 0, | |
| 'polygon': [0, 0, 0, 10, 10, 20, 20, 0], | |
| 'text': 't1', | |
| 'ignore': False | |
| }, | |
| { | |
| 'bbox': [10, 10, 30, 30], # x1, y1, x2, y2 | |
| 'bbox_label': 0, | |
| 'polygon': [10, 10, 10, 30, 30, 30, 30, 10], | |
| 'text': 't2', | |
| 'ignore': True | |
| } | |
| ] | |
| }] | |
| } | |
| recog_target = { | |
| 'metainfo': { | |
| 'dataset_type': 'TextRecogDataset', | |
| 'task_name': 'textrecog', | |
| }, | |
| 'data_list': [{ | |
| 'img_path': 'test.jpg', | |
| 'instances': [{ | |
| 'text': 't1', | |
| }, { | |
| 'text': 't2', | |
| }] | |
| }] | |
| } | |
| return img_infos, det_target, spotter_target, recog_target | |
| def test_dump_ocr_data(self): | |
| with tempfile.TemporaryDirectory() as tmpdir: | |
| output_path = osp.join(tmpdir, 'ocr.json') | |
| input_data, det_target, spotter_target, recog_target = \ | |
| self._create_dummy_data() | |
| dump_ocr_data(input_data, output_path, 'textdet') | |
| result = mmengine.load(output_path) | |
| self.assertDictEqual(result, det_target) | |
| dump_ocr_data(input_data, output_path, 'textspotter') | |
| result = mmengine.load(output_path) | |
| self.assertDictEqual(result, spotter_target) | |
| dump_ocr_data(input_data, output_path, 'textrecog') | |
| result = mmengine.load(output_path) | |
| self.assertDictEqual(result, recog_target) | |
| def test_recog_anno_to_imginfo(self): | |
| file_paths = ['a.jpg', 'b.jpg'] | |
| labels = ['aaa'] | |
| with self.assertRaises(AssertionError): | |
| recog_anno_to_imginfo(file_paths, labels) | |
| file_paths = ['a.jpg', 'b.jpg'] | |
| labels = ['aaa', 'bbb'] | |
| target = [ | |
| { | |
| 'file_name': 'a.jpg', | |
| 'anno_info': [{ | |
| 'text': 'aaa' | |
| }] | |
| }, | |
| { | |
| 'file_name': 'b.jpg', | |
| 'anno_info': [{ | |
| 'text': 'bbb' | |
| }] | |
| }, | |
| ] | |
| self.assertListEqual(target, recog_anno_to_imginfo(file_paths, labels)) | |