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
image-processing
text-recognition
Aswin Anand
fuente
fuente
Respuestas:
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:
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:
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.
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.
fuente