标签: python-tesseract

使用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
查看次数

如何使用python tesseract设置init only参数?

我正在尝试使用python-tesseract包装器设置一些Tesseract参数,但对于Init Only参数,我无法这样做.

我一直在阅读Tesseract文档,似乎我必须使用Init()来设置它们.这些是setVariable文档所说的:

仅适用于非init变量*(init变量应传递给Init()).

所以Init()函数有这个签名:

const char *    datapath,
const char *    language,
OcrEngineMode   oem,
char **     configs,
int     configs_size,
const GenericVector< STRING > *     vars_vec,
const GenericVector< STRING > *     vars_values,
bool    set_only_non_debug_params
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

import tesseract

configVec =     ['user_words_suffix',   'load_system_dawg',     'load_freq_dawg']
configValues =  ['brands',              '0',                    '0']

api = tesseract.TessBaseAPI()
api.Init(".","eng",tesseract.OEM_TESSERACT_ONLY, None, 0, configVec, configValues, False)
api.SetPageSegMode(tesseract.PSM_AUTO_OSD)
api.SetVariable("tessedit_char_whitelist", "€$0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz,.\"-/+%")
Run Code Online (Sandbox Code Playgroud)

问题是我收到以下错误:

NotImplementedError: Wrong number or type of arguments for overloaded function 'TessBaseAPI_Init'.
  Possible C/C++ prototypes are:
    tesseract::TessBaseAPI::Init(char const *,char …
Run Code Online (Sandbox Code Playgroud)

python tesseract python-tesseract

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

OSError:[Errno 2]没有使用pytesser的文件或目录

这是我的问题,我想用pytesser来获取图片的内容.我的操作系统是Mac OS 10.11,我已经安装了PIL,pytesser,tesseract-ocr引擎和其他支持库,如libpng等.但是当我运行我的代码时,如下所示,会发生错误.

from pytesser import *
import os
image = Image.open('/Users/Grant/Desktop/1.png')
text = image_to_string(image)
print text
Run Code Online (Sandbox Code Playgroud)

接下来是错误消息

Traceback (most recent call last):
File "/Users/Grant/Documents/workspace/image_test/image_test.py",    line 10, in <module>
text = image_to_string(im)
File   "/Users/Grant/Documents/workspace/image_test/pytesser/pytesser.py", line   30, in image_to_string
call_tesseract(scratch_image_name, scratch_text_name_root)
File "/Users/Grant/Documents/workspace/image_test/pytesser/pytesser.py", line 21, in call_tesseract
retcode = subprocess.call(args)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
return Popen(*popenargs, **kwargs).wait()
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
errread, errwrite)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
raise child_exception
OSError: [Errno 2] No such file …
Run Code Online (Sandbox Code Playgroud)

python error-handling python-tesseract pytesser

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

无法提取嵌入图像中的准确文本

我已经写在一个脚本python使用pytesseract以获得嵌入图像中的文本.当我运行我的脚本时,刮刀很奇怪地完成它的工作,这意味着我得到的文本与图像中的文本完全不同.

我试过的脚本:

import requests, io, pytesseract
from PIL import Image

response = requests.get('http://skoleadresser.no/4DCGI/WC_Pedlex_Adresse/864928.jpg')
img = Image.open(io.BytesIO(response.content))
imagetext = pytesseract.image_to_string(img)
print(imagetext)
Run Code Online (Sandbox Code Playgroud)

图像中的文字如下:

在此输入图像描述

结果我有:

Adresse WM 0an Hanssensm 7 A
4u21 Slavanqer

warm 52 m so no

Te‘efaks 52 m 90 m

E'Dus‘x Van’s strand?anlmu
Run Code Online (Sandbox Code Playgroud)

我怎样才能得到准确的结果?

python web-scraping python-3.x python-tesseract

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

如何通过PIL和pytesseract使图像更具对比度,灰度然后准确地获得所有字符?

请在此处下载附件并将其另存为/tmp/target.jpg

在此处输入图片说明
您可以看到0244Rjpg,i中包含以下python代码提取字符串:

from PIL import Image
import pytesseract
import cv2
filename = "/tmp/target.jpg"
image = cv2.imread(filename)
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
ret, threshold = cv2.threshold(gray,55, 255, cv2.THRESH_BINARY)
print(pytesseract.image_to_string(threshold))
Run Code Online (Sandbox Code Playgroud)

我得到的是

0244K
Run Code Online (Sandbox Code Playgroud)

正确的字符串是 0244R,如何使图像具有更高的对比度,灰度,然后使用PIL和pytesseract准确地获得所有字符?这是生成图像的网页:

http://www.crup.cn/ValidateCode/Index?t=0.14978241776661583

python-3.x python-tesseract

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

tesseract 从表中读取值

我的问题是关于使用 OCR 从图像中的表中提取数据的这篇文章

我正在使用tesseract将表格图像转换为文本。除了不保留表的格式之外,这很有效。一种解决方案是用一些字母替换列,这些字母tesseract会识别并愚弄它把表格当作一些文本。

这是一个没有列的表的示例 在此处输入图片说明

我使用以下代码绘制“QQ”的列

im=Image.open("file.png")
draw  = ImageDraw.Draw(im)
font=ImageFont.truetype("/usr/share/fonts/gnu-free/FreeSerifBold.ttf",12)
by = font.getsize("S")[1]
col = [240,480]
px = []

for y in range(0,im.size[1],by):
    for x in col:
        draw.text((x,y),"QQ",font=font,fill=0)

im.save("res-file.png")
im.show()
Run Code Online (Sandbox Code Playgroud)

这给了我以下图片 在此处输入图片说明

问题是 tesseract 甚至可以识别 QQ。我也把QQ列写在空白页上,tesseract不认。

有没有办法使用tesseract将png格式的表格转换为文本?有什么东西让我逃过一劫吗?

python tesseract python-tesseract

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

Pytesseract:UnicodeDecodeError:“charmap”编解码器无法解码字节

我使用 Pytesseract 对屏幕截图运行大量 OCR。这在大多数情况下运行良好,但少数情况会导致此错误:

pytesseract.image_to_string(image,None, False, "-psm 6")
Pytesseract: UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 2: character maps to <undefined>
Run Code Online (Sandbox Code Playgroud)

我正在使用Python 3.4。任何如何防止此错误发生的建议(不仅仅是尝试/例外)都会非常有帮助。

tesseract python-3.x python-unicode python-tesseract

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

等价于PIL中OpenCV的腐蚀和扩张?

我想用PyTesseract做一些图像OCR,并且我已经看到OpenCV的腐蚀和扩张功能对于噪声去除预处理非常有用。

由于PyTesseract已经需要PIL / Pillow,所以我想在PIL中进行噪声消除,而不是获得另一个库。PIL中有侵蚀或膨胀的等效物吗?(我的研究似乎建议可以以这种方式使用MaxFilter和MinFilter,但对我来说还不是很清楚。)

谢谢!

python-imaging-library pillow python-tesseract

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

如何减少魔杖内存使用量?

我正在使用魔杖和 pytesseract 将 pdf 的文本上传到 django 网站,如下所示:

image_pdf = Image(blob=read_pdf_file, resolution=300)
image_png = image_pdf.convert('png')

req_image = []
final_text = []

for img in image_png.sequence:
    img_page = Image(image=img)
    req_image.append(img_page.make_blob('png'))

for img in req_image:
    txt = pytesseract.image_to_string(PI.open(io.BytesIO(img)).convert('RGB'))
    final_text.append(txt)

return " ".join(final_text)
Run Code Online (Sandbox Code Playgroud)

我让它在单独的 ec2 服务器中的 celery 中运行。然而,因为即使是 13.7 mb 的 pdf 文件,image_pdf 也会增长到大约 4gb,所以它被 oom 杀手阻止了。我不想为更高的内存付费,而是想尝试减少魔杖和 ImageMagick 使用的内存。由于它已经是异步的,我不介意增加计算时间。我浏览了这个:http : //www.imagemagick.org/Usage/files/#massive,但我不确定它是否可以用魔杖实现。另一种可能的解决方法是一次一页地打开 pdf,而不是一次将完整图像放入 RAM 中。或者,我如何直接使用 python 与 ImageMagick 接口,以便我可以使用这些内存限制技术?

python imagemagick amazon-ec2 wand python-tesseract

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

Tesseract 3.x多处理奇怪的行为

我不确定这种奇怪的东西或者tesseract-ocr本身是不是我的基础设施.

每当我在单进程环境中使用image_to_stirng时 - tesseract-ocr工作正常.但是当我用gunicorn产生多个工作人员并且所有人都开始使用ocr读取工作时 - tesseract-ocr开始阅读非常差(而不是来自性能老虎钳,但不是精确的老虎钳).即使在负载完成后 - tesseract也没有相同的准确性.我需要重新启动所有工人才能让tesseract再次运转良好.

这太超级怪了.也许有人已经过期或听说过这个问题?

python tesseract gunicorn python-tesseract

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