我正在尝试用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) 我正在尝试使用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) 这是我的问题,我想用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使用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)
我怎样才能得到准确的结果?
请在此处下载附件并将其另存为/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准确地获得所有字符?这是生成图像的网页:
我的问题是关于使用 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格式的表格转换为文本?有什么东西让我逃过一劫吗?
我使用 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。任何如何防止此错误发生的建议(不仅仅是尝试/例外)都会非常有帮助。
我想用PyTesseract做一些图像OCR,并且我已经看到OpenCV的腐蚀和扩张功能对于噪声去除预处理非常有用。
由于PyTesseract已经需要PIL / Pillow,所以我想在PIL中进行噪声消除,而不是获得另一个库。PIL中有侵蚀或膨胀的等效物吗?(我的研究似乎建议可以以这种方式使用MaxFilter和MinFilter,但对我来说还不是很清楚。)
谢谢!
我正在使用魔杖和 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 接口,以便我可以使用这些内存限制技术?
我不确定这种奇怪的东西或者tesseract-ocr本身是不是我的基础设施.
每当我在单进程环境中使用image_to_stirng时 - tesseract-ocr工作正常.但是当我用gunicorn产生多个工作人员并且所有人都开始使用ocr读取工作时 - tesseract-ocr开始阅读非常差(而不是来自性能老虎钳,但不是精确的老虎钳).即使在负载完成后 - tesseract也没有相同的准确性.我需要重新启动所有工人才能让tesseract再次运转良好.
这太超级怪了.也许有人已经过期或听说过这个问题?
python-tesseract ×10
python ×7
tesseract ×5
python-3.x ×3
amazon-ec2 ×1
gunicorn ×1
image ×1
imagemagick ×1
opencv ×1
pillow ×1
pytesser ×1
wand ×1
web-scraping ×1