我在过去的几个小时里一直在试验PyTesser,这是一个非常好的工具.我注意到有关PyTesser准确性的一些事情:
显然Pytesser并不关心字体尺寸或图像拉伸.虽然有很多关于图像处理和OCR的理论需要阅读,但是在应用PyTesser或其他库之前,是否有任何标准的图像清理程序(除了擦除图标和图像),而不管语言是什么?
...........
哇,这篇文章现在已经很老了.在过去的几天里,我再次开始研究OCR.这次我扔掉了PyTesser并使用了Tesseract引擎和ImageMagik.直截了当地说,这就是我发现的:
1) You can increase the resolution with ImageMagic(There are a bunch of simple shell commands you can use)
2) After increasing the resolution, the accuracy went up by 80-90%.
Run Code Online (Sandbox Code Playgroud)
因此,Tesseract Engine毫无疑问是市场上最好的开源OCR引擎.此处不需要事先清洁图像.需要注意的是,它不适用于包含大量嵌入图像的文件,而且我没有找到一种方法来训练Tesseract忽略它们.此外,图像中的文本布局和格式也有很大的不同.它只适用于带有文本的图像.希望这有帮助.
如何使用枕头获得tiff图像DPI?不能在文档中看到.
from PIL import Image
im = Image.open('test.tif')
print("im dpi?")
Run Code Online (Sandbox Code Playgroud) 我使用 tesseract-OCR 从扫描图像中提取文本,对于少数图像,由于分辨率低而无法正确识别文本,并且产生的输出是一些不相关的字符。
应用技术:
将 dpi 增加到 300。
opencv 中的图像预处理技术。
在 opencv 中使用 dnn_superres 放大图像
降噪技术。
参考 git repos,其中使用深度学习开发了超分辨率算法模型。
通过训练 tessdata 提高 tesseract-ocr 质量。
参考链接:
示例图像:
python中有没有什么简单的方法可以在不使用任何深度学习模型的情况下改进文本。
我正在尝试用Python编写代码,用于使用Tesseract-OCR进行手动图像预处理和识别.
手动过程:
为了手动识别单个图像的文本,我使用Gimp预处理图像并创建TIF图像.然后我将它喂给Tesseract-OCR,它正确识别它.
使用Gimp预处理图像我做 -
然后我喂它tesseract -
$ tesseract captcha.tif output -psm 6
Run Code Online (Sandbox Code Playgroud)
而且我一直都能得到准确的结果.
Python代码:
我试图使用OpenCV和Tesseract复制上述过程 -
def binarize_image_using_opencv(captcha_path, binary_image_path='input-black-n-white.jpg'):
im_gray = cv2.imread(captcha_path, cv2.CV_LOAD_IMAGE_GRAYSCALE)
(thresh, im_bw) = cv2.threshold(im_gray, 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
# although thresh is used below, gonna pick something …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 OCR 从图片中提取数据。我在 C++ 中使用 Tesseract API 来实现这一点。
原图是这样的:
现在对我来说重要的数据是这样的:
然而,无论我尝试什么,永远不会识别标记的蓝线。
用tesseract分析图片的代码是这样的:
std::string readFromFile(const std::string& filename)
{
tesseract::TessBaseAPI *api = new tesseract::TessBaseAPI();
api->SetPageSegMode(tesseract::PSM_AUTO);
if (api->Init("folder_to_tessdata", "deu+eng")) {
fprintf(stderr, "Could not initialize tesseract.\n");
exit(1);
}
// Open input image with leptonica library
Pix *image = pixRead(filename.c_str());
api->SetImage(image);
// Get OCR result
char *outText = api->GetUTF8Text();
std::string result{ outText };
api->End();
delete[] outText;
pixDestroy(&image);
return result;
}
Run Code Online (Sandbox Code Playgroud)
我试图通过预处理图像来提高准确性,就像这个问题中建议的那样:图像处理以提高 tesseract OCR 准确性
预处理代码:
cv::Mat image;
image = cv::imread(filename, cv::IMREAD_COLOR);
cv::resize(image, image, cv::Size{}, …Run Code Online (Sandbox Code Playgroud) 我经常使用扫描的纸张.这些文件包含我需要手动输入计算机的表格(类似于Excel表格).为了使任务更糟,表可以具有不同数量的列.手动将它们输入Excel是至关重要的.
如果我能把程序放到OCR上,我想我可以节省一周的工作时间.是否可以使用OpenCV检测标题文本区域,并检测检测到的图像坐标后面的文本.
我可以在OpenCV的帮助下实现这一目标,还是需要完全不同的方法?
编辑:示例表实际上只是一个类似于您在Excel和其他电子表格应用程序中可以看到的标准表,请参见下文.
我想从 中的图像中提取文本python。为了做到这一点,我选择了pytesseract。当我尝试从图像中提取文本时,结果并不令人满意。我也经历了这个并实现了列出的所有技术。然而,它的表现似乎并不好。
图像:
代码:
import pytesseract
import cv2
import numpy as np
img = cv2.imread('D:\\wordsimg.png')
img = cv2.resize(img, None, fx=1.2, fy=1.2, interpolation=cv2.INTER_CUBIC)
img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kernel = np.ones((1,1), np.uint8)
img = cv2.dilate(img, kernel, iterations=1)
img = cv2.erode(img, kernel, iterations=1)
img = cv2.threshold(cv2.medianBlur(img, 3), 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1]
pytesseract.pytesseract.tesseract_cmd = 'C:\\Program Files\\Tesseract-OCR\\tesseract.exe'
txt = pytesseract.image_to_string(img ,lang = 'eng')
txt = txt[:-1]
txt = txt.replace('\n',' ')
print(txt)
Run Code Online (Sandbox Code Playgroud)
输出:
t hose he large form might …Run Code Online (Sandbox Code Playgroud) 我有一个如下图像:
我想从中提取文本,应该是ws35,我尝试使用pytesseract库使用该方法:
pytesseract.image_to_string(Image.open(path))
Run Code Online (Sandbox Code Playgroud)
但它什么也没有回报......我做错了什么?如何使用OCR取回文本?我需要在它上面应用一些过滤器吗?