文字识别是热门研究方向。目前相对成熟的有:

•Google的tesseract项目,它能识别100多种语言

•基于机器学习的多个项目,例如百度的paddlehub

tesseract使用比较简单,但是配置相对复杂一下。在Ubuntu bionic的安装过程如下。

apt install -y tesseract-ocr
tesseract -v
# 下载中文识别模型
cp chi_sim.traineddata /usr/share/tesseract-ocr/4.00/tessdata
pip install pytesseract

对下图的英文进行识别

Python工具箱系列(五十五)_paddle

识别效果如下:

# 命令
tesseract python-ocr-01.png stdout
# 输出
Warning. Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 331
PyImageSearch

能够准确识别,随后对下图的中文进行识别。

Python工具箱系列(五十五)_python_02



我们使用的python代码如下。

import pytesseract
from pathlib import Path
from PIL import Image

def ocr(filename):
    pth = Path(filename)
    image = Image.open(filename)

    # 图片二值化
    image = image.convert('L')
    # 可以定义阈值
    threshold = 200
    table = []
    for i in range(256):
        if i < threshold:
            table.append(0)
        else:
            table.append(1)
    # 识别图片
    curdir = pth.parent

    tessdata_dir_config = f'--tessdata-dir "{curdir}"'
    content = pytesseract.image_to_string(
        image, lang='chi_sim', cnotallow=tessdata_dir_config,)  # 使用简体中文解析图片
    print(content)
    
ocr('/root/dev/gotoolkits/figures/python-ocr-02.png')

以下是识别的结果。

随 着 国 家 对 于 数 字 档 案 管 理 管 理 提 出 了 越 来 越 高 的 要 求 , 档 案 系 统 不 仅
要 进 一 步 提 升 档 案 的 数 字 化 率 , 同 时 也 要 提 供 对 档 案 的 利 用 率 。 目 前 , 大 部
分 档 案 系 统 进 行 了 信 息 系 统 建 设 , 以 及 档 案 数 字 化 工 作 , 但 仍 然 存 在 的 问 题
是 :

@ 数 字 化 率 有 进 一 步 提 升 的 空 间

@ 数 字 化 后 的 档 案 以 图 片 保 存 ,OCR 转 换 的 成 功 率 有 待 提 升 .

_ 大 部 分 还 没 有 实 现 全 文 检 索 , 只 能 够 根 据 档 案 通 用 管 理 要 求 , 提 供

基 于 现 有 编 码 体 制 的 查 询 , 无 法 根 据 档 案 自 身 的 内 容 进 行 检 索

从识别效果来看还是不错的。但是对于视频文件中的字幕识别就有些不太好了,原因在于背景过于凌乱。如下图所示。

Python工具箱系列(五十五)_ide_03


使用上述代码识别的结果是:自 眉 鸦 王 有 仓 外 孙 卯

这个结果确实不能够让人满意。下面使用百度的paddlehub进行测试。

import paddlehub as hub
module = hub.Module(name='chinese_ocr_db_crnn_mobile')

img_path_list = ['/root/dev/gotoolkits/figures/python-ocr-03.png']
results = module.recognize_text(paths=img_path_list, visualizatinotallow=True)
for result in results:
    print(result)

第一次运行时,要下载训练模型数据,需要时间较长。输出结果如下。

{'save_path': 'ocr_result/ndarray_1662260520.7737947.jpg', 'data': [{'text': '高清翡翠台', 'confidence': 0.7626923322677612, 'text_box_position': [[1188, 54], [1348, 47], [1350, 87], [1189, 94]]}, {'text': '白眉鹰王有个外孙', 'confidence': 0.9479637742042542, 'text_box_position': [[583, 740], [858, 740], [858, 779], [583, 779]]}]}

能够看出,识别的可信度还是非常高的。paddlehub的安装过程如下。

pip install PyYAML -U --ignore-installed
pip install --upgrade packaging
pip install paddlepaddle paddlehub
pip install shapely pyclipper