Bu, basit şablon eşleşmesi ile oldukça basit bir şekilde çözülebilir. Nasıl ayarladığınızı tam olarak bilmiyorum, bu yüzden algoritmayı genel olarak açıklayacağım ve illüstrasyonları kullanacağım.
Ayet sayılarının, bir ayetin başlangıcını ve sonunu tespit etmek için kolayca kullanılabilen ayırt edici bir kenarlığı olduğunu gözlemleyin. Bu kalıp için ikili bir şablon oluşturun ve saklayın. Bunun gibi bir şey:
Ekrandaki satır sayısı önceden bilindiğinden (sayfayı biçimlendirdiğinizden) ve her ayetin sabit bir yüksekliği olduğundan, ayetlerin merkez çizgileri için Y koordinatlarının ekranda olması gereken yeri kolayca (algoritmik olarak) çıkarabilirsiniz. . Bu şu fikri gösterir:
Kullanıcı bir ayete dokunduğunda, XY koordinatlarını alın ve Y koordinatını en yakın ayet merkezine yaslayın.
Sonra X koordinatı ile başlayarak, bu satır boyunca basit bir şablon eşleştirme (çapraz korelasyon) gerçekleştirin. İleri yönde (sola doğru) ilk eşleşme (çapraz korelasyonda zirve), ayetin bitiş noktası olacaktır. Ters yönde (sağda) eşleşme yoksa, bir ayet yukarı hareket edin (bunu yapabilirsiniz, çünkü merkez çizginin Y koordinatını biliyorsunuz) ve tekrarlayın. Sol uçtan ilk maç, ayetin başlangıç noktası olacaktır. Benzer şekilde, hatta ileri doğru eşleşme yoksa, bir satır aşağı gidin ve tekrarlayın.
İşte fikrin kısa bir örneği. Sarı kutu, kullanıcının ayete dokunduğu yerdir. Ardından şablonunuzla çapraz korelasyon yaparsınız ve mavi daireler eşleşir.
Eylemde görmek istiyorsanız, bu cevapta şablon eşleşmesini de kullanıyorum .
Ayetin başlangıç noktasını belirledikten sonra, o kenarlığın içindeki ayet numarasını çıkarmak ve karşılık gelen ses dosyasını çalmak için Arapça bir metin tanıyıcı kullanın.
Daha basit çözüm:
Daha basit bir çözüm, eğer bunu yapmak istemiyorsanız, ayet başlangıç noktalarının XY koordinatlarını saklamak (basit tutun ve merkez noktalarını kullanın) ve kullanıcı girişinin koordinatlarını aldıktan sonra tekrar yapıştırabilirsiniz. merkez çizgisine getirin ve sonra ayetin nereden başladığını görmek için geriye doğru yürüyün. Bu daha hızlı olma avantajına sahip olabilir.
Bunu ilk çözüm olarak ileri sürmedim çünkü yorumlarda benzer bir fikri reddetmiş gibisin. Sonunda, bu sizin kısıtlamalarınıza bağlıdır - hesaplama işini (şablon eşleştirme - bu arada, şablonu saklamanızı da gerektirir) veya belleği (koordinatları saklama) kullanmayı tercih eder misiniz.
Ben olsaydım, muhtemelen bununla giderdim, ama görüntü işleme çözümü denemek eğlenceli olabilir.