Erfassen von arabischen Versen, die mehrere Zeilen umfassen


12

Ich muss eine Quran-App erstellen und ich möchte die Verse vorlesen, wenn ein Benutzer sie berührt. Das Problem, vor dem ich stehe, ist, dass einige Verse zu eineinhalb Zeilen (hervorgehobener roter Vers) oder nur zu einem Viertel einer Zeile (hervorgehobener grüner Vers) passen. Wenn Sie also jeden Vers zur Textansicht oder einer anderen Ansicht hinzufügen, funktioniert dies anscheinend nicht.

Ich möchte Verse wie die roten im zweiten Bild erkennen. Ich habe Audiodateien für die Verse, so dass keine Konvertierung von Text in Sprache erforderlich ist


1
Wird die Seite als Bilddaten oder gerenderter Unicode-Text angegeben?

Text to Speech. Dann zeigen Sie uns doch bitte Ihre Recherchen.

Ich habe versucht, jedes Versbild dynamisch zur Bildansicht hinzuzufügen. Das Problem ist jedoch, dass die Bildansicht nicht auf eineinhalb Zeilen erweitert wird. Manchmal erfordern einige Verse eineinhalb Zeilen. Ich hoffe, Sie haben verstanden, was ich meinte. Ich brauche einen Vorschlag, um das zu überwinden.

1
Verwenden Sie zwei Leitungen und haben Sie nur etwas Overhead?

1
Mit anderthalb Zeilen ist gemeint, dass es die Breite des Bildschirms einnimmt und dann die Hälfte der nächsten Zeile nach unten?

Antworten:


9

Dies lässt sich mit einem einfachen Template-Matching relativ einfach lösen. Ich weiß nicht genau, wie Sie es eingerichtet haben, daher beschreibe ich den Algorithmus nur allgemein und verwende Abbildungen.

  • Beachten Sie, dass die Versnummern einen markanten Rand haben, mit dem Sie den Anfang und das Ende eines Verses leicht erkennen können. Erstellen Sie also eine binärisierte Vorlage für dieses Muster und speichern Sie sie. Etwas wie das:

    Bildbeschreibung hier eingeben

  • Da die Anzahl der Zeilen in einem Bildschirm im Voraus bekannt ist (Sie formatieren die Seite) und jeder Vers eine konstante Höhe hat, können Sie (algorithmisch) leicht ableiten, wo sich die Y-Koordinaten für die Mittellinien der Verse auf dem Bildschirm befinden sollten . Dies zeigt die Idee:

    Bildbeschreibung hier eingeben

  • Wenn der Benutzer einen Vers berührt, ermitteln Sie die XY-Koordinaten und fangen Sie die Y-Koordinate an der nächstgelegenen Versmitte.

  • Beginnen Sie dann mit der X-Koordinate und führen Sie einen einfachen Vorlagenabgleich (Kreuzkorrelation) in dieser Zeile durch. Die erste Übereinstimmung (Spitze in der Kreuzkorrelation) in Vorwärtsrichtung (nach links) ist der Endpunkt für den Vers. Wenn es in umgekehrter Richtung (rechts) keine Übereinstimmungen gibt, gehen Sie einen Vers nach oben (was Sie tun können, weil Sie die Y-Koordinate der Mittellinie kennen) und wiederholen Sie diese. Das erste Spiel vom linken Ende ist der Startpunkt des Verses. Wenn in der Zeile keine Vorwärtsübereinstimmung vorhanden ist, gehen Sie eine Zeile nach unten und wiederholen Sie den Vorgang.

    Hier ist eine kurze Illustration der Idee. In der gelben Box berührt der Benutzer den Vers. Sie führen dann die Kreuzkorrelation mit Ihrer Vorlage durch, und die blauen Kreise sind die Übereinstimmung.

    Bildbeschreibung hier eingeben

    In dieser Antwort verwende ich auch die Vorlagenübereinstimmung , wenn Sie daran interessiert sind, sie in Aktion zu sehen.

  • Wenn Sie den Startpunkt für den Vers festgelegt haben, verwenden Sie eine arabische Texterkennung, um auf die Versnummer innerhalb dieses Rahmens zu schließen und die entsprechende Audiodatei abzuspielen.


Einfachere Lösung:

Eine einfachere Lösung, wenn Sie dies nicht durchgehen möchten, besteht darin, die XY-Koordinaten der Vers-Startpunkte zu speichern (halten Sie es einfach und verwenden Sie die Mittelpunkte). Sobald Sie die Koordinaten der Benutzereingabe erhalten, können Sie erneut fangen Gehen Sie zur Mittellinie und dann zurück, um zu sehen, wo der Vers beginnt. Dies könnte den Vorteil haben, schneller zu sein.

Ich habe dies nicht als erste Lösung vorgeschlagen, weil Sie eine ähnliche Idee in den Kommentaren anscheinend abgelehnt haben. Letztendlich hängt es von Ihren Einschränkungen ab - möchten Sie lieber Rechenarbeit leisten (Template Matching - was im Übrigen auch erfordert, dass Sie das Template speichern) oder Speicher verwenden (Koordinaten speichern)?

Wenn ich Sie wäre, würde ich wahrscheinlich mit dieser gehen, aber die Bildverarbeitungslösung kann Spaß machen, es zu versuchen.


yoda oder irgendjemand anderes, kannst du dieses Problem bitte ein bisschen besser erklären.?! Was ich eigentlich wissen möchte und nicht bekomme, ist nur, wie oder wie man Zahlen in blauen Kreisen aufnimmt.?! Danke vielmals!

@xmenus Sobald Sie den Kreis fixiert haben (was Sie tun, indem Sie das Muster an den markanten Rand anpassen), müssen Sie eine Bibliothek zur Erkennung arabischer Texte / Zahlen verwenden, um den Inhalt darin zu identifizieren. Ich kann kein Arabisch und kann daher nichts empfehlen. Sie könnten versuchen, das OP zu fragen ...
Lorem Ipsum

@xmenus Wenn Sie Hilfe mit Arabisch benötigen, können Sie mich fragen, aber von dem, was Sie fragen, wenn Sie einfach eine arabische Nummer ermitteln möchten, könnten Sie vermutlich die gleiche Vorlage für sie durchführen, die Sie mit den Kreisen tun.
Spacey
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.