我需要构建一个《古兰经》应用程序,我想在用户触摸它时朗读这些经文。我面临的问题是某些经文可能会扩展到一行和一半的行(突出显示的红色经文),或者恰好适合四分之一行(突出显示的绿色经文)。因此,将每节经文添加到textview或其他视图中似乎无效。

我想在第二张图像中检测出红色的诗句。我有用于经文的音频文件,因此不需要文本到语音的转换



评论

页面是以图像数据还是呈现的Unicode文本形式给出?

文字转语音。。但是,请告诉我们您的研究。

我尝试过将每节经文动态地添加到imageview中,但是出现的问题是image view不会像这样扩展到一行半。有时有些经文可能需要一行半行,希望您理解我的意思。我需要一些建议来克服这个问题。

用两行就可以了吗?

用半条线表示是占据屏幕的宽度,然后是下一行的一半吗?

#1 楼

这可以通过简单的模板匹配直接解决。我不知道您是如何设置它的,所以我将仅对算法进行一般性描述并使用插图。可以很容易地用于检测诗句开始和结束的边界。因此,为该模式创建一个二值化模板并存储它。这样的事情:




由于屏幕中的行数是预先已知的(您正在格式化页面),并且每节经文保持恒定的高度,您可以轻松地(从算法上)推断出诗句中心线的Y坐标应在屏幕上的哪个位置。这说明了这个想法:



当用户触摸一首诗时,获取XY坐标并将Y坐标对齐到最近的诗句中心。 />然后从X坐标开始,对该行执行简单的模板匹配(互相关)。向前(向左)的第一个匹配项(互相关的峰值)将是该诗句的终点。如果没有反向匹配(向右),则向上移动一首诗(您可以这样做,因为您知道中心线的Y坐标)并重复。从左端开始的第一个匹配项将是该诗句的起点。同样,如果线上没有前向匹配,则向下移动一行并重复。

这里是该想法的简短说明。用户触摸诗句的位置是黄色框。然后,您可以对模板进行互相关,蓝色圆圈将成为匹配项。



如果您有兴趣在实际操作中使用它,我还将在此答案中使用模板匹配。

一旦确定诗句的起点,然后使用阿拉伯文字识别器推断该边框内的诗句编号并播放相应的音频文件。


简单解决方案:

一个更简单的解决方案,如果您不想进行此操作,则是存储诗句起点的XY坐标(保持简单并使用中心点),一旦获得用户输入的坐标,您可以再次将其对齐到中心线,然后向后走以查看经文的起始位置。这可能具有更快的优势。

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

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

评论


$ \ begingroup $
yoda或其他任何人,能否请您更好地说明这个问题。?!实际上,我想知道而我没有得到的只是如何或如何在蓝色圆圈内取数字。非常感谢!
$ \ endgroup $
–user1291
2012年4月24日23:42



$ \ begingroup $
@xmenus锁定圆后(通过匹配独特边框的图案来完成此操作),必须使用阿拉伯文本/数字识别库来识别其中的内容。我不懂阿拉伯语,因此无法推荐任何东西。您可以尝试询问OP ...
$ \ endgroup $
–乳香
2012年4月25日在0:17



$ \ begingroup $
@xmenus如果您需要阿拉伯语的帮助,可以询问我,但是从您要询问的内容来看,如果您只是想检测一个阿拉伯数字,则可以与对圈子进行相同的模板匹配。
$ \ endgroup $
–太空
2012年4月25日的1:42