使用拼写检查提高Tesseract OCR准确性
Posted 程序媛一枚~
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用拼写检查提高Tesseract OCR准确性相关的知识,希望对你有一定的参考价值。
使用拼写检查提高Tesseract OCR准确性
上一篇博客介绍了如何使用textblob库和Tesseract自动进行OCR文本,然后将其翻译为其他语言。这篇博客还将通过textblob应用自动拼写检查OCR文本来提高OCR准确性 (能够使用textblob纠正拼写错误,纠正单词等)。
虽然在特定示例中运行良好,但在其他情况下可能无法正常工作!拼写检查算法通常需要少量的人工干预。大多数拼写检查器会自动检查文档中的拼写错误,然后向用户提出候选更正列表。最后的拼写检查决定取决于用户。
当删除人为干预部分,转而允许拼写检查算法选择它认为最合适的更正时,只有轻微拼写错误的单词将被替换为在句子原始上下文中没有意义的单词。 应当谨慎使用自动拼写检查——在某些情况下,这将帮助提高OCR的准确性,但在其他情况下可能会损害准确性。
1. 效果图
示例图像如下(通过Explosm漫画生成器创建),其中包括拼写错误的单词。使用Tesseract可以用原始拼写错误对文本进行OCR。
自动拼写检查及修正效果图如下:
2. 原理
期望任何OCR系统,即使是最先进的OCR引擎,都能百分之百准确是不现实的。输入图像中的噪声、Tesseract未经过训练的非标准字体或低于理想的图像质量都会导致Tesseract出错并错误地OCR文本。
**可以通过创建可用于提高输出OCR质量的规则和启发式方法:如自动拼写检查。**例如当对一本书进行OCR,可以使用拼写检查来尝试在OCR过程后自动更正,从而创建更好、更准确的数字化文本版本。
2.1 步骤
- 了解如何使用textblob包进行拼写检查
- OCR包含拼写错误的文本
- 自动更正OCR文本的拼写
自动对一段文本进行OCR,然后使用textblob库对其进行拼写检查。
2.2 局限性和缺点
拼写检查算法最大的问题之一是,大多数拼写检查需要一些人为干预才能准确。 当出现拼写错误时,文字处理器会自动检测错误并提出候选修复方案,通常是拼写检查器认为应该拼写的两到三个单词。除非在10次拼写中有9次拼写错误,否则可以在拼写检查器推荐的候选词中找到想要使用的单词。
可以选择删除该人工干预部分,而是允许拼写检查器根据内部拼写检查算法使用它认为最可能的单词。 可能会用在句子或段落的原始语境中没有意义的单词来替换只有轻微拼写错误的单词。因此,在依赖全自动拼写检查时应该谨慎。 在输出OCR文本中插入不正确的单词(相对于正确的单词,但有轻微的拼写错误)是有风险的。
如果发现拼写检查损害了OCR的准确性,可能需要:
- 研究textblob库中包含的通用拼写检查算法以外的其他拼写检查算法
- 将拼写检查替换为基于启发式的方法(例如正则表达式匹配)
- 允许拼写错误存在,因为无论如何没有OCR系统是百分之百准确的
3. 源码
# 自动对一段文本进行OCR,然后使用textblob库对其进行拼写检查。
# 理想情况下能够提高脚本的OCR准确性,无论以下情况:
# - 输入图像中的拼写不正确
# - Tesseract错误的OCR字符
# USAGE
# python ocr_and_spellcheck.py --image comic_spelling.jpg
# 导入必要的包
from textblob import TextBlob # 上一节使用该软件包将OCR文本从一种语言翻译为另一种语言。这里将使用textblob的自动拼写检查实现。
import pytesseract
import argparse
import cv2
# 构建命令行参数及解析
# --image 要进行ocr文本的拼写检查和纠正的图片
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True,
help="path to input image to be OCR'd")
args = vars(ap.parse_args())
# 加载输入图像,转换BGR(OpenCV的默认顺序)切换到RGB(这是Tesseract和Pyteseract所期望的)。
image = cv2.imread(args["image"])
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
# 使用Tesseract OCR图像
text = pytesseract.image_to_string(rgb)
# 语法检查前输出文本
# 在屏幕上显示拼写检查之前的OCR文本
print("BEFORE SPELLCHECK")
print("=================")
print(text)
print("\\n")
# 可能存在拼写错误,例如用户在创建图像时拼写错误的文本,或者由于Tesseract错误地OCR一个或多个字符而导致的“打字错误”-为了解决这个问题需要利用textblob
# 通过correct()方法应用自动拼写检查更正OCR文本
tb = TextBlob(text)
corrected = tb.correct()
# 拼写检查后显示文本
print("AFTER SPELLCHECK")
print("================")
print(corrected)
参考
以上是关于使用拼写检查提高Tesseract OCR准确性的主要内容,如果未能解决你的问题,请参考以下文章