Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Barcode Recognition / pharmacode-decoder
Search
shun74
November 26, 2022
Programming
0
860
Barcode Recognition / pharmacode-decoder
Pharmacodeリーダーを製作しました。
アルゴリズムなどの解説資料です。
shun74
November 26, 2022
Tweet
Share
More Decks by shun74
See All by shun74
深度推定モデルの自己教師あり学習/self-supervised-depth
shun74
0
320
GPUでステレオマッチング / Stereo-matching with GPU
shun74
0
730
卒業研究の進め方 / How to preceed with the research
shun74
1
480
Vision Transformer講座 / Vision Transformer Presentation
shun74
1
600
ニューラルネットの1bit化 / 1bit-neural-network
shun74
0
790
Defocus Map Estimation From a Single Image Based on Two-Parameter Defocus Model / two-parameter-defocus-model
shun74
0
300
理解してほしいVision Transformer / plz-understand-ViT
shun74
0
650
Other Decks in Programming
See All in Programming
MCP調べてみました! / Exploring MCP
uhzz
2
2.3k
Sharing features among Android applications: experience feedback
jbvincey
0
110
七輪ライブラリー: Claude AI で作る Next.js アプリ
suneo3476
1
110
Deoptimization: How YJIT Speeds Up Ruby by Slowing Down / RubyKaigi 2025
k0kubun
0
860
Youtube Lofier - Chrome拡張開発
ninikoko
0
2.4k
Building a macOS screen saver with Kotlin (Android Makers 2025)
zsmb
1
150
The Nature of Complexity in John Ousterhout’s Philosophy of Software Design
philipschwarz
PRO
0
120
Amazon CloudWatchの地味だけど強力な機能紹介!
itotsum
0
170
Ruby's Line Breaks
yui_knk
2
1.2k
「理解」を重視したAI活用開発
fast_doctor
0
120
Strategic Design (DDD)for the Frontend @DDD Meetup Stuttgart
manfredsteyer
PRO
0
160
The Evolution of the CRuby Build System
kateinoigakukun
0
720
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
35
2.6k
Designing for humans not robots
tammielis
252
25k
The Straight Up "How To Draw Better" Workshop
denniskardys
232
140k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2k
Rails Girls Zürich Keynote
gr2m
94
13k
Bash Introduction
62gerente
611
210k
Code Review Best Practice
trishagee
67
18k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
5
520
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
34
2.2k
Music & Morning Musume
bryan
47
6.5k
Transcript
バーコード認識の実装 RICORA - shun74
扱うバーコード Pharmacode (ファーマコード) • 医薬品業界向けバーコードの世界標準 • {太い、細い}黒線の2種類を組み合わせるシンプルな設計 Pharmacodeの例 • 決まった長さを持たない
• ある番号を表す(アルファベットを含まない)
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
バーコード認識アルゴリズム 以下のステップで認識を行う 1. 画像のグレイスケール化⇢白黒化 ⇣ 2. 白黒画像のパターンの取得 ⇣ 3. パターンのデコード
⇣ 4. デコード結果の結合 ⇣ 5. バーコード部分を塗りつぶして2に戻る ⇣ 6. すべてのバーコードを検出したら終了
画像のグレイスケール化⇢白黒化 • 画像を加工して特徴を捉えやすくする ⇢ ⇢ 元画像(RGB) グレイスケール画像 白黒画像 • 白黒の2値にすることで処理が簡単に!
白=255、黒=0となっている 白黒画像のパターンの取得 • 白黒画像のバーコードを値のパターンから検出する • バーコードのあるラインには特定のパターンが発生する
白黒画像のパターンの取得 パターンを検出する方針 1. 同じ幅の白区間が複数並んでいる場所を検出 2. 白と黒の幅を比較して太い線か細い線かを判定 • 白区間の幅に外れ値がないかをチェック ⇢ ノイズを排除しやすくなる
• 予め白区間の幅を指定しない ⇢ 様々な大きさのバーコードを検出可能
パターンのデコード • 取得できたパターンからpharmacodeの値を計算 • このラインからは755が検出される • パターンがない場合は0としておく
デコード結果の結合 • 各ラインの結果を統合してバーコード領域を特定 • 緑の線の範囲はデコード結果が755と なっているはず • 同じ数値が一番長く続いた区間を検 出結果とする
複数バーコードがある場合は? • 検出された部分を塗りつぶして検出をやりなおす ⇢⇢⇢ • バーコードが検出されなくなるまで繰り返すことで全て検出可能
検出結果 バーコード領域をきれいに検出できている!
その他工夫 • 画像にガンマ補正+鮮明化の前処理を行う ⇢ ブレに強くなる • 白黒化はラインごとに行う ⇢ よりノイズに強い白黒化 •
ラインごとの処理を並列化 ⇢ 並列化により処理を高速化
実装 GitHub:https://github.com/shun74/Barcode-Recognition