Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Barcode Recognition / pharmacode-decoder

shun74
November 26, 2022

Barcode Recognition / pharmacode-decoder

Pharmacodeリーダーを製作しました。
アルゴリズムなどの解説資料です。

shun74

November 26, 2022
Tweet

More Decks by shun74

Other Decks in Programming

Transcript

  1. バーコード認識の実装
    RICORA - shun74

    View Slide

  2. 扱うバーコード
    Pharmacode (ファーマコード)
    ● 医薬品業界向けバーコードの世界標準
    ● {太い、細い}黒線の2種類を組み合わせるシンプルな設計
    Pharmacodeの例
    ● 決まった長さを持たない
    ● ある番号を表す(アルファベットを含まない)

    View Slide

  3. Pharmacodeのデコード
    ● Pharmacodeは右から順に計算することでデコードできる
    1. 一番右から0, 1, 2…と線に番号を付ける
    2. i番目の線が太かったら2^(i+1)を細かったら2^iを足す
    ● 画像のPharmacodeは計算すると...
    2^0 + 2^1 + 2^3 + 2^4 + 2^5 + 2^5
    = 1 + 2 + 8 + 16 + 32 + 32
    = 91

    View Slide

  4. バーコード認識アルゴリズム
    以下のステップで認識を行う
    1. 画像のグレイスケール化⇢白黒化

    2. 白黒画像のパターンの取得

    3. パターンのデコード

    4. デコード結果の結合

    5. バーコード部分を塗りつぶして2に戻る

    6. すべてのバーコードを検出したら終了

    View Slide

  5. 画像のグレイスケール化⇢白黒化
    ● 画像を加工して特徴を捉えやすくする
    ⇢ ⇢
    元画像(RGB) グレイスケール画像 白黒画像
    ● 白黒の2値にすることで処理が簡単に!

    View Slide

  6. 白=255、黒=0となっている
    白黒画像のパターンの取得
    ● 白黒画像のバーコードを値のパターンから検出する
    ● バーコードのあるラインには特定のパターンが発生する

    View Slide

  7. 白黒画像のパターンの取得
    パターンを検出する方針
    1. 同じ幅の白区間が複数並んでいる場所を検出
    2. 白と黒の幅を比較して太い線か細い線かを判定
    ● 白区間の幅に外れ値がないかをチェック
    ⇢ ノイズを排除しやすくなる
    ● 予め白区間の幅を指定しない
    ⇢ 様々な大きさのバーコードを検出可能

    View Slide

  8. パターンのデコード
    ● 取得できたパターンからpharmacodeの値を計算
    ● このラインからは755が検出される
    ● パターンがない場合は0としておく

    View Slide

  9. デコード結果の結合
    ● 各ラインの結果を統合してバーコード領域を特定
    ● 緑の線の範囲はデコード結果が755と
    なっているはず
    ● 同じ数値が一番長く続いた区間を検
    出結果とする

    View Slide

  10. 複数バーコードがある場合は?
    ● 検出された部分を塗りつぶして検出をやりなおす
    ⇢⇢⇢
    ● バーコードが検出されなくなるまで繰り返すことで全て検出可能

    View Slide

  11. 検出結果
    バーコード領域をきれいに検出できている!

    View Slide

  12. その他工夫
    ● 画像にガンマ補正+鮮明化の前処理を行う
    ⇢ ブレに強くなる
    ● 白黒化はラインごとに行う
    ⇢ よりノイズに強い白黒化
    ● ラインごとの処理を並列化
    ⇢ 並列化により処理を高速化

    View Slide

  13. 実装
    GitHub:https://github.com/shun74/Barcode-Recognition

    View Slide