使用 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_besttessdata_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)

Read More: