我想使用 Tesseract 来识别具有典型字体的单个无噪音字符(例如 Times New Roman、Arial 等。没有奇怪的字体)。输入图像仅包含字符,因此输入图像大小等于字体大小。
我已经将页面分割模式设置为单字符,但结果仍然不理想,错误率~50%。
我认为如果我告诉 Tesseract 我的字体大小是什么,我可以改善我的结果。有这样的参数吗?另外,如果存在,python-tesseract(Python 包装器)是否允许调整此参数?
我的问题是关于使用 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格式的表格转换为文本?有什么东西让我逃过一劫吗?
在 Ubuntu 下,我在 3.02 版中使用 tesseract-ocr。特别是python的包装器pytesseract,但这个问题也是关于命令行工具的。
在https://code.google.com/p/tesseract-ocr/wiki/FAQ#How_can_I_make_the_error_messages_go_to_tesseract.log_instead_of下的常见问题解答中
写到有一个选项/配置文件“安静”抑制了tesseract的信息行。
但是,当我用这个选项调用 tesseract 命令行时,它说
“read_params_file:无法安静地打开”
没错,在相应的 config-folder 中没有“quiet”-config-file。
我在哪里可以获得它或如何创建它?
我想压制的信息线是:“Tesseract Open Source OCR Engine v3.02 with Leptonica”。
是否可以使用pyocr或从图像中获取字体大小Tesseract?下面是我的代码。
tools = pyocr.get_available_tools()
tool = tools[0]
txt = tool.image_to_string(
Imagee.open(io.BytesIO(req_image)),
lang=lang,
builder=pyocr.builders.TextBuilder()
)
Run Code Online (Sandbox Code Playgroud)
在这里,我使用函数从图像中获取文本image_to_string。现在,我的问题是,如果我也能得到font-size(数字)我的文字。
这两个包有什么区别?
pip3 install pytesseract
pip3 install tesseract
当我尝试安装时,我不断收到同样的错误
(env) vagrant@vagrant:~$ pip install tesserocr
Collecting tesserocr
Using cached tesserocr-2.1.3.tar.gz
Building wheels for collected packages: tesserocr
Running setup.py bdist_wheel for tesserocr ... error
Complete output from command /home/vagrant/src/env/bin/python2 -u -c "import setuptools, tokenize;__file__='/tmp/pip-build-4K2D6A/tesserocr/setup.py';f=getattr(tokenize, 'open', open)(__file__);code=f.read().replace('\r\n', '\n');f.close();exec(compile(code, __file__, 'exec'))" bdist_wheel -d /tmp/tmp5p5G1lpip-wheel- --python-tag cp27:
running bdist_wheel
running build
running build_ext
Failed to extract tesseract version from executable: [Errno 2] No such file or directory
Supporting tesseract v3.04.00
Building with configs: {'libraries': ['tesseract', 'lept'], 'cython_compile_time_env': {'TESSERACT_VERSION': 197632}}
cythoning tesserocr.pyx to tesserocr.cpp …Run Code Online (Sandbox Code Playgroud) 使用这个工具http://trainyourtesseract.com/我希望能够在 pytesseract 中使用新字体。该工具给了我一个名为 *.traineddata 的文件
现在我正在使用这个简单的脚本:
try:
import Image
except ImportError:
from PIL import Image
import pytesseract as tes
results = tes.image_to_string(Image.open('./test.jpg'),boxes=True)
file = open('parsing.text','a')
file.write(results)
print(results)
Run Code Online (Sandbox Code Playgroud)
如何使用我的训练数据文件,以便我能够使用 python 脚本读取新字体?
谢谢 !
编辑#1 :所以我知道*.traineddata可以与 Tesseract 一起用作命令行程序。所以我的问题还是一样,我如何在 python 中使用traineddata?
编辑#2:我的问题的答案在这里如何从 Python 访问 Tesseract 的命令行?
我正在使用魔杖和 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 接口,以便我可以使用这些内存限制技术?
我有结构化表格图像中的数据。数据如下:
我尝试使用以下代码从此图像中提取文本:
import pytesseract
from PIL import Image
value=Image.open("data/pic_table3.png")
text = pytesseract.image_to_string(value, lang="eng")
print(text)
Run Code Online (Sandbox Code Playgroud)
并且,这是输出:
EA域名
传统角色
未来角色
技术 e 封闭平台 ¢ 开放平台
e 物理 e 虚拟化应用程序和 |e 专有 e 组织间集成 e 孤立的复合 e P2P 集成应用程序
e EAI 技术 e 软件即服务
e 企业系统 e 面向服务
e 自动化交易架构
e“信息”
互动
但是,预期的数据输出应根据列和行进行对齐。我怎样才能做到这一点?
嗨,我希望通过 pytesseract 提高我在数字识别方面的表现。
我将原始图像分成如下所示的部分:

大小可以变化。
为此,我应用了一些像这样的预处理方法
image = cv2.imread(im, cv2.IMREAD_GRAYSCALE)
image = cv2.GaussianBlur(image, (1, 1), 0)
kernel = np.ones((5, 5), np.uint8)
result_img = cv2.blur(img, (2, 2), 0)
result_img = cv2.dilate(result_img, kernel, iterations=1)
result_img = cv2.erode(result_img, kernel, iterations=1)
Run Code Online (Sandbox Code Playgroud)
我明白了

然后我将其传递给 pytesseract:
num = pytesseract.image_to_string(result_img, lang='eng',
config='--psm 10 --oem 3 -c tessedit_char_whitelist=0123456789')
Run Code Online (Sandbox Code Playgroud)
然而,这对我来说还不够好,而且经常弄错数字。
我正在寻找改进的方法,我试图保持这种最小化和自给自足,但如果我不清楚,请告诉我,我会详细说明。
谢谢你。
python-tesseract ×10
tesseract ×8
python ×7
ocr ×4
amazon-ec2 ×1
font-size ×1
image ×1
imagemagick ×1
pip ×1
python-3.x ×1
wand ×1