使用拼写检查提高Tesseract OCR准确性

news/2024/9/21 16:21:23

使用拼写检查提高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)

参考

  • https://pyimagesearch.com/2021/11/29/using-spellchecking-to-improve-tesseract-ocr-accuracy/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pgtn.cn/news/17605.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

使用Python进行名片OCR(识别姓名,职务,电话,Email邮箱)

上一篇博客介绍了如何通过以下方式自动OCR和扫描收据: 检测输入图像中的接收应用透视变换以获得收据的自顶向下视图利用Tesseract对收据上的文本进行OCR使用正则表达式提取价格数据 这篇博客将介绍如何使用Python对名片进行OCR,从名片中提取姓名、职务…

使用Tesseract和OpenCV构建自动收据扫描仪

使用Tesseract和OpenCV构建自动收据扫描仪 这篇博客将介绍如何使用Tesseract和OpenCV构建自动收据扫描仪。将使用OpenCV构建系统的实际图像处理组件,包括: 检测图像中的收据(边缘检测、轮廓检测、基于弧长和近似的轮廓滤波)找到…

opencv_角点算法

文章目录harris检测原理Shi_Tomasi算法SIFTFastharris检测原理 import numpy as np import cv2 as cv import matplotlib.pyplot as plt img cv.imread("opencv_3.png") gray cv.cvtColor(img,cv.COLOR_RGB2GRAY) graynp.float32(gray) dstcv.cornerHarris(gray,2,…

opencv算法+人脸检测

文章目录ORB算法视频读写图像人脸识别摄像头实时人脸检测ORB算法 orb算法结合了Fast和Brief算法,提出了构造金字塔,为Fast特征点添加了方向,从而使得关键点具有了尺度不变性和旋转不变性。 # orb算法结合了Fast和Brief算法,提出…

Windows pytesseract image_to_osd Invalid resolution 0 dpi. Using 70 instead. Too few characters报错及解决

Windows pytesseract image_to_osd Invalid resolution 0 dpi. Using 70 instead. Too few characters报错及解决 1. 安装 python3.7 pip install pytesseract0.1.9 安装tesseract-ocr(配置path环境变量或者在代码中指定tesseract_cmd) 2.报错及解决…

全浏览器兼容的DIV拖动效果

测试过下列浏览器 IE6、IE7、IE8、Chrome 5、FF 3.6、Opera 10、Safari 5 拖动效果的脚本网上都有&#xff0c;但网上找到的脚本有个问题 这是在网上随便找的代码(原出处不知道&#xff0c;很多类似代码的文章都没写出处&#xff0c;实在不知道到底出至哪里...) 代码 1 <!DO…

数据结构--图论

文章目录邻接矩阵和邻接表DFSBFS判断图是否为树邻接矩阵和邻接表 DFS BFS 判断图是否为树 #include<stdio.h> #include<malloc.h> #include<bits/stdc.h> using namespace std; #define INF 32767 #define MAXV 100 typedef char InfoType; typedef stru…

visual-logging——使得Python,OpenCV调试应用程序的新工具

visual-logging——Python&#xff0c;OpenCV调试应用程序的新工具 这篇博客将介绍如何使用可视化日志记录&#xff08;visual-logging&#xff09;来帮助可视化应用程序执行的管道。使用cv2.imshow和cv2.waitKey语句堵塞代码的日子已经一去不复返了&#xff01;相反&#xff…