Ini dapat diselesaikan dengan cukup mudah dengan pencocokan templat sederhana. Saya tidak tahu persis bagaimana Anda mengaturnya, jadi saya hanya akan menjelaskan algoritma secara umum dan menggunakan ilustrasi.
Perhatikan bahwa angka-angka ayat memiliki batas khas yang dapat dengan mudah digunakan untuk mendeteksi awal dan akhir sebuah ayat. Jadi buat templat binarized untuk pola itu dan simpan. Sesuatu seperti ini:
Karena jumlah baris dalam layar diketahui sebelumnya (Anda memformat halaman) dan setiap ayat memiliki tinggi konstan, Anda dapat dengan mudah menyimpulkan (secara algoritmik) di mana koordinat Y untuk garis tengah ayat harus di layar . Ini menunjukkan gagasan:
Ketika pengguna menyentuh sebuah ayat, dapatkan koordinat XY dan snap koordinat Y ke pusat ayat terdekat.
Kemudian mulai dengan koordinat X, lakukan pencocokan templat sederhana (korelasi silang) di baris itu. Pertandingan pertama (puncak dalam korelasi silang) dalam arah maju (ke kiri), akan menjadi titik akhir untuk ayat tersebut. Jika tidak ada kecocokan di arah sebaliknya (ke kanan), maka naik satu ayat (yang dapat Anda lakukan, karena Anda tahu koordinat Y dari garis tengah) dan ulangi. Pertandingan pertama dari ujung kiri akan menjadi titik awal dari ayat tersebut. Demikian pula, jika tidak ada pencocokan maju pada garis, turun satu baris dan ulangi.
Berikut ilustrasi singkat ide tersebut. Kotak kuning adalah tempat pengguna menyentuh ayat tersebut. Anda kemudian melakukan korelasi silang dengan templat Anda dan lingkaran biru akan menjadi pasangan.
Saya juga menggunakan pencocokan templat dalam jawaban ini , jika Anda tertarik melihatnya dalam aksi.
Setelah Anda menentukan titik awal untuk ayat tersebut, kemudian gunakan pengenal teks Arab untuk menyimpulkan nomor ayat di dalam perbatasan itu dan memutar file audio yang sesuai.
Solusi yang lebih sederhana:
Solusi yang lebih sederhana, jika Anda tidak ingin melalui ini adalah untuk menyimpan koordinat XY dari titik awal ayat (tetap sederhana dan gunakan titik tengah) dan setelah Anda mendapatkan koordinat dari input pengguna, Anda dapat kembali menjepret ke garis tengah dan kemudian berjalan mundur untuk melihat di mana ayat itu dimulai. Ini mungkin memiliki keuntungan lebih cepat.
Saya tidak mengedepankan ini sebagai solusi pertama karena Anda sepertinya menolak ide serupa di komentar. Pada akhirnya, itu tergantung pada kendala Anda - apakah Anda lebih suka melakukan pekerjaan komputasi (pencocokan templat - yang, juga mengharuskan Anda untuk menyimpan templat) atau menggunakan memori (menyimpan koordinat).
Jika saya jadi Anda, saya mungkin akan memilih yang ini, tetapi solusi pemrosesan gambar bisa menyenangkan untuk dicoba.