python tesseract的OCR结果高度不一致

qpgpyjmq  于 2023-10-14  发布在  Python
关注(0)|答案(5)|浏览(129)

这是原始截图,我将图像裁剪成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默认识别扫描它无法识别某些区域,但一旦我选择手动一切都被检测到并正确翻译为文本

Code

zphenhs4

zphenhs41#

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

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

尝试与您提供的图像和下面是结果:
Extracted Text Out of Image
我面临的唯一问题是,我的超正方体字典正在将您的图像中提供的“1”解释为“I”。
下面是可用的psm选项列表:
pagesegmode值为:0 =仅方向和脚本检测(OSD)。
1 =使用OSD自动分页。
2 =自动页面分割,但无OSD或OCR
3 =全自动页面分割,但无OSD。(默认)
4 =假设一列可变大小的文本。
5 =假设一个单一的垂直对齐文本块。
6 =假设单个统一的文本块。
7 =将图像视为单个文本行。
8 =将图像视为单个单词。
9 =将图像视为圆圈中的单个单词。
10 =将图像视为单个字符。

pbossiut

pbossiut2#

我用这个链接
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]

它只会显示粗体字母
谢谢

q3qa4bjr

q3qa4bjr3#

我的建议是在完整的图像上执行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保存。
1.如果你想使用image_to_string,那么覆盖它以保存300 dpi的图像。
1.可以使用run_tesseract方法,然后读取输出文件。
我运行OCR的图像。

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

mwecs4sa

mwecs4sa4#

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

import PIL
img= PIL.Image.open("yourimg.png")
  • 把图片放大,我通常把图片放大一倍。

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

  • 灰度化图像

img.convert('LA')

image =<$b.gimp_file_load(file,file)layer =<$b.gimp_image_get_active_layer(image)REPLACE= 2 <$b.gimp_by_color_select(layer,"#000000”,20,REPLACE,0,0,0,0)<$b.gimp_context_set_forwarding((0,0,0))<$b.gimp_edit_fill(layer,0)<$b.gimp_context_set_forwarding((255,255,255))<$b.gimp_edit_fill(layer,0)
pdb.gimp_selection_invert(image)pdb.gimp_context_set_foreground((0,0,0))

7d7tgy0s

7d7tgy0s5#

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'))

相关问题