Detectando versos árabes em várias linhas

12

Preciso criar um aplicativo Alcorão e quero ler os versículos quando um usuário o tocar. O problema que estou enfrentando é que alguns versículos podem se expandir para uma linha e meia (verso destacado em vermelho) ou apenas caber em um quarto de linha (verso destacado em verde). Portanto, adicionar cada versículo à visualização de texto ou outra visualização não funcionará.

Quero detectar versos como os vermelhos na segunda imagem. Eu tenho arquivos de áudio para os versos, então não há necessidade de conversão de texto em fala

Aswin Anand
fonte
1
A página é fornecida como dados de imagem ou texto Unicode renderizado?
Text to Speech .. Mas então, por favor, mostre-nos sua pesquisa.
Tentei adicionar dinamicamente a imagem de cada verso à visualização de imagens, mas o problema surge é que a visualização da imagem não se expande para uma linha e meia assim. Às vezes, alguns versículos podem exigir uma linha e meia, espero que você entenda o que eu quis dizer. Eu preciso de alguma sugestão para superar isso.
1
Use duas linhas e tenha alguma sobrecarga?
1
Com uma linha e meia, você quer dizer que ocupa a largura da tela e depois metade da próxima linha?

Respostas:

9

Isso pode ser resolvido de maneira bastante direta com a correspondência simples de modelos. Não sei exatamente como você o configurou; portanto, descreverei o algoritmo em geral e usarei ilustrações.

  • Observe que os números dos versículos têm uma borda distinta que pode ser facilmente usada para detectar o início e o fim de um versículo. Portanto, crie um modelo binarizado para esse padrão e armazene-o. Algo assim:

    insira a descrição da imagem aqui

  • Como o número de linhas em uma tela é conhecido antecipadamente (você está formatando a página) e cada verso tem uma altura constante, é possível inferir facilmente (algoritmicamente) onde as coordenadas Y das linhas centrais dos versos devem estar na tela . Isso demonstra a ideia:

    insira a descrição da imagem aqui

  • Quando o usuário tocar em um verso, obtenha as coordenadas XY e encaixe a coordenada Y no centro de versículos mais próximo.

  • Em seguida, iniciando com a coordenada X, execute uma correspondência simples de modelo (correlação cruzada) nessa linha. A primeira partida (pico na correlação cruzada) na direção para frente (para a esquerda) será o ponto final do verso. Se não houver correspondências na direção reversa (à direita), mova um verso para cima (o que você pode fazer, porque conhece a coordenada Y da linha central) e repita. A primeira partida do lado esquerdo será o ponto de partida do verso. Da mesma forma, se não houver correspondência na linha, desça uma linha e repita.

    Aqui está uma pequena ilustração da ideia. A caixa amarela é onde o usuário toca o verso. Você faz a correlação cruzada com o seu modelo e os círculos azuis serão a correspondência.

    insira a descrição da imagem aqui

    Eu também uso a correspondência de modelos nesta resposta , se você estiver interessado em vê-lo em ação.

  • Depois de determinar o ponto de partida do verso, use um reconhecedor de texto em árabe para deduzir o número do verso dentro dessa borda e reproduzir o arquivo de áudio correspondente.


Solução mais simples:

Uma solução mais simples, se você não quiser passar por isso, é armazenar as coordenadas XY dos pontos iniciais do verso (simplifique e use os pontos centrais) e depois de obter as coordenadas da entrada do usuário, é possível até a linha central e depois caminhe para trás para ver onde o versículo começa. Isso pode ter a vantagem de ser mais rápido.

Não propus isso como a primeira solução, porque você parecia rejeitar uma idéia semelhante nos comentários. No final, isso depende de suas restrições - você prefere fazer um trabalho computacional (correspondência de modelo - que, a propósito, também exige que você armazene o modelo) ou usar memória (armazenar coordenadas).

Se eu fosse você, provavelmente aceitaria este, mas a solução de processamento de imagens pode ser divertida de experimentar.

Lorem Ipsum
fonte
yoda ou qualquer outra pessoa, você pode explicar um pouco melhor essa questão, por favor.? Na verdade, o que eu quero saber e não estou entendendo é como ou como obter números dentro de círculos azuis.?! Muito obrigado!
@xmenus Depois de ter bloqueado o círculo (o que você faz de acordo com o padrão), você precisará usar uma biblioteca de reconhecimento de texto / número em árabe para identificar o conteúdo. Eu não sei árabe e por isso não posso recomendar nada. Você poderia perguntar ao OP ...
Lorem Ipsum
@xmenus Se você precisar de ajuda com o árabe, pode me perguntar, mas pelo que você está perguntando se simplesmente queria detectar um número em árabe, você provavelmente poderia fazer o mesmo modelo correspondente a eles que você está fazendo com os círculos.
Spacey