9

在此处输入图像描述

这是原始屏幕截图,我将图像裁剪为 4 个部分,并尽可能清除图像的背景,但 tesseract 仅检测到此处的最后一列而忽略其余部分。

在此处输入图像描述

显示了 tesseract 的输出,因为它有空格,我在处理结果时删除了这些空格

  Femme—Fatale.



  DaRkLoRdEIa
  aChineseN1gg4

  Noob_Diablo_

在此处输入图像描述

显示了 tesseract 的输出,因为它有空格,我在处理结果时删除了这些空格

Kicked.

NosNoel
ChikiZD
Death_Eag|e_42

Chai—.

在此处输入图像描述

3579 10 1 7 148

2962 3 O 7 101

2214 2 2 7 99

2205 1 3 6 78

在此处输入图像描述

8212

7198

6307

5640

4884

15

40

40

6O

80

80

我只是倾销的输出

result = `pytesseract.image_to_string(Image.open("D:/newapproach/B&W"+str(i)+".jpg"),lang="New_Language")`

但我不知道如何从这里开始以获得一致的结果。无论如何,我可以强制 tesseract 识别文本区域并使其扫描它。因为在训练器(SunnyPage)中,默认识别上的 tesseract 扫描它无法识别某些区域,但是一旦我手动选择所有区域,就会检测到所有内容并正确翻译为文本

代码

4

5 回答 5

9

尝试使用命令行,它为我们提供了决定使用哪个psm值的选项。

你可以试试这个:

pytesseract.image_to_string(image, config='-psm 6')

使用您提供的图像进行了尝试,结果如下:

从图像中提取文本

我面临的唯一问题是我的 tesseract 字典将图像中提供的 "1" 解释为 ""I" 。

以下是可用的 psm 选项列表:

pagesegmode 值为: 0 = 仅方向和脚本检测 (OSD)。

1 = 使用 OSD 自动进行页面分割。

2 = 自动页面分割,但没有 OSD 或 OCR

3 = 全自动页面分割,但没有 OSD。(默认)

4 = 假设有一列可变大小的文本。

5 = 假设一个统一的垂直对齐文本块。

6 = 假设一个统一的文本块。

7 = 将图像视为单个文本行。

8 = 将图像视为一个单词。

9 = 将图像视为圆圈中的单个单词。

10 = 将图像视为单个字符。

于 2017-09-25T22:50:06.527 回答
1

我用了这个链接

https://www.howtoforge.com/tutorial/tesseract-ocr-installation-and-usage-on-ubuntu-16-04/

只需使用以下命令,即可将准确率提高 50% `

sudo apt update

sudo apt install tesseract-ocr

sudo apt-get install tesseract-ocr-eng

sudo apt-get install tesseract-ocr-all

sudo apt install imagemagick

convert -h

tesseract [image_path] [file_name]

convert -resize 150% [input_file_path] [output_file_path]

convert [input_file_path] -type Grayscale [output_file_path]

tesseract [image_path] [file_name]

它只会显示粗体字母

谢谢

于 2018-11-22T13:20:48.200 回答
0

我的建议是对完整图像执行 OCR。

我已经对图像进行了预处理以获得灰度图像。

import cv2
image_obj = cv2.imread('1D4bB.jpg')
gray = cv2.cvtColor(image_obj, cv2.COLOR_BGR2GRAY)
cv2.imwrite("gray.png", gray)

我已经在终端的图像上运行了 tesseract,在这种情况下,准确率似乎也超过了 90%。

tesseract gray.png out

3579 10 1 7 148
3142 9 o 5 10
2962 3 o 7 101
2214 2 2 7 99
2205 1 3 6 78
Score Kills Assists Deaths Connection
8212 15 1 4 4o
7198 7 3 6 40
6307 6 1 5 60
5640 2 3 6 80
4884 1 1 5 so

以下是一些建议——

  1. 不要直接使用 image_to_string 方法,因为它将图像转换为 bmp 并以 72 dpi 保存。
  2. 如果你想使用 image_to_string 然后覆盖它以将图像保存为 300 dpi。
  3. 您可以使用 run_tesseract 方法,然后读取输出文件。

我运行 OCR 的图像。 在此处输入图像描述

这个问题的另一种方法是裁剪数字并深入到神经网络进行预测。

于 2017-09-20T06:16:41.060 回答
-1

我认为您必须先对图像进行预处理,对我有用的更改是:假设

import PIL
img= PIL.Image.open("yourimg.png")
  • 使图像更大,我通常将图像尺寸加倍。

    img.resize(img.size[0]*2, img.size[1]*2)

  • 灰度图像

    img.convert('LA')

  • 使字符更粗,你可以在这里看到一种方法:https ://blog.c22.cc/2010/10/12/python-ocr-or-how-to-break-captchas/ 但这种方法相当慢,如果你用它,我建议使用另一种方法

  • 使用 gimpfu 选择、反转选择、填充黑色、白色

    image = pdb.gimp_file_load(file, file) layer = pdb.gimp_image_get_active_layer(image) REPLACE= 2 pdb.gimp_by_color_select(layer,"#000000",20,REPLACE,0,0,0,0) pdb.gimp_context_set_foreground((0 ,0,0)) pdb.gimp_edit_fill(layer,0) pdb.gimp_context_set_foreground((255,255,255)) pdb.gimp_edit_fill(layer,0)

    pdb.gimp_selection_invert(图像) pdb.gimp_context_set_foreground((0,0,0))

于 2017-09-25T08:59:04.663 回答
-1
fn = 'image.png'
img = cv2.imread(fn, 0)
img = cv2.bilateralFilter(img, 20, 25, 25)
ret, th = cv2.threshold(img, 0, 255, cv2.THRESH_BINARY+cv2.THRESH_OTSU)
# Image.fromarray(th)
print(pytesseract.image_to_string(th, lang='eng'))
于 2020-01-06T08:28:06.040 回答