Détection de versets arabes couvrant plusieurs lignes


12

J'ai besoin de créer une application du Coran et je veux lire les versets lorsqu'un utilisateur y touche. Le problème auquel je suis confronté est que certains versets peuvent s'étendre à une ligne et demie (verset rouge surligné) ou simplement tenir dans un quart de ligne (verset vert surligné). Donc, ajouter chaque verset à textview ou à une autre vue ne fonctionnera pas, semble-t-il.

Je veux détecter des vers comme les rouges dans la deuxième image. J'ai des fichiers audio pour les versets donc pas besoin de conversion de texte en parole


1
La page est-elle donnée sous forme de données d'image ou de texte Unicode rendu?

Text to Speech .. Mais alors, veuillez nous montrer vos recherches.

J'ai essayé d'ajouter dynamiquement chaque image de versets à imageview, mais le problème se pose est que la vue d'image ne s'étendra pas sur une ligne et demie comme ça. Parfois, certains versets peuvent nécessiter une ligne et demie, j'espère que vous avez compris ce que je voulais dire. J'ai besoin de quelques suggestions pour surmonter cela.

1
Utilisez deux lignes et avez juste des frais généraux?

1
Par une ligne et demie, voulez-vous dire qu'il occupe la largeur de l'écran, puis la moitié de la ligne suivante vers le bas?

Réponses:


9

Cela peut être résolu assez simplement avec une correspondance de modèle simple. Je ne sais pas exactement comment vous l'avez configuré, donc je vais simplement décrire l'algorithme en général et utiliser des illustrations.

  • Observez que les numéros de vers ont une bordure distinctive qui peut facilement être utilisée pour détecter le début et la fin d'un vers. Créez donc un modèle binarisé pour ce modèle et stockez-le. Quelque chose comme ça:

    entrez la description de l'image ici

  • Étant donné que le nombre de lignes dans un écran est connu à l'avance (vous formatez la page) et que chaque verset a une hauteur constante, vous pouvez facilement déduire (par algorithme) où les coordonnées Y pour les traits d'axe des versets devraient être à l'écran . Cela démontre l'idée:

    entrez la description de l'image ici

  • Lorsque l'utilisateur touche un verset, obtenez les coordonnées XY et accrochez la coordonnée Y au centre du verset le plus proche.

  • Ensuite, en commençant par la coordonnée X, effectuez une correspondance de modèle simple (corrélation croisée) sur cette ligne. La première correspondance (pic dans la corrélation croisée) dans la direction avant (vers la gauche), sera le point final du verset. S'il n'y a pas de correspondance dans le sens inverse (vers la droite), remontez d'un verset (ce que vous pouvez faire, car vous connaissez la coordonnée Y de la ligne médiane) et répétez. Le premier match de l'extrémité gauche sera le point de départ du verset. De même, s'il n'y a pas de correspondance directe sur la ligne, descendez d'une ligne et répétez.

    Voici une courte illustration de l'idée. La boîte jaune est l'endroit où l'utilisateur touche le verset. Vous effectuez ensuite la corrélation croisée avec votre modèle et les cercles bleus seront la correspondance.

    entrez la description de l'image ici

    J'utilise également le modèle de correspondance dans cette réponse , si vous souhaitez le voir en action.

  • Une fois que vous avez déterminé le point de départ du verset, utilisez un outil de reconnaissance de texte arabe pour déduire le numéro du verset à l'intérieur de cette bordure et lire le fichier audio correspondant.


Solution plus simple:

Une solution plus simple, si vous ne voulez pas passer par là, c'est de stocker les coordonnées XY des points de départ du verset (restez simple et utilisez les points centraux) et une fois que vous obtenez les coordonnées de l'entrée utilisateur, vous pouvez à nouveau enclencher à la ligne centrale, puis marchez en arrière pour voir où commence le verset. Cela pourrait avoir l'avantage d'être plus rapide.

Je n'ai pas proposé cela comme la première solution parce que vous sembliez rejeter une idée similaire dans les commentaires. En fin de compte, cela dépend de vos contraintes - préférez-vous faire un travail de calcul (correspondance de modèle - qui, en passant, vous oblige également à stocker le modèle) ou utiliser de la mémoire (stockage des coordonnées).

Si j'étais vous, j'irais probablement avec celui-ci, mais la solution de traitement d'image peut être amusante à essayer.


yoda ou quelqu'un d'autre, pouvez-vous expliquer un peu mieux ce problème s'il vous plaît.?! En fait, ce que je veux savoir et je ne comprends pas, c'est comment ou comment prendre des nombres à l'intérieur des cercles bleus.?! Merci beaucoup!

@xmenus Une fois que vous avez verrouillé le cercle (ce que vous faites en faisant correspondre le motif à la bordure distinctive), vous devrez utiliser une bibliothèque de reconnaissance de texte / nombre arabe pour identifier le contenu à l'intérieur. Je ne connais pas l'arabe et je ne peux donc rien recommander. Vous pouvez essayer de demander à l'OP ...
Lorem Ipsum

@xmenus Si vous avez besoin d'aide avec l'arabe, vous pouvez me demander, mais d'après ce que vous demandez si vous vouliez simplement détecter un nombre arabe, vous pourriez probablement faire le même modèle de correspondance pour eux que vous le faites avec les cercles.
Spacey
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.