Skip to content

CoinLQ/LayoutSegmentation

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 

Repository files navigation

版面划分

输入

一张藏经图片和对应的文本,文本为UTF8格式,每行结尾以\r\n符号换行。

藏经图片为某一页的图像,每页可能分为两栏或三栏,请参考samples目录中的1.jpg,此图片有三栏,对应的文本文件为1.txt。

在文本文件中,图片的每一栏所对应的文字的第一行为页、栏的标记。如P1L1/3,其中P1表示此图片为第1页,L1/3表示此图片总共有3栏,当前的文字为第1栏对应的文字。

图片中文字按列的方向排列,列按从右往左的顺序,图片中每一列与文本每一行精确对应。在图片中可能有一些和普通正文格式不一样的文字,这些文字在文本中会加上一些标记符号来区分出来。具体的标记符号如下:

  • <> 中间的文字是夹注,表示占半行宽度的小字,通常是两行并列出现,即在文本中一组尖括号中间的文字为图片中的小字,如图片某一列中某一段位置有两列小字,则在文本中用两组尖括号表示,例如<念履切後九><篇音尼字悉>;
  • 【】中间的文字是增字,表示在正文右侧、处于两行中间的小字。通常是后人在纸本上写上去的校勘性文字,而非原来刻上去的内容;
  • @@中间的文字表示题记,字号一般比正文要比小一些;
  • () 中间的文本是非正文内容,例如轶号、音义等等,主要是指与藏经实际内容无关的文字;
  • $$中间的文本是衍文,表示该列在相邻两页的图片中都出现了;
  • {}中间的文本在图片中对应的汉字已由于图片的损坏而缺失;
  • ?此为全角问号,用于表示一个无法识别的字。

对于文本中的空格,统一都用全角空格,在行首、行中间都可能会有空格,在图片相应的列中会有空白区域与空格对应。一列中的空白区域包含在其他正常的区域中一起输出,不必作为单独区域输出。

文本中的空行表示在图片中有空白列。空白列也当作一个区域输出。空白列的宽度可能比正常有文字的列的宽度大一些。

最后达到的目标是,对于每一列,将该列对应输出的几个区域拼接起来,能完整复原该列的原图。将所有列对应输出的区域拼接起来,能完整复原整个原图。

输出

一般情况下,输出藏经图片中每一列的区域和对应的文本,如果这一列中有特殊文字,则需要将特殊文字区域及相应的文本输出。

举例说明

带小字的列________带小字的列划分后的结果

如上面第一张图是samples目录中的图片1.jpg中第3栏的第19列,对应的文本为:

怛姪他<天可切後九篇初他><字悉同此音其一>富樓尼<念履切後九><篇音尼字悉>

做版面划分后的结果如右边第二张图所示。实际输出每个区域对应的四个坐标值:left, right, top, bottom。区域在横轴的区间范围为[left, right),纵轴的区间范围为[top, bottom),坐标值为在整个图片中的坐标。

程序在实际执行时,输入一个图片文件和一个文本文件,输出一个json格式的数组,表示每个区域的坐标及相应的文本,其中对应每一个区域,包含这些字段:

  • text,表示区域的文本;
  • mark,可选,对于有标记的特殊文本,mark为对应的标记符号中前一个符号,比如对于标记符号<>,mark就设为<;
  • left,左边界坐标;
  • right,右边界坐标;
  • top,上边界坐标;
  • bottom,下边界坐标;
  • line_no,表示行号;
  • region_no,表示在一行中区域的编号,从1开始计数;
  • page_bar_no,表示页、栏标号。

比如输入样本中的1.jpg和1.txt,输出的json格式文本为(只列出了第3栏的第19列对应的区域,坐标值非实际数值):

[{
    "text": "怛姪他",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}, {
    "text": "天可切後九篇初他",
    "mark": "<",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 2,
    "page_bar_no": "P1L3/3"
}, {
    "text": "字悉同此音其一",
    "mark": "<",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 3,
    "page_bar_no": "P1L3/3"
}, {
    "text": "富樓尼",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 4,
    "page_bar_no": "P1L3/3"
}, {
    "text": "念履切後九",
    "mark": "<",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 5,
    "page_bar_no": "P1L3/3"
}, {
    "text": "篇音尼字悉",
    "mark": "<",
    "left": 21,
    "right": 71,
    "top": 1,
    "bottom": 50,
    "line_no": 19,
    "region_no": 6,
    "page_bar_no": "P1L3/3"
}]

可参考文件samples目录中的文件1_output_json.txt。


字切分

这一步将版面切分输出的区域进一步切分到单个字。

输入

一张藏经图片和版面划分输出的某个区域的json描述,例如图片为样本中的1.jpg,区域的json描述为:

{
    "text": "怛姪他",
    "left": 532,
    "right": 563,
    "top": 2578,
    "bottom": 2751,
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}

输出

输出一个json格式的数组,表示每个字的图片区域的坐标及相关的信息,实际输出每个字图片区域对应的四个坐标值:left, right, top, bottom,区域在横轴的区间范围为[left, right),纵轴的区间范围为[top, bottom),坐标值为在整个图片中的坐标。其中对应每一个字的图片区域,包含这些字段:

  • char,表示汉字;
  • left,左边界坐标;
  • right,右边界坐标;
  • top,上边界坐标;
  • bottom,下边界坐标;
  • mark,与输入的区域的json描述中相应的字段相同,如输入的区域的json描述中无此字段,则忽略;
  • line_no,与输入的区域的json描述中相应的字段相同;
  • region_no,与输入的区域的json描述中相应的字段相同;
  • page_bar_no,与输入的区域的json描述中相应的字段相同。

请参考(坐标值非实际数值):

[{
    "char": "",
    "left": 532,
    "right": 563,
    "top": 2578,
    "bottom": 2617,
    "mark": "<",
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}, {
    "char": "",
    "left": 532,
    "right": 563,
    "top": 2617,
    "bottom": 2647,
    "mark": "<",
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}, {
    "char": "",
    "left": 532,
    "right": 563,
    "top": 2647,
    "bottom": 2679,
    "mark": "<",
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}, {
    "char": "",
    "left": 532,
    "right": 563,
    "top": 2679,
    "bottom": 2715,
    "mark": "<",
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}, {
    "char": "",
    "left": 532,
    "right": 563,
    "top": 2715,
    "bottom": 2751,
    "mark": "<",
    "line_no": 19,
    "region_no": 1,
    "page_bar_no": "P1L3/3"
}]

About

对大藏经经文图片做版面划分和字切分的规范说明

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published