我正在尝试为OCR系统创建数据加载器。我有1k文档图像,其中每个文档包含大约200行文本。目前,我正在提取每个线条图像及其基本事实,然后将它们附加到列表中。我想知道是否有任何有效的数据结构,我可以快速存储和检索数据,而不会占用太多内存。
class OCRDataset(tud.Dataset):
def __init__(self, **kwargs):
self.config = kwargs['config']
self.dir = self.config['dir']
self.books = self.config["books"]
def __len__(self):
return len(self.books)
def __getitem__(self, idx):
pagewise = read_book(book_path=os.path.join(self.dir, self.books[idx]))
sequences, targets = pagewise
samples = [(sequences[i], targets[i]) for i in range(len(sequences))]
return samples
total = []
dataset = OCRdataset(config=config)
for i in range(len(dataset)):
sample = dataset[i]
total.extend(sample)
正如您所看到的,class OCRdataset
需要一本书并返回包含图像和注释的元组列表。我有几本这样的书,我使用for循环遍历每本书,然后在每次迭代后扩展列表total
。瓶颈是在扩展前几本书的清单后,我的系统最终开始减速。如果有人能提出更好的方法,我将不胜感激。
谢谢
编辑:使用total
列表背后的想法是将多本书中的数据加载到单个数据结构中,这样我就可以将数据拆分为训练和验证集,然后用它来训练我的分类器。
编辑2 :函数read_book
获取文档图像集合,并返回包含线图像的元组列表及其特定图书的注释。
答案 0 :(得分:1)
我建议将它直接写入逐行输出,而不是在你的记忆中保留一个巨大的物体。
portrait
为了检索数据我建议使用pandas,因为它允许使用迭代器(看一下DataFrame.read_csv()函数的chunksize选项)