使用 OCR 的一些记录
0. 问题
需要对一篇扫描件里的内容进行识别和提取,以下是一些记录。
1. PDF 转换成图片
文档资料是 PDF 格式的,首先需要先截取页面并转换成图片。
1. 使用 qpdf
qpdf 可以从一篇 PDF 里截取某些页面,并转存为 PDF 格式。
安装 qpdf 软件包:
sudo apt install qpdf
截取。比如从 a.pdf 里,截取第 30 页至第 35 页,并另存为 b.pdf:
qpdf a.pdf --pages a.pdf 30-35 -- b.pdf
2. PDF 转换成图片
安装 poppler-utils
软件包:
sudo apt install poppler-utils
转换成图片:
pdftoppm b.pdf output -png
2.1. 使用 tesseract 识别
编译并安装 tesseract:
这里有编译过程的描述说明。
git clone --recurse-submodules https://github.com/tesseract-ocr/tesseract.git
cd tesseract
./autogen.sh
./configure --prefix=$HOME/local/
make
make install
下载语言文件:
这里有说明,需要下载中文相关的文件,并保存到 ${HOME}/local/share/tessdata/
目录下。当然也有 tessdata_best
和 tessdata_fast
可以使用。
运行软件:
export TESSDATA_PREFIX=${HOME}/local/share/tessdata
./tesseract input.png - -l chi_sim+eng | tee -a output.txt
识别出来的文本,在 output.txt
文件里面。
2.2. 使用 chineseocr_lite 识别
开源项目 chineseocr_lite,是一个超轻量级中文 ocr,支持竖排文字识别。
项目地址:https://github.com/DayBreak-u/chineseocr_lite
安装过程:
// 先安装 python3.6 的虚拟环境
git clone https://github.com/DayBreak-u/chineseocr_lite.git
cd chineseocr_lite
pip3 install -r requirements.txt
使用:
python backend/main.py
通过浏览器访问即可。
改造程序:
之前步骤里已经把页面转存为图片了,以下代码片断里,就是对每一张图片,使用 model.py
里实现的 OcrHandle
来完成识别:
from model import OcrHandle
for filename in sorted(glob.glob('*.png')):
f = open(filename, 'rb')
img = Image.open(f)
result = ocrhandle.text_predict(img, short_size)
print(result)
result
变量里有完整的信息,按实际需求解析即可。
2.3. 使用 EasyOCR 识别
开源项目 EasyOCR,项目地址:https://github.com/jaidedai/easyocr
安装过程:
pip3 install easyocr
依赖项目都会自动安装。
使用:
import easyocr
reader = easyocr.Reader(['ch_sim','en'])
result = reader.readtext('input.jpg', detail=0)
print(result)