Barcode Recognition / pharmacode-decoder
by
shun74
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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