批量处理与结构化输出(从脚本到可用工具)
目标处理文件夹里的多张图片把 OCR 输出的“一堆文字”变成按坐标排序、可导出为表格的结构化数据。1. 批量遍历与结果保存实际场景很少只处理一张图。下面的模式可以复用于发票、截图、扫描件的批量 OCRpythonimport os import easyocr reader easyocr.Reader([ch_sim, en]) input_dir images output_dir results os.makedirs(output_dir, exist_okTrue) for filename in os.listdir(input_dir): if not filename.lower().endswith((.png, .jpg, .jpeg)): continue path os.path.join(input_dir, filename) result reader.readtext(path, detail1) lines [] for bbox, text, score in result: lines.append(f{text}\t{score:.2f}) out_name os.path.splitext(filename)[0] .txt with open(os.path.join(output_dir, out_name), w, encodingutf-8) as f: f.write(\n.join(lines)) print(fdone: {filename})2. 按坐标恢复阅读顺序OCR 返回的文本块往往不是按人眼阅读顺序排列的。EasyOCR 的 bbox 是四个点的坐标可以取左上角 y 坐标进行行分组再按 x 坐标排序从而恢复“从上到下、从左到右”的顺序。pythondef sort_by_position(result): # bbox 格式[[x1,y1], [x2,y1], [x2,y2], [x1,y2]] items [] for bbox, text, score in result: x min(p[0] for p in bbox) y min(p[1] for p in bbox) items.append((y, x, text, score)) # 先按 y 粗略分行同一行 y 差值小于 15 像素视为同行 items.sort(keylambda t: (round(t[0] / 15), t[1])) return [(t[2], t[3]) for t in items]3. 导出为 CSV / Excel把排序后的结果直接写入表格方便在 Excel 里核对或进一步做字段抽取pythonimport csv with open(output.csv, w, newline, encodingutf-8-sig) as f: writer csv.writer(f) writer.writerow([text, confidence]) for text, score in sort_by_position(result): writer.writerow([text, f{score:.2f}])第三期的重点不在于 OCR 库本身而在于后处理坐标排序、置信度过滤、按业务规则校验如金额用正则提取、日期格式统一。OCR 给的是原材料结构化这一步才决定它能不能进入下游流程。github.0voice