Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit531e6f4

Browse files
committed
Support reading updated ocr annotation format, extra error handling & checks
1 parentc482062 commit531e6f4

File tree

1 file changed

+28
-15
lines changed

1 file changed

+28
-15
lines changed

‎src/chug/webdataset/doc_anno_pipe.py‎

Lines changed: 28 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
importjson
22
importio
3+
importlogging
34
importrandom
45
fromfunctoolsimportpartial
56

@@ -9,9 +10,10 @@
910

1011
from .loaderimportlog_and_continue
1112

13+
_logger=logging.getLogger(__name__)
1214

1315
deffilter_no_annotation_or_no_image(sample):
14-
# FIXME check sample for valid doc/image+ annotation
16+
# FIXME check sample for valid doc/imageand annotation
1517
returnTrue
1618

1719

@@ -37,16 +39,24 @@ def __init__(
3739
def__call__(self,sample):
3840
anno=json.loads(sample['json'])
3941

40-
page_anno=self.anno_preprocess(anno,generator=self.generator)
41-
ifisinstance(anno, (tuple,list)):
42+
try:
43+
page_anno=self.anno_preprocess(anno,generator=self.generator)
44+
exceptExceptionasexn:
45+
_logger.error(f'Issue processing annotation for{sample["__url__"]},{sample["__key__"]}.')
46+
#_logger.error(json.dumps(anno, indent=4))
47+
raise(exn)
48+
49+
info=None
50+
ifisinstance(page_anno,tuple):
4251
page_anno,info=page_anno
43-
num_pages=info.get('num_pages',1)# original # pages
4452
page_indices=info.get('page_indices', [0])# the samples page indices
53+
num_decode_pages=len(page_indices)
54+
num_anno_pages=info.get('num_pages',1)
4555
page_image_info=info.get('image_info',None)
4656
ifpage_image_infoisnotNone:
4757
assertlen(page_image_info)==len(page_indices)
4858
else:
49-
num_pages=1
59+
num_decode_pages=num_anno_pages=1
5060
page_indices= [0]
5161
page_image_info=None
5262

@@ -56,32 +66,35 @@ def __call__(self, sample):
5666
ifextinsample:
5767
withio.BytesIO(sample[ext])asb:
5868
image=Image.open(b)
59-
multi_page_image=getattr(image,'n_frames',1)>1
69+
num_image_pages=getattr(image,'n_frames',1)
70+
ifnum_image_pages!=num_anno_pages:
71+
_logger.warning(
72+
f'Mismatch between num image and num annotation pages{num_image_pages} !={num_anno_pages}'
73+
f' for sample{sample["__url__"]},{sample["__key__"]}.')
6074
fori,page_indexinenumerate(page_indices):
61-
ifmulti_page_image:
62-
page=image.seek(page_index)
75+
ifnum_image_pages>1:
76+
image.seek(page_index)
6377
else:
64-
assertnum_pages==1
78+
assertnum_anno_pages==1
6579
image.load()
66-
page=image
6780

6881
ifself.image_fmt:
69-
page=page.convert(self.image_fmt)
82+
image=image.convert(self.image_fmt)
7083

7184
ifpage_image_infoisnotNone:
7285
# FIXME, if train objective involves masking or otherwise processing image
7386
# with knowledge of annotations / text content, anno info should contain
7487
# mask locations, etc. For such a task, we need to pass it to image preprocess
75-
page=self.image_preprocess(page,page_info=page_image_info[i])
88+
image=self.image_preprocess(image,page_info=page_image_info[i])
7689
else:
77-
page=self.image_preprocess(page)
90+
image=self.image_preprocess(image)
7891
# FIXME note, should move to torchvision v2 annotations at some point, they should
7992
# have a generator arg (eventually) which will make proper state restore possible
80-
page_images.append(page)
93+
page_images.append(image)
8194

8295
assertlen(page_images),'No page images present'
8396

84-
ifself.squeeze_pagesandnum_pages==1:
97+
ifself.squeeze_pagesandnum_decode_pages==1:
8598
# FIXME always list?
8699
page_images=page_images[0]
87100
page_anno= {k:v[0]fork,vinpage_anno.items()}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp