java - 使用 Tesseract hOCR 提取文本属性

标签 java svg fonts ocr tesseract

我正在使用 Tesseract(在 Windows 上)从科学图表中提取文本,例如情节,其中有许多孤立的单词或数字,但没有句子或段落。然后我将 HTML 转换为 SVG。这很好用,只是我无法得到

  • 字体大小
  • 字体系列
  • 文本 anchor 的xy坐标
  • 文本方向(例如旋转 Math.PI/2 用于标记图轴)

我可以从边界框中得到一个粗略的字体大小,但这取决于字符是有上伸还是下伸。因此,下面的所有行(在 hOCR 输出中)都具有相同的字体系列和大小:

<span class='ocrx_word' id='word_6' title="bbox 1177 491 1637 549">Herpetotherinae</span> 
<span class='ocrx_word' id='word_13' title="bbox 1183 1179 1514 1228">Cathartidae</span>
<span class='ocrx_word' id='word_35' title="bbox 1847 1742 1907 2077">Accipitridae</span> 

span_1 有一个下伸部(在“p”中)和一个 58 的 bbox y 高度,而 span_2 的 bbox 高度为 49(没有下伸部)而 span_3 的 bbox x 宽度为 60,显示文本已旋转。然而,bbox 本身不足以准确定位文本或确定文本方向。

我想使用 Tess4J 并使用任何可以获取这些属性的 API。

如果有人已经从 Tess4J 编写了 SVG 输出,我将不胜感激。 (我的任何代码都是 F/OSS)。

最佳答案

默认情况下,字体信息不包含在 hOCR 输出中,但如果需要可以使用。您可以通过将以下行添加到您的 hocr 来打开它配置文件(或您正在使用的任何配置文件):

hocr_font_info 1

同样的配置变量也可以在命令行上使用(或者,大概是通过 Tess4J 包装器)。

启用此功能后,字体名称和大小将包含在输出中,例如

<span class='ocrx_word' id='word_3_21' title='bbox 946 1267 1121 1297; x_wconf 91; x_font Courier_New; x_fsize 9' dir='ltr'>without</span>

x_font是字体名称 Courier_New x_fsize是以磅为单位的字体大小,即 9

粗体和斜体将在字体名称中和通过使用 <strong> 表示和 <em>标签。

关于java - 使用 Tesseract hOCR 提取文本属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20016767/

相关文章:

java - Swing:paintComponent 不会绘制到 JPanel

java - 如何将日期从日期对象转换为字符串对象

svg - svg图像作为颤动中的按钮

javascript - 如何使用 jQuery 将事件绑定(bind)到新创建的 SVG 元素?

java - Apache Arrow Plasma 客户端 - 无法连接到内存存储 (UnsatisfiedLinkError)

svg - 设置指针事件 :none with Raphael

css - Rails 3.2.x - 无法在本地主机上设置字体

ios - 如何从UISegmentedControl获取字符串字体

ipad - 如何为 HTML5 Canvas 上下文设置 2 种字体?

java - eclipse 未找到 JRE