如何使用 Tesseract API 迭代单词?

2023-12-11

我正在尝试与 Tesseract API 并行地学习 Python。我的最终目标是学习如何使用 Tesseract API 来读取文档并进行一些基本的错误检查。我发现了一些似乎是不错的起点的示例,但我无法理解两段代码之间的差异,尽管行为不同,但在我看来它们应该是等效的。这些都稍微修改自https://pypi.python.org/pypi/tesserocr .

第一个示例产生以下输出:

$ time ./GetComponentImagesExample2.py|tail -2
symbol MISSISSIPPI,conf: 88.3686599731


real    0m14.227s
user    0m13.534s
sys 0m0.397s

这是准确的并且在 14 秒内完成。查看输出的其余部分,它非常好——我可能还差几个 SetVariable 命令才能达到 99% 以上的准确度。

$ ./GetComponentImagesExample2.py|wc -l
    1289

手动查看结果,似乎获得了所有文本。

#!/usr/bin/python
from PIL import Image
Image.MAX_IMAGE_PIXELS=1000000000
from tesserocr import PyTessBaseAPI, RIL, iterate_level

image = Image.open('/Users/chrysrobyn/tess-install/tesseract/scan_2_new.tif')
with PyTessBaseAPI() as api:
    api.SetImage(image)
    api.Recognize()
    api.SetVariable("save_blob_choices","T")
    ri=api.GetIterator()
    level=RIL.WORD
    boxes = api.GetComponentImages(RIL.WORD, True)
    print 'Found {} textline image components.'.format(len(boxes))
    for r in iterate_level(ri, level):
        symbol = r.GetUTF8Text(level)
        conf = r.Confidence(level)
        if symbol:
            print u'symbol {},conf: {}\n'.format(symbol,conf).encode('utf-8')

第二个示例产生此输出。

$ time ./GetComponentImagesExample4.py|tail -4
symbol MISSISS IPPI
,conf: 85


real    0m17.524s
user    0m16.600s
sys 0m0.427s

这不太准确(在单词中检测到额外的空格)并且速度较慢(需要 17.5 秒)。

$ ./GetComponentImagesExample4.py|wc -l
     223

这非常缺乏大量的文字,我不明白为什么它会遗漏一些东西。

#!/usr/bin/python
from PIL import Image
Image.MAX_IMAGE_PIXELS=1000000000
from tesserocr import PyTessBaseAPI, RIL

image = Image.open('/Users/chrysrobyn/tess-install/tesseract/scan_2_new.tif')
with PyTessBaseAPI() as api:
    api.SetImage(image)
    api.Recognize()
    api.SetVariable("save_blob_choices","T")
    boxes = api.GetComponentImages(RIL.WORD, True)
    print 'Found {} textword image components.'.format(len(boxes))
    for i, (im, box, _, _) in enumerate(boxes):
        api.SetRectangle(box['x'], box['y'], box['w'], box['h'])
        ocrResult = api.GetUTF8Text()
        conf = api.MeanTextConf()
        if ocrResult:
            print u'symbol {},conf: {}\n'.format(ocrResult,conf).encode('utf-8')
#        print (u"Box[{0}]: x={x}, y={y}, w={w}, h={h}, "
#               "confidence: {1}, text: {2}").format(i, conf, ocrResult, **box).encode('utf-8')

我的最终目标依赖于了解文档中文本的位置,因此我需要像第二个示例一样的边界框。据我所知, iterate_level 不会公开找到的文本的坐标,因此我需要 GetComponentImages...但输出并不等效。

为什么这些代码片段在速度和准确性方面表现不同?我可以让 GetComponentImages 与 GetIterator 匹配吗?


api.Recognize()
api.SetVariable("save_blob_choices","T")
ri=api.GetIterator()
level=tesserocr.RIL.WORD
boxes = api.GetComponentImages(tesserocr.RIL.TEXTLINE, True)
text_list = []
print 'Found {} textline image components.'.format(len(boxes))
i = 0
for r in tesserocr.iterate_level(ri, level):
    symbol = r.GetUTF8Text(level)
    conf = r.Confidence(level)
    bbox = r.BoundingBoxInternal(level)
    im = Image.fromarray(img[bbox[1]:bbox[3], bbox[0]:bbox[2]])
    im.save("../out/" + str(i) + ".tif")
    text_list.append(symbol + " " + str(conf) + "\n")
    i += 1

我认为函数 r.BoundingBoxInternal(level) 将给出检测到的单词的边界框。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 Tesseract API 迭代单词? 的相关文章

随机推荐

  • 在输出四开本中显示块选项

    有没有办法在输出中包含块选项 例如 在这种情况下 title Untitled format html editor visual r code fold true label example 1 1 如何获得 code fold true
  • Java 的 UNIX 套接字实现? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我意识到 由于 UNIX 套接字是特定于平台的 因此必须涉及一些非 Java 代码 具体来说 我们有兴趣使用 JDBC 连接到仅启用了 UNIX 域
  • 无法理解左值的错误条件

    我是编程初学者 正在尝试一些组合 include
  • 默认导入的 Jest 模拟异步函数

    我试图模拟一个作为默认导出导出的异步函数 但我得到的只是类型错误 无法读取未定义的属性 then 我想嘲笑的是配置文件 const configureEnvironment async nativeConfig gt return awai
  • IllegalAnnotationsException SetMultimap 是一个接口,JAXB 无法处理接口

    我有以下代码 private SetMultimap
  • 模板化派生类时访问基成员数据错误

    我对奇怪的重复模板遇到以下问题 当我尝试访问 CRTP 基类的数据成员时出现问题 template
  • 使用 C++ 中的 NDK 更新 Android UI

    我的问题与这篇文章直接相关 https groups google com forum topic android ndk 291sBdkITyI 基本上 我有一个用 C 编写的应用程序 使用 NDK 编译 具有基本的 Android 活动
  • 在外部网站上使用 Inappbrowser 自动登录?

    我已经使用 Phonegap Build 构建了一个本机应用程序 有没有办法在外部网站的 webview 中自动登录 嵌入 inappbrowser 应用程序启动 然后用户将重定向到网站进行登录 但用户必须一次又一次地输入用户名和密码 是否
  • 将值写入用户窗体中的文本框 - VBA

    我正在尝试在放置在用户窗体上的文本框中动态写入一个值 这是我的代码 我在最后一行收到错误 它说需要对象 Sub Userform1 Display TotalSelected 0 With Sheets Main Ent ListBox F
  • 为什么 jQuery ajax 调用仅在我在 Chrome 中调试时才有效?

    我有一个来自表单提交的简单 ajax 调用 它在我调试时有效 即弹出警报 但在运行时它不起作用 这对我来说似乎有点神秘 function signUpForm submit function var request ajax url php
  • 根据谷歌电子表格中的单元格颜色更改单元格值

    我一直在寻找一种根据另一种单元格颜色更改单元格值的方法 例如 如果单元格颜色为红色 则为 文本 有没有办法做到这一点 我知道有一种方法可以根据单元格值更改单元格颜色 但我想要相反的方法 有人知道吗 无论是脚本还是公式 谷歌应用程序脚本中有类
  • 气流可以在不重新启动调度程序的情况下加载 dags 文件吗

    就我而言 我在 dags 路径下编写了一个 dag 文件 启动airflow调度程序后 成功加载dag文件 但是 更改 dag 文件后 无法加载 dag 文件 有没有建议加载 dag 文件而不重新启动调度程序 您的 DAG 应根据调度程序心
  • 无法查看从 Subversion 存储库中删除的文件的内容

    不久前我从 Subversion 存储库中删除了一个文件 现在我想看看它的内容 我确定该文件在修订版 68 中已被删除 因此我尝试了以下操作 svn cat r 67 path to file 从项目根目录 svn 告诉我svn E1550
  • MySqli:可以创建数据库吗? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我一直在筛选 MySQLi 文档 据我所知 我无法使用 PHP 和 MySQLi 创建数
  • 在 Webkit .NET 中打开本地文件

    由于某种原因 简单的 WebKitBrowser1 Navigate localfilehere 不起作用 我尝试将 file 添加到 URL 但这也不起作用 这看起来很荒谬 但是这个功能真的不存在吗 看来您输入了错误的网址 你可以通过以下
  • 嵌套相对定位的div需要有100%的高度

    我试图在这里获取嵌套的 div canvas 白色区域 http osf Fivetoolsoftware com填满 100 的空白空间 这是 HTML
  • 在服务器中创建文件后使用 jQuery 下载文件

    当我单击客户端上的按钮时 我想使用 AJAX 在服务器端调用公共静态 Web 方法 静态方法将创建适当的文件 创建文件后 我需要将其下载到客户端桌面 我找到了John Culvinar 的 jquery 文件下载插件但到目前为止还未能实施
  • 语句和关键字有什么区别?

    After calling return一份声明 这是在评论中向我提出的 return不是一个语句 它是开始 return 语句的关键字 有什么区别一份声明 and 开始语句的关键字 句子和句子开头的名词有什么区别 return是一个关键字
  • 在 Selenium for Python 中,如何获取元素的属性而不是属性?

    根据文档 获取属性实际上返回属性而不是属性 除非该属性不存在 在这种情况下它会回退到属性 获取属性将始终归还财产 有没有办法始终获取该属性 我觉得奇怪的是 名为 get attribute 的函数会优先考虑属性值而不是属性值 获取属性 属性
  • 如何使用 Tesseract API 迭代单词?

    我正在尝试与 Tesseract API 并行地学习 Python 我的最终目标是学习如何使用 Tesseract API 来读取文档并进行一些基本的错误检查 我发现了一些似乎是不错的起点的示例 但我无法理解两段代码之间的差异 尽管行为不同