我需要构建一个《古兰经》应用程序,我想在用户触摸它时朗读这些经文。我面临的问题是某些经文可能会扩展到一行和一半的行(突出显示的红色经文)或恰好适合四分之一行(突出显示的绿色经文)。因此,将每节经文添加到textview或其他视图中似乎无效。
我想在第二张图片中检测红色的经文。我有用于经文的音频文件,因此无需将文本转换为语音
我需要构建一个《古兰经》应用程序,我想在用户触摸它时朗读这些经文。我面临的问题是某些经文可能会扩展到一行和一半的行(突出显示的红色经文)或恰好适合四分之一行(突出显示的绿色经文)。因此,将每节经文添加到textview或其他视图中似乎无效。
我想在第二张图片中检测红色的经文。我有用于经文的音频文件,因此无需将文本转换为语音
Answers:
这可以通过简单的模板匹配直接解决。我不完全知道您如何设置它,因此我将仅描述算法并使用插图。
请注意,经文编号具有明显的边框,可以轻松地用于检测经文的开头和结尾。因此,为该模式创建一个二值化模板并存储它。像这样:
由于屏幕中的行数是预先已知的(您正在格式化页面),并且每个经文的高度都恒定,因此您可以轻松地(算法地)推断出经文中心线的Y坐标应在屏幕上的位置。这说明了这个想法:
当用户触摸诗歌时,获取XY坐标并将Y坐标对齐到最近的诗歌中心。
然后从X坐标开始,对该行执行简单的模板匹配(互相关)。向前(向左)的第一个匹配项(互相关的峰值)将是该诗句的终点。如果没有反向匹配(向右),则向上移动一首诗(您可以这样做,因为您知道中心线的Y坐标)并重复。从左端开始的第一个匹配项将是该诗句的起点。同样,如果线上没有前向匹配,则向下移动一行并重复。
这是这个想法的简短说明。用户触摸诗句的位置是黄色框。然后,您可以对模板进行互相关,蓝色圆圈将成为匹配项。
如果您有兴趣查看实际操作,我还将在此答案中使用模板匹配。
确定诗句的起点后,请使用阿拉伯文字识别器来推断该边界内的诗句编号并播放相应的音频文件。
一个更简单的解决方案,如果您不想进行此操作,则是存储诗句起点的XY坐标(保持简单并使用中心点),一旦获得用户输入的坐标,就可以再次捕捉它到达中心线,然后向后走,看看诗句从哪里开始。这可能具有更快的优势。
我没有将其作为第一个解决方案,因为您似乎在评论中拒绝了类似的想法。最后,这取决于您的约束条件-您愿意执行计算工作(模板匹配-顺便说一句,还需要您存储模板)或使用内存(存储坐标)。
如果我是你,我可能会选择这个,但是尝试图像处理解决方案可能会很有趣。