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
image-processing
text-recognition
Aswin Anand
la source
la source
Réponses:
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:
É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:
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.
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.
la source