簡體   English   中英

在hocr輸出中獲取確切的字體大小

[英]Getting exact font size in hocr output

我正在使用Tesseract從如下所示的大量頁面中提取文本和格式:

具有不同行高的OCR文本示例頁面

(我的原始圖像是1200 DPI;我已經減少到600 DPI,並重新編碼以保持文件大小正常。)

當這本書使用塊引號(例如,占據該頁面左列大部分的引號)時,最顯着的區別是稍小的字體大小。

問題是,當我在hocr配置文件中將hocr_font_info設置為1時,xml輸出會生成如下單詞標簽:

<span class='ocrx_word' id='word_1_131' title='bbox 561 3188 981 3278; x_wconf 89; x_font Century_Schoolbook_L_Medium; x_fsize 7' lang='fra' dir='ltr'>dération</span>

x_fsize屬性通常在小行中為6,在大行中為7,但是Tesseract有時會為較小的行分配值7-並且會在整行中使用,因此我不能依賴相鄰的單詞解決問題。 (在某些情況下,我可以使用相鄰的 ,但不能總是使用。有時,我將處理孤立的文本行,因此,如果可能的話,我確實需要確切的大小。)

在我的字體大小中獲得更多粒度的最佳方法是什么? 緊要關頭,即使我擁有每個字符的確切高度和寬度,也可能會通過,盡管帶有小數位的字體大小(例如“ x_fsize ='6.62'”)使用起來會容易得多。

在Tesseract的以下三行中給出了字體大小的計算:

  *pointsize = scaled_yres_ > 0
      ? static_cast<int>(row_height * kPointsPerInch / scaled_yres_ + 0.5)
: 0;

您想要的是避免將此float轉換為整數。 但是,在其他幾個地方也定義了結構和類型,也需要對其進行調整...

這里的主要信息是row_height ,它與hocr文件中ocr_linex_size -parameter相同。 因此,您可以簡單地瀏覽hocr文件,並嘗試根據其x_size為每一行確定是較小的字體大小還是較大的字體大小。 要瀏覽hocr文件並做一些事情,可以查看hocr-tools中的示例。

要從上面進行實際計算,您只需要知道重新配置(600或1200 dpi)和值kPointsPerInch = 72 作為概念驗證,請嘗試以下perl內聯代碼:

$ perl -ne 'print("$1 ", $2*72/600, "\n") if /^.*id=.([^ ]*). .*x_size ([0-9.]*);.*$/' h7.hocr
line_1_1 8.62807344
line_1_2 7.08
line_1_3 6.36
line_1_4 6.36
line_1_5 6.36
line_1_6 6.35710104
line_1_7 6.48
line_1_8 6.36
line_1_9 6.24
line_1_10 6.36
...

實際上,我可能有一個可行的方法-對於每個段落,我可以將每個單詞的寬度(即其邊框的寬度)除以字符數,得出近似的平均字符寬度。 在整個段落(甚至一小段)中,平均字符寬度將為字體大小提供一個非常准確的數字。

不過,我仍然對更直接的解決方案感興趣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM