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ę
image-processing
text-recognition
Aswin Anand
źródło
źródło
Odpowiedzi:
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:
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ł:
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ć.
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.
źródło