Barcode Recognition / pharmacode-decoder
by
shun74
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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