首页 > 解决方案 > 在读入 OCR 之前按升序对图像文件进行排序

问题描述

我想遵循循环来处理文件名,以便 ocr 以升序方式读取它们,否则提取的文本不是按顺序排列的,然后我必须转到原始图像并打乱提取的块。

我有文件为0001.jpg, 0002.jpg, 0003.jpg, 0004.jpg, 0005.jpg.

现在被提取的文本是在0002.jpg, 0003.jpg, 0005.jpg, 0004.jpg, 0001.jpg. 所以我无法让 OCR 阅读器根据文件编号顺序进行读取。

我有以下代码,但到目前为止它不起作用序列。

    if len(a) > 2:
    for fn in os.listdir(a):
        if fn.endswith(".png") or fn.endswith(".jpg"):
            natsort.natsorted(fn)
            x = os.path.join(a, fn)
            rd = pytesseract.image_to_string(Image.open(x), lang='eng') \
                .replace('-\n', '').replace('\n', ' ').encode("ascii", 'ignore')
            tb1.insert('insert', rfi)
            tb1.insert('insert', rd)
            tb1.insert('insert', br)
            count += 1
        else:
            continue

else:
    count -= 1
    messagebox.showinfo(title="PROCEDURAL ERROR",
                        message="Set FOLDER & NEW_NOTE.")

OCR部分没问题,我已经成功使用了。问题是我无法在执行 OCR 部分之前进行排序。

标签: filesortingocr

解决方案


我想我明白了。

if len(a) > 2:
    xa = []
    for dp, dn, fn in walk(a):
        fn.sort(key=lambda g: int(g.split(".")[0]))
        for s in fn:
            xa.append(a + '/' + s)

    for x in xa:
        rd = pytesseract.image_to_string(Image.open(x), lang='eng') \
            .replace('-\n', '').replace('\n', ' ').encode("ascii", 'ignore')
        tb1.insert('insert', rfi)
        tb1.insert('insert', rd)
        tb1.insert('insert', br)
        count += 1

else:
    count -= 1
    messagebox.showinfo(title="PROCEDURAL ERROR",
                        message="Set FOLDER & NEW_NOTE.")

推荐阅读