Mendeteksi ayat-ayat Arab yang mencakup beberapa baris


12

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


1
Apakah halaman diberikan sebagai data gambar atau teks Unicode yang diberikan?

Text to Speech .. Tapi kalau begitu, tolong tunjukkan penelitian Anda.

Saya telah mencoba menambahkan setiap gambar ayat ke tampilan gambar secara dinamis, Tapi masalah yang muncul adalah bahwa tampilan gambar tidak akan meluas ke satu setengah garis seperti itu. Terkadang beberapa ayat membutuhkan satu setengah baris, Semoga Anda mengerti maksud saya. Saya butuh saran untuk mengatasi hal ini.

1
Gunakan dua garis dan hanya memiliki beberapa overhead?

1
Dengan satu setengah garis yang Anda maksudkan memakan lebar layar, lalu setengah dari garis berikutnya ke bawah?

Jawaban:


9

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:

    masukkan deskripsi gambar di sini

  • 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:

    masukkan deskripsi gambar di sini

  • 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.

    masukkan deskripsi gambar di sini

    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.


yoda atau siapa pun, dapatkah Anda menjelaskan sedikit lebih baik masalah ini ?.! Sebenarnya apa yang ingin saya ketahui dan tidak saya dapatkan hanyalah bagaimana atau bagaimana mengambil angka di dalam lingkaran biru.?! Terima kasih banyak!

@xmenus Setelah Anda mengunci di lingkaran (yang Anda lakukan dengan pola yang cocok dengan perbatasan khas), Anda harus menggunakan pustaka pengenalan teks / angka Arab untuk mengidentifikasi konten di dalamnya. Saya tidak tahu bahasa Arab dan jadi tidak bisa merekomendasikan apa pun. Anda dapat mencoba bertanya pada OP ...
Lorem Ipsum

@xmenus Jika Anda memerlukan bantuan dalam bahasa Arab, Anda dapat bertanya kepada saya, tetapi dari apa yang Anda tanyakan apakah Anda hanya ingin mendeteksi nomor Arab, Anda mungkin bisa melakukan templat yang sama dengan mereka seperti yang Anda lakukan dengan lingkaran.
Spacey
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.