检测跨越多行的阿拉伯语经文

信息处理 图像处理 文本识别
2022-01-08 08:37:14

我需要构建一个古兰经应用程序,并且我想在用户触摸它时读出经文。我面临的问题是,有些经文可能会扩展到一行半(突出显示的红色经文)或刚好适合四分之一行(突出显示的绿色经文)。因此,将每节经文添加到 textview 或其他一些视图似乎不起作用。

我想检测第二张图片中像红色的诗句。我有经文的音频文件,所以不需要文本到语音的转换

1个回答

这可以通过简单的模板匹配相当简单地解决。我不确切知道你是如何设置它的,所以我只会概括地描述算法并使用插图。

  • 观察经文编号有一个独特的边界,可以很容易地用来检测经文的开始和结束。因此,为该模式创建一个二值化模板并存储它。像这样的东西:

    在此处输入图像描述

  • 由于预先知道屏幕中的行数(您正在格式化页面)并且每节经文都有恒定的高度,因此您可以轻松(通过算法)推断出经文中心线的 Y 坐标应该在屏幕上的位置. 这证明了这个想法:

    在此处输入图像描述

  • 当用户触摸经文时,获取 XY 坐标并将 Y 坐标捕捉到最近的经文中心。

  • 然后从 X 坐标开始,在该行上执行简单的模板匹配(互相关)。正向(向左)的第一个匹配(互相关中的峰值)将是该诗句的终点。如果在相反方向(向右)没有匹配,则向上移动一节(你可以这样做,因为你知道中心线的 Y 坐标)并重复。从左端开始的第一场比赛将是这节经文的起点。同样,如果该行没有前向匹配,则向下移动一行并重复。

    这是这个想法的简短说明。黄色框是用户触摸经文的地方。然后,您使用模板进行互相关,蓝色圆圈将是匹配项。

    在此处输入图像描述

    如果您有兴趣看到它的实际效果,我也会在这个答案中使用模板匹配。

  • 一旦您确定了经文的起点,然后使用阿拉伯文本识别器来推断该边界内的经文编号并播放相应的音频文件。


更简单的解决方案:

一个更简单的解决方案,如果你不想经历这个是存储诗句起点的 XY 坐标(保持简单并使用中心点),一旦你得到用户输入的坐标,你可以再次捕捉它到中心线,然后向后走,看看诗句从哪里开始。这可能具有更快的优势。

我没有将此作为第一个解决方案提出,因为您似乎在评论中拒绝了类似的想法。最后,这取决于你的约束——你是愿意做计算工作(模板匹配——顺便说一句,这也需要你存储模板)还是使用内存(存储坐标)。

如果我是你,我可能会选择这个,但图像处理解决方案可能会很有趣。