在Python应用中使用Tesseract OCR的性能问题
我最近做了一个界面,用来扫描和上传可以搜索的文件到我们的文档管理系统KnowledgeTree。我们有很多不同的工具来处理这个过程的各个部分,但我想把所有东西整合到一个界面里,这样用户使用起来会更简单。
这是平台:
# OS: Ubuntu Desktop 10.04
# GUI Toolkit: wxPython
# OCR package: Tesseract 3.00 (compiled executable)
这是基本的流程:
# 1. Retrieve individual page images from scanner
# 2. Call Tesseract OCR executable to produce HOCR data for each page
# 3. Run extracted words against English dictionary to guess if page orientation is correct
# 3a. If word matches are below threshold, rotate page 90 degrees and try again
# 4. Detect document type and retrieve metadata from HOCR data
# 5. Merge scanned pages and HOCR data into a finished PDF
# 6. Upload PDF and attached metadata to document management system through KnowledgeTree's API
这个流程运行得很好,除了第二步在某些类型的文件上非常慢。对于基本的固定宽度文本报告,它处理得很快,但如果里面有一些logo、线条和其他难以识别的内容,它有时候在一页上就要花几分钟。更别提如果它需要重新调整方向,可能会重复这个过程多达4次。相比之下,扫描仪自带的软件使用了ABBYY OCR,可以在不到一分钟的时间内处理50多页,几乎完美地处理页面布局和文本方向(我知道这就是ABBYY收费的原因)。不幸的是,使用这个扫描软件对用户来说更复杂,而且它自己只能完成步骤1到3。
我想知道我是否应该换个方式来处理这个问题,可能完全把OCR和上传功能与扫描界面分开,或者有没有我忽视的OCR包或其他解决方案可以集成到Python应用中。调用外部应用来完成这个工作会不会导致性能问题呢?
无论我怎么做,控制第4步是很重要的,因为如果要求用户手动设置每个上传文件的类型和元数据,这可能会造成问题。
1 个回答
1
你遇到的问题是,Tesseract是一个光学字符识别(OCR)引擎,而不是用来分析页面布局的软件。根据Tesseract的网站,版本3.0可能会加入页面布局分析的功能。
我知道在之前的版本中,它只在文本是单列的时候表现得比较好。
我觉得你需要增加一个步骤1.5,来做一些布局分析,试着找出图像块、标志和难以辨认的文本。
你可能想看看OCRfeeder,了解一下它的解决方案。