Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

バーコード認識アルゴリズム 以下のステップで認識を行う 1. 画像のグレイスケール化⇢白黒化 ⇣ 2. 白黒画像のパターンの取得 ⇣ 3. パターンのデコード ⇣ 4. デコード結果の結合 ⇣ 5. バーコード部分を塗りつぶして2に戻る ⇣ 6. すべてのバーコードを検出したら終了

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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