[英]Getting exact font size in hocr output
我正在使用Tesseract從如下所示的大量頁面中提取文本和格式:
(我的原始圖像是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_line
的x_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.