相关疑难解决方法(0)

OCR应用前的图像清洁

我在过去的几个小时里一直在试验PyTesser,这是一个非常好的工具.我注意到有关PyTesser准确性的一些事情:

  1. 带有图标,图像和文本的文件 - 准确率为5-10%
  2. 仅包含文本的文件(图像和图标已擦除) - 准确率为50-60%
  3. 带拉伸的文件(这是最好的部分) - 在x或y轴上面的2)拉伸文件将精度提高了10-20%

显然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忽略它们.此外,图像中的文本布局和格式也有很大的不同.它只适用于带有文本的图像.希望这有帮助.

python ocr image-processing

14
推荐指数
3
解决办法
2万
查看次数

使用Pillow获取tif文件的图像dpi

如何使用枕头获得tiff图像DPI?不能在文档中看到.

from PIL import Image
im = Image.open('test.tif')
print("im dpi?")
Run Code Online (Sandbox Code Playgroud)

python pillow

9
推荐指数
1
解决办法
1万
查看次数

如何提高python中扫描图像中文本的分辨率?

我使用 tesseract-OCR 从扫描图像中提取文本,对于少数图像,由于分辨率低而无法正确识别文本,并且产生的输出是一些不相关的字符。

应用技术:

  1. 将 dpi 增加到 300。

  2. opencv 中的图像预处理技术。

  3. 在 opencv 中使用 dnn_superres 放大图像

  4. 降噪技术。

  5. 参考 git repos,其中使用深度学习开发了超分辨率算法模型。

  6. 通过训练 tessdata 提高 tesseract-ocr 质量。

参考链接

  1. 提高扫描文档的 OCR 准确性
  2. 图像处理以提高tesseract OCR准确性

示例图像:

在此处输入图片说明

python中有没有什么简单的方法可以在不使用任何深度学习模型的情况下改进文本。

python image python-tesseract

7
推荐指数
1
解决办法
2862
查看次数

使用Gimp而不是我的Python代码手动预处理Image时,使用Tesseract-OCR进行文本识别的图像更好

我正在尝试用Python编写代码,用于使用Tesseract-OCR进行手动图像预处理和识别.

手动过程:
为了手动识别单个图像的文本,我使用Gimp预处理图像并创建TIF图像.然后我将它喂给Tesseract-OCR,它正确识别它.

使用Gimp预处理图像我做 -

  1. 将模式更改为RGB /灰度
    菜单 - 图像 - 模式 - RGB
  2. 阈值
    菜单 - 工具 - 颜色工具 - 阈值 - 自动
  3. 将模式更改为索引
    菜单 - 图像 - 模式 - 索引
  4. 调整大小/缩放到宽度> 300px
    菜单 - 图像 - 缩放图像 - 宽度= 300
  5. 保存为Tif

然后我喂它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)

python opencv tesseract image python-tesseract

6
推荐指数
1
解决办法
6298
查看次数

Tesseract 总是缺少图片中的文本行

我正在尝试使用 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)

c++ ocr opencv tesseract

6
推荐指数
1
解决办法
1535
查看次数

使用OpenCV检测表

我经常使用扫描的纸张.这些文件包含我需要手动输入计算机的表格(类似于Excel表格).为了使任务更糟,表可以具有不同数量的列.手动将它们输入Excel是至关重要的.

如果我能把程序放到OCR上,我想我可以节省一周的工作时间.是否可以使用OpenCV检测标题文本区域,并检测检测到的图像坐标后面的文本.

我可以在OpenCV的帮助下实现这一目标,还是需要完全不同的方法?

编辑:示例表实际上只是一个类似于您在Excel和其他电子表格应用程序中可以看到的标准表,请参见下文.

在此输入图像描述

opencv vision computer-vision

5
推荐指数
1
解决办法
7596
查看次数

Pytesseract 提高 OCR 准确性

我想从 中的图像中提取文本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)

python ocr tesseract python-3.x pytesser

5
推荐指数
1
解决办法
1万
查看次数

从背景图像上的浅色文本中提取文本

我有一个如下图像:

要处理的图像

我想从中提取文本,应该是ws35,我尝试使用pytesseract库使用该方法:

pytesseract.image_to_string(Image.open(path))
Run Code Online (Sandbox Code Playgroud)

但它什么也没有回报......我做错了什么?如何使用OCR取回文本?我需要在它上面应用一些过滤器吗?

python tesseract image-processing python-tesseract

0
推荐指数
1
解决办法
214
查看次数