Halconにおけるバーコードデコード成功率向上のためのアプローチ

Halconライブラリを使用したバーコードデコードの一般的なプロセスは、以下の4つのステップで構成されます。

デコードモデルの初期化 デコードパラメータの設定 デコード処理の実行 モデルの解放とメモリのクリーンアップ

* デコードモデルの作成
create_bar_code_model ([], [], BarCodeHandle)

* スキャンライン数の設定 (例: 30本)
set_bar_code_param (BarCodeHandle, 'num_scanlines', 30)

* バーコードの検索とデコード (例: Code 128, Code 39)
find_bar_code (Image, SymbolRegions1, BarCodeHandle, ['Code 128','Code 39'], BarCodeStrings)

* デコードモデルの解放
clear_bar_code_model (BarCodeHandle)

通常、デコード成功率と処理速度の向上を目指し、「デコードパラメータの設定」ステップでパラメータ調整を行います。しかし、このアプローチには限界があり、パラメータを最適化してもデコードが困難な場合があります。

スマートフォンのQRコードスキャンを例に考えてみましょう。一度でスキャンできない場合でも、デバイスの位置を少し変えたり、ライトを点灯させて再度試みると、多くの場合成功します。これは、スマートフォンが複数回のデコード試行を行っているためと推測されます。複数回のフォーカス調整や露出設定、そしてデバイス位置の変更により、デコード成功の確率を高めているのです。スマートフォンのデコード処理は短時間で行われるため、ユーザーには一回の操作で完了したように見えます。

この考え方をHalconでのデコード処理に応用できます。デコードが失敗した場合、異なるパラメータ設定で再試行したり、カメラの露出設定を変更して再度画像を取得し、デコードを試みます。工業用カメラの位置変更は現実的ではないため、ここでは考慮しません。

このアプローチに基づいたHalconコードの例を以下に示します(主要部分のみ)。

* 初期化
Length := 0
DecodedDataStrings := []

* ループ処理によるコントラスト調整とデコード試行
* min_gray: 最小輝度値、max_gray: 最大輝度値
for min_gray := 0 to 30 by 3
    for max_gray := 255 to 180 by -7
        * scale_gray_map関数で輝度マッピングを行い、コントラストを強調
        scale_gray_map (Image, Image2, min_gray, max_gray)

        * DataCode (QRコードなど) のデコード
        find_data_code_2d (Image2, SymbolXLDs, hv_DataCodeHandleQR, [], [], ResultHandles, DecodedDataStrings)

        * デコードされた文字列の長さを取得
        tuple_strlen (DecodedDataStrings, Length)

        * 解読成功の簡易判定 (文字列長が5より大きい場合)
        if (Length > 5)
            break ' 内側のループを抜ける
        endif
    endfor

    * 内側のループで解読成功した場合、外側のループも抜ける
    if (Length > 5)
        break
    endif
endfor

* デコード結果の表示
disp_message (3600, 'デコード結果: ' + DecodedDataStrings , 'image', 100, 12, 'black', 'true')

このコードでは、2重のforループを使用して画像のコントラストを段階的に変化させ、新しい画像 Image2 に対してデコード処理を実行します。

ループのステップ幅は、処理速度を考慮して適切に設定する必要があります。ステップ幅が小さすぎるとループ回数が増加し、処理時間が長くなります。

scale_gray_map 関数は、輝度マッピングによって画像のコントラストを強調する関数です。詳細な実装については、https://www.cnblogs.com/xh6300/p/7512532.html を参照してください。

この例では、異なる露出設定をシミュレートすることでデコード成功率を向上させていますが、デコード失敗時に set_data_code_2d_param 関数を用いてデコードパラメータを動的に変更するアプローチも有効です。

タグ: halcon バーコード認識 画像処理 QRコード デコード

6月22日 16:07 投稿