这几天,工作中需要整理大量文档,而且,需要将文档中特定部分摘录汇总。可是这些文档均为扫描而成的pdf文件,如果将其中需要的特定部分进行摘录,需要重新打字转录,那真是费时费力。可工作还要进行,这可如何是好?难道只能硬着头皮一个一个打字?那真是不符合我们“懒人”的做派。
突然想到Julia中可以使用Tesseract包实现OCR功能,于是就试试这个方案。
将文档中需要摘录的部分截屏存为图片,准备使用Julia来进行OCR。这里需要Images包和Tesseract包(using Images和using Tesseract)。
因为是英文文档,所以使用 download_languages(“eng”) 来初始化Tesseract进行OCR的语言。此前曾出现过无法正常下载语言文件,导致Tesseract不能正常运行的情况。如果遇到这个问题,可以直接下载语言文件,并放置入Tesseract相应文件夹中即可。
操作其实比较简单,先是TessInst(“eng”)初始化一个基于英语的实例,再使用 pix_read() 读取打开的图片文件。然后用 tess_image() 将读取的图片文件信息导入实例,最后将实例作为参数,使用 tess_text() ,即可获得OCR的文字了。
可是,不知什么原因,无论是用VS Code还是Jupyter Lab,执行 tess_text() 时总是报错或假死机。根据VS Code提供的错误代码,到其主页查看,似乎是兼容性的什么问题。
后来,不使用IDE环境,直接启动Julia,将代码copy至Julia REPL中,可以正常运行并得到结果了。
在代码后段,使用文件操作函数——open(),write()和close(),将OCR结果保存至文件中以备后续使用。而且,为了方便及提高效率,使用Gtk包,反复打开需要OCR的图片文件,将多个结果保存在一个文件中;并在保存每个图片的OCR结果时,将图片文件名添加进去,进行对应,方便此后查询。
这样,不多时,一批文档的特定内容就全部读取完毕,只需核对OCR结果与原文档内容是否匹配,并汇总即可。