Saya perlu membangun aplikasi Quran dan saya ingin membacakan ayat-ayat ketika pengguna menyentuhnya. Masalah yang saya hadapi adalah bahwa beberapa ayat dapat meluas ke satu setengah baris (disorot ayat merah) atau hanya muat dalam seperempat baris (disorot ayat hijau). Jadi menambahkan setiap ayat ke tampilan teks atau tampilan lain tidak akan berfungsi sepertinya.
Saya ingin mendeteksi ayat seperti yang merah pada gambar kedua. Saya memiliki file audio untuk ayat-ayat sehingga tidak perlu konversi teks ke ucapan
image-processing
text-recognition
Aswin Anand
sumber
sumber
Jawaban:
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.
sumber