如何使用 python-tesseract 获取 Hocr 输出

Posted

技术标签:

【中文标题】如何使用 python-tesseract 获取 Hocr 输出【英文标题】:How to get Hocr output using python-tesseract 【发布时间】:2016-03-18 20:08:37 【问题描述】:

我使用 pytesseract 获得了非常好的结果,但它无法保留双空格,它们对我来说非常重要。 而且,所以我决定检索 hocr 输出而不是纯文本。但是;似乎没有任何方法可以使用 pytessearct 指定配置文件。

那么,是否可以使用 pytesseract 指定配置文件,或者是否有一些默认配置文件可以更改以获取 hocr 输出?

#run method from pytessearct.py
def run_tesseract(input_filename, output_filename_base, lang=None, boxes=False, config=None):
    '''
    runs the command:
        `tesseract_cmd` `input_filename` `output_filename_base`

    returns the exit status of tesseract, as well as tesseract's stderr output

    '''
    command = [tesseract_cmd, input_filename, output_filename_base]

    if lang is not None:
        command += ['-l', lang]

    if boxes:
        command += ['batch.nochop', 'makebox']

    if config:
        command += shlex.split(config)
    #command+=['C:\\Program Files (x86)\\Tesseract-OCR\\tessdata\\configs\\hocr']
    #print "command:",command
    proc = subprocess.Popen(command,
            stderr=subprocess.PIPE)
    return (proc.wait(), proc.stderr.read())

【问题讨论】:

您只需要新选项“preserve_interword_spaces=1”,因此您的最终配置如下所示:custom_config = '--oem 1 --psm 11 -c preserve_interword_spaces=1' 【参考方案1】:

您可以使用这个另一个库在 Python 中使用 Tesseract:pyslibtesseract

图片:

代码:

import pyslibtesseract

tesseract_config = pyslibtesseract.TesseractConfig(psm=pyslibtesseract.PageSegMode.PSM_SINGLE_LINE, hocr=True)
print(pyslibtesseract.LibTesseract.simple_read(tesseract_config, 'phrase0.png'))

输出:

  <div class='ocr_page' id='page_1' title='image ""; bbox 0 0 319 33; ppageno 0'>
   <div class='ocr_carea' id='block_1_1' title="bbox 0 0 319 33">
    <p class='ocr_par' dir='ltr' id='par_1_1' title="bbox 10 13 276 25">
     <span class='ocr_line' id='line_1_1' title="bbox 10 13 276 25; baseline 0 0"><span class='ocrx_word' id='word_1_1' title='bbox 10 14 41 25; x_wconf 75' lang='eng' dir='ltr'><strong>the</strong></span> <span class='ocrx_word' id='word_1_2' title='bbox 53 13 97 25; x_wconf 84' lang='eng' dir='ltr'><strong>book</strong></span> <span class='ocrx_word' id='word_1_3' title='bbox 111 13 129 25; x_wconf 79' lang='eng' dir='ltr'><strong>is</strong></span> <span class='ocrx_word' id='word_1_4' title='bbox 143 17 164 25; x_wconf 83' lang='eng' dir='ltr'>on</span> <span class='ocrx_word' id='word_1_5' title='bbox 178 14 209 25; x_wconf 75' lang='eng' dir='ltr'><strong>the</strong></span> <span class='ocrx_word' id='word_1_6' title='bbox 223 14 276 25; x_wconf 76' lang='eng' dir='ltr'><strong>table</strong></span> 
     </span>
    </p>
   </div>
  </div>

【讨论】:

我收到 OSError: dlopen(/usr/local/lib/python2.7/site-packages/pyslibtesseract/cppcode/libpyslibtesseract.so, 6): 找不到合适的图像。确实找到了:/usr/local/lib/python2.7/site-packages/pyslibtesseract/cppcode/libpyslibtesseract.so:未知文件类型,前八个字节:0x7F 0x45 0x4C 0x46 0x02 0x01 0x01 0x00:/ @InêsMartins 你需要使用 Python3 感谢@Macabeus :/ 它不适用于 python 2.x? @InêsMartins 没有,python2 有另一个包可以与 tesseract 集成 "python2 有另一个包可以与 tesseract 集成",什么包?你能告诉我@Macabeus吗?是pytesseract?【参考方案2】:

这对我有用:)

from pytesseract import pytesseract
pytesseract.run_tesseract('image.png', 'output', lang=None, boxes=False, config="hocr")

其中:image.png 是除此 python 文件之外的图像文件。将在这些文件旁边生成名为 output.hocr 的输出文件。在文本编辑器中打开此文件以查看 hocr 输出。

【讨论】:

它告诉我没有模块 run_tesseract 我什至找不到合适的 pytesseract 文档。这些 ppl 有什么问题?【参考方案3】:

只需像这样在命令末尾添加 hocr

tesseract input_filename output_filename_base hocr

输出文件将是一个 html 文件

【讨论】:

以上是关于如何使用 python-tesseract 获取 Hocr 输出的主要内容,如果未能解决你的问题,请参考以下文章

tesseract 训练字库 python 怎么调用

pytesseract——验证码的识别——PIL库的介绍

如何使用 python tesseract 设置仅初始化参数?

将pdf转换为图像但放大后

验证码识别多输出模型

提高多段落扫描的 OCR 性能