先容
本日我想和各人分享一个我在研究技能资料时发现的很好玩的东西——Tesseract。这不但仅是一个平凡的库,而是一个用C语言编写的OCR神器,可以或许辨认一大堆差异国家的语言。我不停在探求可以或许处置惩罚各种文档的工具,而Tesseract就像是给了我一把万能钥匙。
偶然间我们手头会有一堆扫描的文件大概图片,内里有许多有用的信息,但是它们就是悄悄地躺在那里,不能复制粘贴,也不能搜刮。这让我特殊头疼。直到我发现了Tesseract,这个标题才迎刃而解。它不但可以或许辨认英文,还能搞定中文、日文、韩文等等,简直是多语言文档的救星。
我在这里不是要给各人上技能课,而是想分享一个我以为特殊故意思的案例。这个案例展示了怎样用Tesseract和其他几个开源工具,在服务器上把PDF文件和图片里的笔墨给“抠”出来。这个过程我以为既神奇又实用,我以为你们大概会感爱好。
接下来,我会一步步地带你们相识这个过程。我们将会用到Ghostscript、Tesseract和PDFtk这三个工具,搭建起一个完备的OCR流水线。
我信任,这个案例也可以给你带来一些关于开发上新的思绪和实用的小本事。
那么,我们就不多废话了,一起来探索OCR的奥秘吧!
预备工作
若尚未拥有服务器,可前去 雨云官网 https://rainyun.ivwv.site 举行注册,新用户有专属优惠。
教程开始
第一步:安装 Ghostscript、Tesseract 和 PDFtk
OCR既能处置惩罚PDF文件(PDF文件里偶然也包罗图片),也能直接处置惩罚图片。处置惩罚PDF文件会多一些步调,如果你只处置惩罚图片,可以跳过这些步调。
我们必要三个工具:
- Ghostscript: 能把PDF转换成图片,也能把图片转换成PDF的工具。
- Tesseract: OCR引擎,能把图片里的笔墨辨认出来。
- PDFtk: 这个工具比力小巧,紧张用来把PDF文件拆分成单页,大概把单页重新组合成一个完备的PDF。
在Ubuntu体系上,安装这三个工具非常简朴,只必要在终端输入以下下令:
- sudo apt update
- sudo apt install pdftk ghostscript tesseract-ocr x11-utils
复制代码 安装完成后,可以用which下令查抄一下是否安装乐成:
- which pdftk
- # /usr/bin/pdftk
- which gs
- # /usr/bin/gs
- which tesseract
- # /usr/bin/tesseract
复制代码 接下来,我们就可以开始提取笔墨了!
第二步:将 PDF 转换为图片并运行 Tesseract
如果你没有PDF文件,可以下载我这个示例PDF文件先练练手,如果你有本身的PDF文件,可以更换反面内容中的文件名。
- curl -L "https://paste.c-net.org/MckennaBuzzing" -o "OCR-sample-paper.pdf"
复制代码 如果你的文件是PDF,起首必要把它转换成图片。我们可以用 Ghostscript 来完成这个任务:
- mkdir output # 创建一个文件夹存放生成的图片
- gs -o output/%05d.png -sDEVICE=png16m -r300 -dPDFFitPage=true OCR-sample-paper.pdf
复制代码 这段下令有点长,但别怕!我会表明这些参数:
- -o output/%05d.png表现把图片生存到output文件夹,%05d会主动给图片编号;
- -sDEVICE=png16m指定图片格式为PNG;
- -r300设置图片分辨率;
- -dPDFFitPage=true确保图片巨细符合。
运行后会输出一下信息,Ghostscript 将单独输出 PDF 中的每个页面:
完成后,你可以用ls output下令查察天生的图片。
此时看到 output 目次下有14张图片,如果你的情况中有Nodejs情况,可以使用以下下令,将当前路径设置为静态资源目次,我们来看看,这些 png 图片是什么:
运行好后欣赏器打开网址,我这里是: http://you_server_ip:8080 并进入output目次
我点击打开 00003.png ,发现是一张图片,图片并不可以或许复制笔墨。
接下来,我们用Tesseract把图片转换成可复制笔墨的PDF:
- for png in $(ls output); do
- tesseract -l eng \
- -c preserve_interword_spaces=0 \
- output/$png \
- output/$(echo $png | sed -e "s/\.png//g") \
- pdf
- done
复制代码 这段下令有点复杂,但核心就是用Tesseract辨认图片里的笔墨,并天生PDF文件。-l eng表现使用英语语言模子,如果你必要辨认其他语言,必要安装对应的语言包。
Tesseract会逐页处置惩罚图片,完成后,你可以在output文件夹里看到天生的PDF文件。
继续列出 output 目次下的内容,会看到多了同名的 PDF 文件。
我们继续欣赏器查察这些文件,照旧打开00003.pdf:
发现这次就可以恣意复制了,而且辨认准确率照旧很高的。
小提示: Ubuntu体系默认只安装了英语语言包,如果你必要辨认其他语言,必要安装对应的语言包,比方sudo apt install tesseract-ocr-all安装全部语言包。
安装好后欣赏器打开 https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html 这个网址,可以找到对应的 LangCode ,如果你必要辨认中文,那么 -l 参数反面将 eng 修改为 chi_sim 即可。
第三步:把单页PDF归并成一个
如果你处置惩罚的是PDF文件,现在必要把第二步天生的单页PDF文件归并成一个完备的PDF文件。我们可以用 **PDFtk **来完成这个任务:
- pdftk output/*.pdf cat output joined.pdf
复制代码
这段下令很简朴,就是把output文件夹里的全部PDF文件归并成一个名为joined.pdf的文件。
末了,我们用 Ghostscript 调解一下PDF文件的格式,让它看起来更美丽:
- gs -sDEVICE=pdfwrite -sPAPERSIZE=letter -dFIXEDMEDIA -dPDFFitPage -o final.pdf joined.pdf
复制代码 这段下令紧张用来调解PDF的尺寸和格式。-sPAPERSIZE=letter表现使用Letter纸张巨细,你可以根据必要修改。
现在,你已经乐成地完成了OCR!如果实际应用到开发中,你可以使用这一系列工具,主动化完成,而且使用pdftotext final.pdf下令把PDF文件转换成文本文件,可以开发一个知识库的全文检索,将原来内容为图片扫描件的PDF提取笔墨。
干系链接
我的博客:https://blog.ivwv.site
雨云官网:https://rainyun.ivwv.site
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金 |