私はopencvもPythonも初めてです。研究課題を解決するために、オンラインで見つけたコードをつなぎ合わせてみました。私は 1870 年のアラビア語の日記を持っています。これは数百ページあり、各ページには 2 つの列があり、太い黒い枠線が付いています。ヘッダーとフッターを無視して個別に ocr を実行できるように、2 つの列を画像ファイルとして抽出したいと考えています。ページの例を次に示します:
3ページ目
10 ページの生のプリントを個別の png ファイルとして持っています。それぞれを処理するために次のスクリプトを作成しました。 10 ページ中 2 ページでは期待どおりに機能しますが、他の 8 ページでは列の生成に失敗します。これらの値をどこで使用できるか、または私のアプローチ全体が間違っているのかどうかを知るには、すべての関数を十分に理解していません。学ぶための最良の方法は、この問題をどのように解決するかをコミュニティに尋ねることだと思います。
リーリーチュートリアルに従って、大きな白い領域によって異なる長方形の領域を識別できるように、ぼかしと拡張のバイナリ反転を作成しました。また、各拡張バージョンのコピーを保存して、それがどのようになるかを確認しました。処理後の上記のページは次のとおりです:
ページ3を拡大しました
「for c in cnts」ループは、画像内の大きな長方形の領域を見つける必要があります。アスペクト比が 2.5 未満の場合はページ全体が表示されます (ヘッダーとフッターはなく、正常に動作します)。アスペクト比がこれより大きい場合は、列であることがわかり、これを保存します (例: temp/ p2-col2.png#)。
##ヘッダーとフッターのない、つまり大きな黒い境界線だけが列に分割されていない、素晴らしい完全なページがいくつか得られます。 10 ページ中 2 ページで、私が欲しかったものを手に入れることができました。それは次のとおりです。2ページ目の成功コラム
意図した結果が得られることもあるので、何かが機能しているはずですが、さらに改善する方法がわかりません。
###編集:###その他のページ例は次のとおりです:
p0
p1
p5
正解基本的に、このメソッドで最も重要なラインは、x 座標に基づいて左右の輪郭を生成することです。これが私が得た最終結果です:
端に黒い部分がまだ残っていますが、ocr には問題ありません。
参考: jupyter で次のパッケージを使用しています:
リーリー v2.0: ラージボックス検出のみを使用して実装:
そこで、拡張を行ったところ、大きなボックスが簡単に検出できるようになりました。大きなボックスの垂直線が常に検出されるのに十分な太さになるように、水平カーネルを使用します。ただし、中央の線が非常に細いため、問題を解決できません...それでも、上記のメソッドのコードは次のとおりです。 リーリー これらは結果です。完璧ではないことがわかりますが、ターゲットが ocr であるため、これは問題にはなりません。
これでうまくいくかどうか教えてください。うまくいかない場合は、より良い解決策を見つけるために頭を悩ませます...
v3.0
: よりまっすぐな画像を取得するためのより良い方法で、ocr の品質が向上します。ここでの私の他の回答:
answer に触発されました。 ocr の結果が良くなるように、画像をまっすぐにすることは理にかなっています。したがって、検出された外枠に対して 4 点変換を使用しました。これにより、画像がわずかにまっすぐになり、テキストがより水平になります。これはコードです: リーリー
次のパッケージがあります:以上がOpenCV: アラビア語雑誌の列を検索 (Python)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。