Wykrywanie wersetów arabskich obejmujących wiele wierszy

12

Muszę zbudować aplikację Koran i chcę odczytać wiersze, gdy użytkownik go dotknie. Problem, z którym się zmagam, polega na tym, że niektóre wiersze mogą rozwinąć się do półtorej linii (podświetlony czerwony wiersz) lub po prostu zmieścić się w ćwiartce linii (podświetlony zielony wiersz). Wydaje się więc, że dodanie każdego wersetu do widoku tekstu lub innego widoku nie zadziała.

Chcę wykryć wersety takie jak czerwone na drugim obrazku. Mam pliki audio do wierszy, więc nie ma potrzeby konwersji tekstu na mowę

Aswin Anand
źródło
1
Czy strona jest podawana jako dane obrazu lub renderowany tekst Unicode?
Tekst na mowę .. Ale proszę, pokaż nam swoje badania.
Próbowałem dynamicznie dodawać każdy werset do podglądu obrazu, ale pojawia się problem, że widok obrazu nie rozszerza się tak do półtorej linii. Czasami niektóre wersety mogą wymagać jednej i pół linijki, mam nadzieję, że rozumiesz. Potrzebuję sugestii, aby to rozwiązać.
1
Użyj dwóch linii i po prostu trochę narzutów?
1
Przez półtorej linii masz na myśli, że zajmuje ona szerokość ekranu, a następnie połowę następnego wiersza w dół?

Odpowiedzi:

9

Można to rozwiązać dość prosto dzięki prostemu dopasowaniu szablonów. Nie wiem dokładnie, jak go skonfigurowałeś, więc opiszę algorytm ogólnie i użyję ilustracji.

  • Zauważ, że numery wierszy mają charakterystyczne obramowanie, które można łatwo wykorzystać do wykrycia początku i końca wiersza. Utwórz szablon binarny dla tego wzoru i zapisz go. Coś takiego:

    wprowadź opis zdjęcia tutaj

  • Ponieważ liczba linii na ekranie jest znana z góry (formatujesz stronę), a każdy wiersz ma stałą wysokość, możesz łatwo wnioskować (algorytmicznie), gdzie współrzędne Y linii środkowych wierszy powinny znajdować się na ekranie . To pokazuje pomysł:

    wprowadź opis zdjęcia tutaj

  • Gdy użytkownik dotknie wersetu, uzyskaj współrzędne XY i przyciągnij współrzędną Y do najbliższego centrum wiersza.

  • Następnie, zaczynając od współrzędnej X, wykonaj proste dopasowanie szablonu (korelacja krzyżowa) w tym wierszu. Pierwsze dopasowanie (szczyt w korelacji krzyżowej) w kierunku do przodu (w lewo) będzie punktem końcowym wiersza. Jeśli nie ma żadnych dopasowań w odwrotnym kierunku (w prawo), przejdź w górę o jeden wiersz (co możesz zrobić, ponieważ znasz współrzędną Y linii środkowej) i powtórz. Pierwszy mecz od lewego końca będzie punktem początkowym wiersza. Podobnie, jeśli na linii nie ma dopasowania do przodu, przejdź o jedną linię w dół i powtórz.

    Oto krótka ilustracja tego pomysłu. Żółte pole to miejsce, w którym użytkownik dotyka wersetu. Następnie wykonujesz korelację krzyżową ze swoim szablonem, a niebieskie kółka będą pasować.

    wprowadź opis zdjęcia tutaj

    W tej odpowiedzi używam również dopasowywania szablonów , jeśli chcesz zobaczyć, jak działa.

  • Po określeniu punktu początkowego wiersza użyj arabskiego rozpoznawania tekstu, aby określić numer wiersza wewnątrz tej ramki i odtworzyć odpowiedni plik audio.


Prostsze rozwiązanie:

Prostszym rozwiązaniem, jeśli nie chcesz przez to przechodzić, jest przechowywanie współrzędnych XY punktów początkowych wiersza (upraszczaj i używaj punktów środkowych), a gdy otrzymasz współrzędne wprowadzane przez użytkownika, możesz ponownie przyciągnąć do linii środkowej, a następnie idź do tyłu, aby zobaczyć, gdzie zaczyna się wiersz. Może to mieć tę zaletę, że jest szybsze.

Nie przedstawiłem tego jako pierwszego rozwiązania, ponieważ wydawało się, że odrzucasz podobny pomysł w komentarzach. Ostatecznie zależy to od twoich ograniczeń - wolisz wykonywać prace obliczeniowe (dopasowywanie szablonów - które, nawiasem mówiąc, również wymagają zapisania szablonu) lub używać pamięci (zapisywanie współrzędnych).

Gdybym był tobą, prawdopodobnie wybrałbym ten, ale rozwiązanie do przetwarzania obrazu może być fajne.

Lorem Ipsum
źródło
Yoda lub ktokolwiek inny, czy możesz wyjaśnić nieco lepiej ten problem, proszę? Wielkie dzięki!
@xmenus Po zablokowaniu koła (co robisz według wzoru pasującego do charakterystycznej ramki), będziesz musiał użyć arabskiej biblioteki rozpoznawania tekstu / liczb do identyfikacji zawartości w środku. Nie znam arabskiego, więc nie mogę niczego polecić. Możesz spróbować poprosić OP ...
Lorem Ipsum,
@xmenus Jeśli potrzebujesz pomocy w języku arabskim, możesz mnie zapytać, ale na podstawie pytania, czy chcesz po prostu wykryć liczbę arabską, prawdopodobnie możesz wykonać dla nich taki sam szablon, jak w przypadku kręgów.
Spacey,