Detectar versos árabes que abarcan varias líneas


12

Necesito construir una aplicación Corán y quiero leer los versos cuando un usuario la toca. El problema que estoy enfrentando es que algunos versículos pueden expandirse a una línea y media (verso rojo resaltado) o simplemente caber en un cuarto de línea (verso verde resaltado). Parece que agregar cada verso a la vista de texto o alguna otra vista no funcionará.

Quiero detectar versos como los rojos en la segunda imagen. Tengo archivos de audio para los versos, así que no necesito conversión de texto a voz


1
¿Se proporciona la página como datos de imagen o texto Unicode representado?

Texto a voz ... Pero entonces, muéstranos tu investigación.

He intentado agregar dinámicamente cada imagen de verso a la vista de imagen, pero el problema surge es que la vista de imagen no se expandirá a una línea y media como esa. A veces algunos versos pueden requerir una línea y media, espero que hayas entendido lo que quise decir. Necesito alguna sugerencia para superar esto.

1
¿Usa dos líneas y solo tiene algo de gastos generales?

1
Por una línea y media, ¿quiere decir que ocupa el ancho de la pantalla y luego la mitad de la siguiente línea hacia abajo?

Respuestas:


9

Esto se puede resolver de manera bastante sencilla con una simple coincidencia de plantillas. No sé exactamente cómo configurarlo, así que simplemente describiré el algoritmo en general y usaré ilustraciones.

  • Observe que los números de verso tienen un borde distintivo que puede usarse fácilmente para detectar el comienzo y el final de un verso. Así que cree una plantilla binarizada para ese patrón y guárdela. Algo como esto:

    ingrese la descripción de la imagen aquí

  • Dado que el número de líneas en una pantalla se conoce de antemano (está formateando la página) y cada verso tiene una altura constante, puede inferir fácilmente (algorítmicamente) dónde deben estar las coordenadas Y de las líneas centrales de los versos en la pantalla . Esto demuestra la idea:

    ingrese la descripción de la imagen aquí

  • Cuando el usuario toca un verso, obtenga las coordenadas XY y ajuste la coordenada Y al centro del verso más cercano.

  • Luego, comenzando con la coordenada X, realice una coincidencia de plantilla simple (correlación cruzada) en esa fila. El primer partido (pico en la correlación cruzada) en la dirección hacia adelante (a la izquierda), será el punto final del verso. Si no hay coincidencias en la dirección inversa (a la derecha), suba un verso (lo que puede hacer, porque conoce la coordenada Y de la línea central) y repita. El primer partido desde el extremo izquierdo será el punto de inicio del verso. Del mismo modo, si no hay una coincidencia directa en la línea, muévase hacia abajo una línea y repita.

    Aquí hay una breve ilustración de la idea. El cuadro amarillo es donde el usuario toca el verso. Luego haces la correlación cruzada con tu plantilla y los círculos azules serán la coincidencia.

    ingrese la descripción de la imagen aquí

    También uso la coincidencia de plantillas en esta respuesta , si está interesado en verla en acción.

  • Una vez que haya determinado el punto de inicio del verso, use un reconocedor de texto árabe para inferir el número del verso dentro de ese borde y reproduzca el archivo de audio correspondiente.


Solución más simple:

Una solución más simple, si no desea pasar por esto, es almacenar las coordenadas XY de los puntos de inicio del verso (manténgalo simple y use los puntos centrales) y una vez que obtenga las coordenadas de la entrada del usuario, puede volver a ajustar hacia la línea central y luego camine hacia atrás para ver dónde comienza el versículo. Esto podría tener la ventaja de ser más rápido.

No presenté esto como la primera solución porque parecía rechazar una idea similar en los comentarios. Al final, depende de sus restricciones: ¿preferiría hacer un trabajo computacional (coincidencia de plantillas? Que, por cierto, también requiere que almacene la plantilla) o que use memoria (almacenamiento de coordenadas).

Si yo fuera usted, probablemente elegiría este, pero la solución de procesamiento de imágenes puede ser divertida de probar.


Yoda o cualquier otra persona, ¿pueden explicarme un poco mejor este problema, por favor? ¡¡En realidad, lo que quiero saber y no entiendo es cómo o cómo tomar números dentro de círculos azules. ¡Muchas gracias!

@xmenus Una vez que haya bloqueado el círculo (lo que hace mediante un patrón que coincida con el borde distintivo), deberá utilizar una biblioteca de reconocimiento de texto / número árabe para identificar los contenidos en su interior. No sé árabe y no puedo recomendar nada. Podrías intentar preguntarle al OP ...
Lorem Ipsum

@xmenus Si necesita ayuda con el árabe, puede preguntarme, pero por lo que está preguntando si simplemente desea detectar un número árabe, presumiblemente podría hacer la misma plantilla para ellos que con los círculos.
Spacey
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.