Python工具箱系列(五十五)
文字识别
文字识别是热门研究方向。目前相对成熟的有:
•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
对下图的英文进行识别
识别效果如下:
# 命令
tesseract python-ocr-01.png stdout
# 输出
Warning. Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 331
PyImageSearch
能够准确识别,随后对下图的中文进行识别。
我们使用的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', config=tessdata_dir_config,) # 使用简体中文解析图片
print(content)
ocr('/root/dev/gotoolkits/figures/python-ocr-02.png')
以下是识别的结果。
随 着 国 家 对 于 数 字 档 案 管 理 管 理 提 出 了 越 来 越 高 的 要 求 , 档 案 系 统 不 仅
要 进 一 步 提 升 档 案 的 数 字 化 率 , 同 时 也 要 提 供 对 档 案 的 利 用 率 。 目 前 , 大 部
分 档 案 系 统 进 行 了 信 息 系 统 建 设 , 以 及 档 案 数 字 化 工 作 , 但 仍 然 存 在 的 问 题
是 :
@ 数 字 化 率 有 进 一 步 提 升 的 空 间
@ 数 字 化 后 的 档 案 以 图 片 保 存 ,OCR 转 换 的 成 功 率 有 待 提 升 .
_ 大 部 分 还 没 有 实 现 全 文 检 索 , 只 能 够 根 据 档 案 通 用 管 理 要 求 , 提 供
基 于 现 有 编 码 体 制 的 查 询 , 无 法 根 据 档 案 自 身 的 内 容 进 行 检 索
从识别效果来看还是不错的。但是对于视频文件中的字幕识别就有些不太好了,原因在于背景过于凌乱。如下图所示。
使用上述代码识别的结果是:自 眉 鸦 王 有 仓 外 孙 卯
这个结果确实不能够让人满意。下面使用百度的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, visualization=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的安装过程如下。
--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown
pip install PyYAML -U --ignore-installed
pip install --upgrade packaging
pip install paddlepaddle paddlehub
pip install shapely pyclipper