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