non_max_suppression: non_max_suppressionの機能は、重複する境界ボックスを削除し、最も信頼性の高いボックスを選択することです。
parameters: この関数のパラメータ。
- boxes: 処理対象の境界ボックスのリスト。各ボックスは、座標とスコアを持つオブジェクトです。
- overlapThresh: 重複と見なすための閾値。デフォルトは0.2です。
Code Description: この関数は、与えられた境界ボックスのリストから重複するボックスを削除し、最も信頼性の高いボックスを選択するために使用されます。まず、ボックスはスコアに基づいて降順にソートされます。次に、各ボックスに対して、他のボックスとの重複をチェックします。重複が検出され、重複面積が指定された閾値を超える場合、そのボックスは無視されます。最終的に、無視されなかったボックスのリストが返されます。
この関数は、ocr_japanease.py内のget_ocr関数で使用されており、OCR処理の一環として検出されたテキスト領域の重複を排除するために利用されています。get_ocr関数では、画像内のテキスト領域を検出し、それらの領域をnon_max_suppressionを用いてフィルタリングし、最終的なテキスト領域を決定します。
Note: 使用する際は、overlapThreshの値を適切に設定することで、重複の許容範囲を調整できます。過度に低い値を設定すると、必要なボックスが削除される可能性があります。
Output Example:
- 入力: 複数の境界ボックスが含まれるリスト
- 出力: 重複が削除された境界ボックスのリスト
column_wordlines: column_wordlines関数は、バウンディングボックスのリストを受け取り、それらを列または行にグループ化して整理するための関数です。
parameters: この関数のパラメータ。
- bbox: バウンディングボックスのリスト。各バウンディングボックスは、テキストの位置を示します。
- overlapThresh: 列または行を決定する際の重なりの閾値。デフォルトは0.1です。
- overlapThresh_line: 行内での重なりの閾値。デフォルトは0.6です。
Code Description:
column_wordlines関数は、与えられたバウンディングボックスのリストを解析し、それらを列または行にグループ化します。まず、内部関数_1dim_non_suppressionを使用して、x軸とy軸に沿ったバウンディングボックスの範囲を非抑制します。この非抑制により、重なりが一定の閾値を超えるバウンディングボックスを除外します。
次に、バウンディングボックスの範囲に基づいて、縦書き(列が少ない場合)または横書き(行が少ない場合)を判定します。縦書きの場合、x軸に基づいてバウンディングボックスをグループ化し、各列内でy軸に基づいてソートします。横書きの場合、y軸に基づいてグループ化し、各行内でx軸に基づいてソートします。
この関数は、OCR(光学文字認識)プロセスの一部として、get_ocr関数内で使用されます。get_ocr関数は、画像ファイルからテキストを検出し、column_wordlinesを使用して検出されたバウンディングボックスを整理します。
Note:
- バウンディングボックスが空の場合、関数は空のリストを返します。
overlapThreshとoverlapThresh_lineの値を調整することで、列や行のグループ化の厳密さを変更できます。
Output Example: 関数の戻り値は、バウンディングボックスのリストを含むリストです。各内部リストは、同じ列または行に属するバウンディングボックスを表します。例えば、以下のような出力が考えられます。
[
[BoundingBox1, BoundingBox2, ...], # 1つ目の行または列
[BoundingBox3, BoundingBox4, ...], # 2つ目の行または列
...
]
_1dim_non_suppression: _1dim_non_suppressionの機能は、与えられた範囲のリストから、指定された重複しきい値を超える重複を持つ範囲を除外することです。
parameters: この関数のパラメータ。
- ranges: 処理対象の範囲のリスト。各範囲は2つの要素を持つタプルで、開始位置と終了位置を示します。
- overlapThresh: 重複しきい値を示す浮動小数点数。この値を超える重複を持つ範囲は除外されます。
Code Description: この関数は、まず入力された範囲リストが空であるかどうかを確認し、空の場合は空のリストを返します。次に、各範囲が他の範囲とどの程度重複しているかを確認するためのフラグリストを初期化します。外側のループで各範囲をチェックし、内側のループでその範囲と後続の範囲との重複を計算します。重複の幅が、後続の範囲の幅に対して指定されたしきい値を超える場合、その範囲は無視されるようにフラグが設定されます。最終的に、無視されない範囲のみを含む新しいリストを返します。
Note: この関数は、範囲がソートされていることを前提としていませんが、効率を向上させるためにソートされた範囲を入力することが推奨されます。また、重複しきい値は0から1の間で指定する必要があります。
Output Example: 関数の戻り値の例として、以下のようなリストが考えられます。
- 入力: ranges = [(1, 3), (2, 5), (6, 8)], overlapThresh = 0.5
- 出力: [(1, 3), (6, 8)]