コーランアプリを構築する必要があり、ユーザーがそれに触れたときに詩を読みたいです。私が直面している問題は、一部の詩が1.5行に拡大する場合があります(ハイライトされた赤色の詩)または1/4行にちょうど収まることです(強調された緑色の詩)。したがって、各詩をtextviewまたは他のビューに追加しても機能しないようです。
2番目の画像の赤い部分のような詩を検出したい。詩の音声ファイルがあるので、テキストを音声に変換する必要はありません
コーランアプリを構築する必要があり、ユーザーがそれに触れたときに詩を読みたいです。私が直面している問題は、一部の詩が1.5行に拡大する場合があります(ハイライトされた赤色の詩)または1/4行にちょうど収まることです(強調された緑色の詩)。したがって、各詩をtextviewまたは他のビューに追加しても機能しないようです。
2番目の画像の赤い部分のような詩を検出したい。詩の音声ファイルがあるので、テキストを音声に変換する必要はありません
回答:
これは、単純なテンプレートマッチングでかなり簡単に解決できます。どのように設定したのか正確にはわからないので、アルゴリズムを一般的に説明し、イラストを使用します。
節の番号には、節の開始と終了を簡単に検出できる独特の境界線があることに注意してください。そのため、そのパターンの2値化テンプレートを作成して保存します。このようなもの:
画面の行数は事前にわかっており(ページをフォーマットしている)、各詩の高さは一定であるため、詩の中心線のY座標が画面上のどこにあるか(アルゴリズム的に)簡単に推測できます。 。これはアイデアを示しています。
ユーザーが詩に触れたら、XY座標を取得し、Y座標を最も近い詩の中心にスナップします。
次に、X座標から始めて、その行全体で単純なテンプレートマッチング(相互相関)を実行します。前方(左)の最初の一致(相互相関のピーク)は、詩の終点になります。逆方向(右)に一致するものがない場合は、1節上に移動し(中心線のY座標がわかっているため、これを実行できます)、繰り返します。左端からの最初の一致は、詩の開始点になります。同様に、行に前方一致がない場合は、1行下に移動して繰り返します。
アイデアの簡単な説明を次に示します。黄色のボックスは、ユーザーが詩をタッチする場所です。次に、テンプレートと相互相関を行うと、青い円が一致します。
あなたが実際にそれを見ることに興味があるなら、私もこの答えでテンプレートマッチングを使用します。
詩の開始点を決定したら、アラビア語のテキスト認識エンジンを使用して、その境界内の詩番号を推測し、対応するオーディオファイルを再生します。
これをやりたくない場合、より簡単な解決策は、詩の開始点のXY座標を保存することです(単純にして、中心点を使用します)、ユーザー入力の座標を取得したら、再びスナップすることができますそれを中心線まで移動してから、後方に歩いて詩の始まりを確認します。これには、高速であるという利点があります。
あなたはコメントで同様のアイデアを拒否しているように見えたので、私はこれを最初の解決策として提案しませんでした。結局、それはあなたの制約に依存します—むしろあなたはむしろ計算作業(テンプレートマッチング—ところで、テンプレートを保存する必要があります)を行うか、メモリを使用する(座標を保存する)でしょうか。
もし私があなたなら、私はおそらくこれを使うだろうが、画像処理ソリューションは試してみるのが楽しいかもしれない。