(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2023179358
(43)【公開日】2023-12-19
(54)【発明の名称】1次元光学コードの読み取り
(51)【国際特許分類】
H04N 1/403 20060101AFI20231212BHJP
G06K 7/10 20060101ALI20231212BHJP
G06K 7/14 20060101ALI20231212BHJP
H04N 1/409 20060101ALI20231212BHJP
【FI】
H04N1/403
G06K7/10 372
G06K7/14 013
G06K7/14 078
G06K7/14 082
H04N1/409
【審査請求】有
【請求項の数】12
【出願形態】OL
【外国語出願】
(21)【出願番号】P 2023060380
(22)【出願日】2023-04-03
(31)【優先権主張番号】22177569
(32)【優先日】2022-06-07
(33)【優先権主張国・地域又は機関】EP
(71)【出願人】
【識別番号】591005615
【氏名又は名称】ジック アーゲー
(74)【代理人】
【識別番号】110001069
【氏名又は名称】弁理士法人京都国際特許事務所
(72)【発明者】
【氏名】マルセル ハンプフ
(72)【発明者】
【氏名】ロマン ミューラー
(72)【発明者】
【氏名】トルステン ファルク
(72)【発明者】
【氏名】ユリアン ツィマー
【テーマコード(参考)】
5C077
【Fターム(参考)】
5C077MM02
5C077MP04
5C077PP03
5C077PP20
5C077PP21
5C077PQ15
5C077RR02
(57)【要約】 (修正有)
【課題】バーコードを読み取るための二値化を改善する1次元光学コードの読み取り方法及びコード読み取り装置を提供する。
【解決手段】ベルトコンベア(12)上にコードリーダ(10)を取り付け、物体(14)の外側表面の1次元光学コード(20)を読み取る方法は、検出領域(18)を通過する物体(14)の1次元光学コード(20)の画像データを取得し、該画像データからコードを貫通する複数のグレースケール値推移を取得し、該グレースケール値推移から二値化により白黒推移を形成し、該白黒推移から1次元光学コード(20)のコード内容を読み取る。また、複数のグレースケール値推移から、二値化の準備のために、まず、元の画像データに比べてより高い解像度、より鮮明なエッジ及びより際立った極値を持つ鮮明化されたグレースケール値推移を生成し、該鮮明化されたグレースケール値推移を二値化することで白黒推移を形成する。
【選択図】
図1
【特許請求の範囲】
【請求項1】
1次元光学コード(20)を読み取る方法であって、コード(20)の画像データを取得し、該画像データから前記コードを貫通する複数のグレースケール値推移(30)を取得し、該グレースケール値推移(30)から二値化により白黒推移を形成し、該白黒推移から前記コード(20)のコード内容を読み取る方法において、
前記複数のグレースケール値推移(30)から、二値化の準備のために、まず、元の画像データに比べてより高い解像度、より鮮明なエッジ及びより際立った極値を持つ鮮明化されたグレースケール値推移(34)を生成し、該鮮明化されたグレースケール値推移(34)を二値化することで前記白黒推移を形成することを特徴とする方法。
【請求項2】
前記コード(20)を含む画像領域を見つけるために前処理において前記画像データをセグメント化する、請求項1に記載の方法。
【請求項3】
前処理において前記画像データ中の前記コード(20)の向きを特定する、請求項1に記載の方法。
【請求項4】
前記二値化の準備のために、まず前記複数のグレースケール値推移(30)から高解像度化されたグレースケール値推移(32)を生成する、請求項1に記載の方法。
【請求項5】
前記高解像度化されたグレースケール値推移(32)から、デコンボリューション法、特にリチャードソン・ルーシー・デコンボリューションにより、前記鮮明化されたグレースケール値推移(34)を生成する、請求項4に記載の方法。
【請求項6】
前記高解像度化されたグレースケール値推移(32)から、機械学習の方法により、前記鮮明化されたグレースケール値推移(34)を生成する、請求項4に記載の方法。
【請求項7】
前記機械学習の方法がニューラルネットワーク、特に前記高解像度化されたグレースケール値推移(32)における前記コード(20)のモジュールサイズに相当する幅のフィルタカーネルを用いる畳み込みネットワークを備える、請求項6に記載の方法。
【請求項8】
前記複数のグレースケール値推移(30)から、機械学習の方法、特に畳み込みネットワークにより、高解像度化されたグレースケール値推移(32)又は前記鮮明化されたグレースケール値推移(34)を生成する、請求項1に記載の方法。
【請求項9】
前記機械学習の方法が、グレースケール値推移(30、32、34)と白黒推移(36)を相互に割り当てる訓練データに基づく教師あり学習によって訓練され、該訓練データは予め与えられたコード内容又は読み取りに成功したコード(20)から得られたものである、請求項6に記載の方法。
【請求項10】
前記訓練データの解像度を低減させて、小さいモジュールサイズを持つ訓練データを得る、請求項9に記載の方法。
【請求項11】
前記画像データを、受光素子(24)とコードを付した物体(14)との相対運動中に、特にライン毎に、取得する、請求項1又は2に記載の方法。
【請求項12】
1次元光学コード(20)を読み取るためのコード読み取り装置(10)であって、前記コード(20)を含む画像データを取得するための少なくとも1つの受光素子(24)と、請求項1に記載の方法を実行するように構成された制御及び評価ユニット(26)とを備えている装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、請求項1のプレアンブルに記載の1次元光学コードの読み取り方法及び対応する請求項15に記載のコード読み取り装置に関する。
【背景技術】
【0002】
コードリーダは、スーパーマーケットのレジ、荷物の自動識別、郵便物の仕分け、空港での手荷物の発送等、物流での利用が知られている。コードスキャナの場合、読み取り光線が回転ミラー又はポリゴンミラーホイールでコードを横切るように案内される。カメラベースのコードリーダは画像センサを用いて物体の画像をその表面にあるコードとともに撮影し、画像解析ソフトウエアがその画像からコード情報を抽出する。
【0003】
ある重要な一群の利用形態では、コードを付した物体がコードリーダの近くを通過するように搬送される。そして、コードスキャナがその読み取り領域内に次々に入ってくるコードをそれぞれ検出する。他方、カメラベースのコードリーダでは、ライン走査カメラがコード情報を持つ物体画像を相対運動に伴って次々に1ラインずつ読み取る。2次元画像センサを用いる場合は、撮像レートと搬送速度に応じて多少重なり合う複数の画像データが規則的に取得される。物体をコンベア上で任意の向きに配置できるようにするため、読み取りトンネルに複数のコードリーダを設け、物体を複数の側又は全ての側から撮影できるようにすることも多い。
【0004】
数多くの形式の2次元光学コードが存在するが、1次元バーコードは依然として重要な役割を果たしている。バーコードは黒色のバーと白色の隙間から成る。これに対し、コード読み取りのためにスキャン又は撮影された画像のデータはグレースケールを示す。例えば色深度が8ビットの場合は0~255のグレースケール値である。デコーダは、テンプレートマッチングのような少数の方法は例外としても、グレースケール値は扱えない。それ故、デコーダより先に、グレースケール値を白黒値又はわずか1ビットの色深度に変換する二値化を行うのが普通である。
【0005】
二値化は情報の大幅な減少を意味する。その際、バー及び隙間の幅に関する決定的な情報は絶対に失われてはならない。単純な閾値法は理想的な条件の下でしか十分ではない。実践ではそうはならず、不十分な焦点、光学的な歪み、汚れ、ノイズ、被写体ぶれ、反射、コードの損傷、不十分な露光等、数多くの様々な妨害作用がある。
【0006】
それ故、首尾良くデコードができるようにするには、明らかにもっと複雑な二値化アルゴリズムが必要である。その場合、まずインテリジェントな又は局所的な閾値選択及び事前フィルタリングといったより細かい最適化が挙げられる。微分型の方法では、エッジ及び極値の位置を特定するために元のグレースケール値推移が微分される。これについても数多くの最適化がある。様々な二値化アルゴリズムの長所を組み合わせるため、これらはしばしば並列に実行され、その結果が別々にデコードされる。
【0007】
これら従来の二値化の実装を用いて、現実のコード読み取り状況の多くにおいて良好な結果が得られる。それでも、二値化の品質が不十分であるようなコード取得がまだあまりに多く残っている。それは例えば、非常に不鮮明である、信号雑音比が低い、サンプリング効果がある、コントラストが低い、コード解像度が低い等といった場合である。特に不都合なのはこれらの作用が結合することである。まさにこの相互作用において妨害が複雑化し、そのため、各々の問題事例を個別に且つ狙いを定めて対処するには、記述だけでも極めて難しく且つ時間がかかり、ましてや適切なアルゴリズムの開発はなおさらである。
【0008】
特許文献1は、読み取ったカラー又はグレースケールの画像データを、まだ受信している間及び/又はリアルタイムに二値化するコード取得用の光電センサを開示している。しかし該文献では格別の具体的な二値化アルゴリズムは検討されていない。
【0009】
特許文献2では、FPGA上での前処理においてコントラストの大きさに基づいて関心領域又はコード候補が見つけられる。これは二値化と結びつけることができるが、二値化について詳しくは説明されていない。
【0010】
特許文献3では、機械学習のない方法で作動する古典的なデコーダを利用して、機械学習用に構成された分類器又はより特別にはニューラルネットワークを訓練する。古典的なデコーダは好ましくは画像データを二値化するように構成されているが、その二値化が具体的にどのように進むかは説明されていない。
【0011】
特許文献4には、ニューラルネットワークを用いたセグメント化をストリーミング法において行う、即ち、更なる画像データをまだ読み込んでいる間にもう画像データを処理するカメラ及び画像データ処理方法が記載されている。ニューラルネットワークの少なくとも第1層はFPGA上に実装することができる。ある実施形態では追加の処理経路が設けられ、これがニューラルネットワークと並列に高解像度化された原画像の別コピーに対して古典的な又は学習型の方法で二値画像の生成といった前処理ステップを実行する。ここでも二値化は詳しく検討されていない。
【0012】
特許文献5には画像評価方法が記載されている。該方法では、スキャンして読み込まれたグレースケール画像に対してデコンボリューションを用いたぼけ修正と適応的な閾値を用いた二値化が行われる。特許文献6では、ニューラルネットワークを用いた高解像度化が行われ、続いて二値化とデコードが行われる。これはそれぞれバーコード即ち1次元コードには裁断されず、また、説明した問題状況においては依然として二値化の品質が不十分になる可能性がある。
【0013】
特許文献7に記載のコードリーダでは、コードまでの測定距離に応じて追加アルゴリズムがデコード処理に取り込まれる。その追加アルゴリズムの1つはリチャードソン・ルーシー・デコンボリューションを用いたぼけ修正とすることができる。しかしこれは二値化と結びつけられない。
【先行技術文献】
【特許文献】
【0014】
【特許文献1】EP 2 003 599 A1
【特許文献2】EP 2 555 160 B1
【特許文献3】EP 3 428 834 B1
【特許文献4】EP 3 916 633 A1
【特許文献5】US 8 576 446 B2
【特許文献6】US 2020/0394376 A1
【特許文献7】EP 3 812 953 A1
【発明の概要】
【発明が解決しようとする課題】
【0015】
故に本発明の課題は、バーコードを読み取るための二値化を改善することである。
【課題を解決するための手段】
【0016】
この課題は請求項1のプレアンブルに記載の1次元光学コードの読み取り方法及び対応する請求項15に記載のコード読み取り装置により解決される。本明細書においてバーコードという概念は1次元光学コードと同義に用いられており、ときに2次元コードもバーコードと呼ぶ一部の文献とは違っている。バーコードを読み取るステップは自動的に進行する。これはコンピュータ実装型の方法である。
【0017】
コードを含む画像データが取得される。そのためにはマトリクスカメラを用いることができる。同様に、ライン走査カメラを用いて反復撮影を行うこと、特にコードとライン走査カメラの間で位置をずらしつつ、連続して撮影された画像ラインを結合して1つの平面的な画像にすることも考えられる。コードスキャナの強度プロファイルも同様に画像ラインと解釈することができる。平面的な撮影又は反復的なライン撮影によりコードが多重的に捕らえられ、それに応じてコードを貫通するグレースケール値推移が複数得られる。いずれのグレースケール値推移もそのコードを表しており、この意味で前記複数のグレースケール値推移は冗長である。グレースケール値推移同士の間には違いがあるから、それは完全な冗長性ではなく、それ故、より頑強な読み取り結果を得るために、その複数のグレースケール値推移の過剰測定を利用することができる。1つのグレースケール値推移をコードスキャナにならって「スキャン」とも呼ぶ。やや拡大解釈すると、それは、コードを貫通する線に沿った強度推移又は画像データを、例えば8ビットの色深度又はグレースケール深度の場合は256段階のグレースケールで表したものである。
【0018】
グレースケール値推移から二値化により今や色深度又はグレースケール深度が1ビットしかない白黒推移が形成され、その推移からコードのコード内容が読み取られる。二値化は、インテリジェントな若しくは局所的な閾値、又は先行する微分処理若しくは機械学習の方法(特にニューラルネットワーク)の使用を含めて、それ自体公知のいずれのやり方でも行うことができる。コードの読み取りについても、それ自体公知のいずれの古典的なデコーダ又は機械学習の方法でも使用することができる。
【0019】
本発明の出発点となる基本思想は、二値化の支援及び準備のために、前記複数のグレースケール値推移からそれらの冗長性を利用して鮮明化されたグレースケール値推移を生成することにある。鮮明化されたグレースケール値推移は元の画像データよりも高い解像度を有する(アップサンプリング、超解像)。加えて、その中ではエッジと極値が鮮明化されており(ぼけ修正、振幅拡大)、元の画像データ中よりも際立っている。不明瞭なエッジがより鮮明且つ急峻になり、バーにおけるグレースケール値がより暗くなり、隙間におけるグレースケール値がより明るくなる。従って、それに続く二値化は明らかに容易である。
【0020】
好ましい一実施形態では高解像度化と鮮明化が別々のステップである。もっとも、解像度だけが高められ、鮮明さはまだ高められていないグレースケール値推移を非明示的に中間結果として形成することも考えられる。特に、ニューラルネットワークを用いる実装においては、中間結果を隠れ層の特徴マップに埋もれたままにし、出力側において直接、両方の改善が成された完成形の鮮明なグレースケール値推移が結果として得られるようにすることができる。本発明に係る方法の様々なステップ、即ち高解像度化、鮮明化、二値化及びコード読み取りは一般的なものであり、それぞれ古典的に又は機械学習の方法で実行することができる。これについては古典的なステップと機械学習のステップの様々な混成形が可能であり、特にニューラルネットワークを用いて各ステップを実装する場合、個別のニューラルネットワークをステップ毎に又は複数の連続するステップに対して実装することができる。
【0021】
本発明には、非常に多くのバーコードが首尾良くデコードされ、それにより読み取り率が高まるという利点がある。不明瞭、低解像度、その他の低い品質で取得されたグレースケール値推移でもなお正確に二値化し、続いてコードを読み取ることができる。これは特に、モジュールサイズ(即ち最小のバー又は最小の隙間当たりのピクセル)が小さい決定的に重要な場合、特にモジュールサイズが1又はそれ未満の範囲にある場合に当てはまる。本発明に係る方法は、他のコード読み取り法と並列に用いることも、他のコード読み取り法が失敗するときに用いることもできる。
【0022】
好ましくは、コードを含む画像領域を見つけるために前処理において画像データをセグメント化する。これにより、バーコードの読み取りが、いずれにせよ高い確率でバーコードが実際に見つかる関心領域に限定される。セグメント化は後続のコード読み取りとは別の部品において実行することが好ましく、特にセグメント化をFPGA(Field Programmable Gate Array)で、コード読み取りをCPU(マイクロプロセッサ)で行うことが好ましい。これについては冒頭で挙げた特許文献2を補足的に参照されたい。FPGAは少なくとも本発明に係る方法の一部を処理することができ、特に、冒頭で挙げた特許文献4のようにFPGA上に初期層を持つニューラルネットワークによることができる。
【0023】
好ましくは、前処理において画像データ中のコードの向きを、特にセグメント化の枠内で特定する。理想的な読み取り方向はバーコードのバーを横切って延在する一方、逆にバーに沿った読み取り方向では読み取りは不可能である。コードの向きが分かれば適切なグレースケール値推移を得ることができる。好ましくは、画像データの行又は列を直接利用できるように、水平と垂直の間の選択だけを行う。バーに垂直である理想的な読み取り方向は斜めに延在するのが確かに通例だが、画像データのラスタが不連続であることから、斜めのグレースケール値推移にはグレースケール値の跳びがある。これら2つの基準の間で慎重に検討すべきである。水平と垂直の間を区別するために、2本の互いに垂直な線で一種の検査十字を作ることができる。そうすると2本の線のうち一方がより多くのバー及び隙間若しくは明暗移行部を横切るから、それによりコードの向きが特定される。
【0024】
二値化の準備のために、まず複数のグレースケール値推移から高解像度化されたグレースケール値推移を生成することが好ましい。上で既に述べたように、この実施形態では高解像度化と鮮明化という2つの分離したステップが実行される。冗長な複数のグレースケール値推移を利用して高解像度化されたグレースケール値推移が生成される。対応する高解像度化の方法(超解像)そのものは公知であり、そのために機械学習法(特にニューラルネットワークを用いたもの)等の古典的なアルゴリズムがある。
【0025】
好ましくは、高解像度化されたグレースケール値推移から、デコンボリューション法により、鮮明化されたグレースケール値推移を生成する。デコンボリューションは古典的な方法である。即ち、それは機械学習の方法ではなく、特にニューラルネットワークではない。バーコードの場合はリチャードソン・ルーシー・デコンボリューションが特に適している。
【0026】
代案では、高解像度化されたグレースケール値推移から、機械学習の方法により、鮮明化されたグレースケール値推移を生成する。リチャードソン・ルーシー・デコンボリューションのような古典的なアプローチは比較的少ない計算リソースでもうまく処理できる。しかし、良い結果を得るには手作業でパラメータ設定を行う必要があるという欠点がある。データ駆動型である機械学習の方法の場合、それは必要なく、しかもこれを用いる方がより良い結果が得られることが多い。
【0027】
機械学習の方法はニューラルネットワーク、特に高解像度化されたグレースケール値推移におけるコードのモジュールサイズに相当する幅のフィルタカーネルを用いる畳み込みネットワークを備えることが好ましい。ニューラルネットワーク、特に隠れ層を持つ深層ニューラルネットワーク(「深層学習」)には、有用なソフトウェアパッケージの膨大な基盤を利用することができ、必要であれば専用のハードウェアも利用できる。画像処理の枠内では特に畳み込みネットワーク(CNN、Convolutional Neural Network)が適している。目指す二値化は局所的な近接関係に特に強く依存しており、1モジュールを超える混合は役に立つというよりむしろ妨げになる。故にモジュールサイズ程度の大きさのフィルタカーネルを用いる畳み込みネットワークが、ここで目指す応用に特に良く適合している。本発明は1ピクセル以下のモジュールサイズを持つ低解像度のコード撮影画像を第1の対象としている。高解像度化の後ではモジュール幅が数ピクセル(例えば5ピクセル)になるから、そのモジュール幅に対応する幅(先に挙げた例では5ピクセル)を持つフィルタカーネルを選択することが好ましい。それよりやや狭い又は広いフィルタカーネルも考えられるが、好ましくはモジュール幅の倍数ではないものとすべきである。ただし、フィルタカーネルをモジュールサイズに適合させることは強制ではなく、ニューラルネットワークは学習を通じてより不利な初期条件にも適合できる。前記フィルタカーネルの幅は第1層又は初期層に関するものであり、もっと後の層では、局所的な前後関係は反復的な畳み込みを通じていずれにせよより大きな近接領域へと更に広がっていく。
【0028】
複数のグレースケール値推移から、機械学習の方法、特に畳み込みネットワークにより、高解像度化されたグレースケール値推移又は鮮明化されたグレースケール値推移を生成することが好ましい。複数のグレースケール値推移はこのために上下に配置されて2次元画像として入力側に入力されることが好ましい。その際、第1の方法では、先に1つの可能性として既に述べたように、機械学習の方法が単独の中間ステップにおいて高解像度化を行う。第2の方法では、高解像度化と鮮明化という2つのステップが1つの機械学習の方法にまとめられる。その場合、機械学習の方法が明示的に中間ステップとしてまず高解像度化を行うかどうかは決まっておらず、むしろそうではないことが普通であろうが、いずれにせよそれは、例えば隠れ層の特徴マップという形をした純粋に内部的な中間結果である。しかし高解像度化は何らかの形で内部的に表現されている。なぜなら、結果として得られる鮮明化されたグレースケール値推移は解像度と鮮明さの両方が改善されているからである。
【0029】
機械学習の方法は、グレースケール値推移と白黒推移を相互に割り当てる訓練データに基づく教師あり学習によって訓練され、該訓練データは予め与えられたコード内容又は読み取りに成功したコードから得られたものであることが好ましい。教師あり学習では、予め正しい評価が与えられたサンプルを含む訓練データセットに基づき、後の稼働時に提示される原画像を一般化することができる。訓練並びに稼働(推論)のためのニューラルネットワークとアルゴリズムの適切なアーキテクチャはそもそも既知であるから、良好に機能する解を用いること又はその上に重ねることができる。ここで典型的な困難の1つは訓練データセットの生成である。本実施形態では2つの可能なやり方を個別に又は組み合わせて用いることによりそれを解決する。まず、コード内容を予め与え、そこから理想的な白黒推移を構成し、それを様々なやり方でグレースケール値推移に異化することができる。他方で、本物のコード画像を読み取ることができる。その場合、白黒推移は、成功した読み取り試行を二値化したものか、読み取ったコード内容から再構成された白黒推移かのいずれかであり、グレースケール値推移はコード画像の画像データから取り出す。これらのグレースケール値推移は訓練サンプル、白黒推移はそれに付随する所望の、訓練すべき結果(ラベル、グラウンドトゥルース)である。
【0030】
好ましくは、訓練データの解像度を低減させて、小さいモジュールサイズを持つ訓練データを得る。訓練データが得られる成功した読み取り試行は典型的には高解像度である。本発明の動機は何と言っても、モジュールサイズの小さい問題事例がしばしば読み取れないということである。それでもなお現場からの訓練サンプルを利用できるようにするため、本実施形態では、本物のコード画像から得た元々の高解像度化されたグレースケール値推移を人工的に低解像度にし、以て小さいモジュールサイズにする(ダウンサンプリング)。加えて、白黒推移を新たにその低解像度で構成するか、同様に解像度の低減により適合させる。
【0031】
画像データは、受光素子とコードを付した物体との相対運動中に、特にライン毎に、取得することが好ましい。受光素子はコード読み取り装置の一部であり、相対運動は、コードを付した物体を例えば搬送装置に載せ、固定的に取り付けられたコード読み取り装置の読み取り野を通過するように搬送することにより生じさせることが好ましい。
【0032】
本発明に係る、1次元光学コードを読み取るためのコード読み取り装置は、コードを含む画像データを取得するための少なくとも1つの受光素子と、本発明に係る方法の前記実施形態のいずれかを実行するように構成された制御及び評価ユニットとを備えている。本コード読み取り装置は、例えばフォトダイオードを受光素子とするバーコードスキャナとすることができ、その場合、スキャンの強度プロファイルが前記複数のグレースケール値推移であり、それらをそのまま処理するか、好ましくはまずライン毎に結合して画像データにする。好ましくは、前記コード読み取り装置は画像センサを受光素子とするカメラベースのコードリーダである。他方、画像センサは、コードラインを捕らえるため若しくは画像ラインの結合により平面的なコード画像を捕らえるためのラインセンサ、又はマトリクスセンサとすることができ、この場合、マトリクスセンサの撮影画像も合成してより大きな出力画像にすることができる。複数のコードリーダ又はカメラヘッドの結合も同様に考えられる。制御及び評価ユニットはそれ自体をバーコードスキャナ又はカメラベースのコードリーダの一部としたり、制御機器としてそれらに接続したりすることができる。
【0033】
以下、本発明について、更なる特徴及び利点をも考慮しつつ、模範的な実施形態に基づき、添付の図面を参照しながら詳しく説明する。
【図面の簡単な説明】
【0034】
【
図1】読み取るべきコードが付された物体を搬送するベルトコンベア上にコードリーダを取り付けた模範例の概略的な3次元全体図。
【
図2】バーコードを貫通するグレースケール値推移の模範例。
【
図3】認識困難な明暗移行部を有するバーコードを貫通するグレースケール値推移の一部を切り出した模範例。
【
図4】複数の低解像度のグレースケール値推移から高解像度化されたグレースケール値推移を生成する処理の概略的な説明図。
【
図5】グレースケール値推移を鮮明化するためのニューラルネットワークのアーキテクチャのためのコード例。
【
図6】ニューラルネットワークを用いた鮮明化の場合の元のグレースケール値推移と、鮮明化された推移と、目指す理想的な白黒推移との比較図。
【
図7a】元のグレースケール値推移を有するコード画像から切り出した部分。
【
図7b】鮮明化のためにニューラルネットワークを適用した後の
図7aの部分。
【
図7d】理想的な白黒推移を有する比較部分(Ground Truth)。
【
図8】リチャードソン・ルーシー・デコンボリューションを用いた鮮明化の場合の元のグレースケール値推移と、鮮明化された推移と、目指す理想的な白黒推移との比較図。
【
図9a】元のグレースケール値推移を有するコード画像から切り出した部分。
【
図9b】鮮明化のためにリチャードソン・ルーシー・デコンボリューションを適用した後の
図9aの部分。
【
図9d】理想的な白黒推移を有する比較部分(Ground Truth)。
【発明を実施するための形態】
【0035】
図1はベルトコンベア12の上方に取り付けられた好ましい使用状況の光電式コードリーダ10を示している。ベルトコンベア12は矢印16で示したようにコードリーダ10の検出領域18を通過するように物体14を搬送する。物体14はその外側表面にコード領域20を持っており、これがコードリーダ10により検出されて評価される。このコード領域20は上面に付されているか、少なくとも上から見えるように付されている場合にのみコードリーダ10で認識できる。そこで、
図1の描画から逸脱して、例えば側面又は底面に付されたコード22を読み取るために複数のコードリーダ10を異なる方向から取り付けることで、いわゆる全方向からの多重読み取りを可能にしてもよい。読み取りシステムにおける複数のコードリーダ10の配置は実際には読み取りトンネルとして実施することがほとんどである。このようにコードリーダをベルトコンベア付近に固定して用いることは実際に非常によくある。しかし、本発明は何よりもコードリーダ10そのもの又はその内部で実行されるコードのデコード方法に関するものであるから、本例を限定的なものとして解釈してはならない。
【0036】
コードリーダ10は搬送されている物体14及びコード領域20の画像データを画像センサ24で取得し、そのデータが制御及び評価ユニット26によって画像解析及びデコード法を用いて更に処理される。本発明にとって具体的な撮像法は重要ではないため、コードリーダ10はそれ自体公知である任意の原理により構成することができる。例えばその都度1ラインだけを捕らえる場合、ライン状の画像センサを用いてもよいしスキャン法によってもよいが、後者の場合、画像センサ24としてはフォトダイオード等の簡単な受光器で十分である。制御及び評価ユニット26は捕らえられたラインを評価する、又は、搬送運動の進行中に捕らえられた複数のラインを結合して画像データにする。マトリクス状の画像センサを用いれば一度の撮影だけでより広い領域を捕らえることができる。ここでもまた複数の撮影画像の結合を搬送方向にもそれと交差する方向にも行うことができる。複数のコードリーダ10は各々の検出領域18を合わせてようやくベルトコンベア12の幅全体をカバーするものであり、各コードリーダ10は全体画像の断片部分だけを撮影し、該断片部分が画像処理(Stitching)により結合される。個々の断片部分内でデコードを断片的にのみ行い、その後でコード断片を結合することも考えられる。
【0037】
コードリーダ10はインターフェイス28を通じて情報(読み取られたコード又は画像データ等)を出力する。制御及び評価ユニット26を、本来のコードリーダ10内、即ち
図1に示したカメラ内に配置するのではなく、別個の制御装置として一又は複数のコードリーダ10に接続することも考えられる。その場合、インターフェイス28は内部と外部の制御及び評価を接続する働きもする。制御及び評価の機能はほぼ任意に内部と外部の部品に分配することができ、その際、外部の部品はネットワーク又はクラウドを通じて接続されていてもよい。これら全てをここではこれ以上区別せず、制御及び評価ユニット26はその具体的な実装に関わらずコードリーダ10の一部とみなす。制御及び評価ユニット26はFPGA(Field Programmable Gate Array)及びマイクロプロセッサ(CPU)等の複数の部品を備えることができる。特に、まだ説明していない機械学習の方法での評価ステップ(特にニューラルネットワークを用いるもの)には、AIプロセッサ、NPU(Neural Processing Unit)、GPU(Graphics Processing Unit)等の特別なハードウェア部品を用いることができる。
【0038】
図2はバーコードを貫通する線に沿った模範的なグレースケール値推移を示している。コード読み取りの部分ステップとしてグレースケール値推移を二値化する必要があり、その結果得られる白黒推移から明暗移行部若しくは暗明移行部の間隔を特定し、以てコード内容を特定する。ほとんどのバーと隙間、即ちバーコードの暗領域と明領域は、グレースケール値の顕著な極大及び極小として認識される。他に鞍部、2重ピーク、及び、あまり顕著ではない極値があり、これらは裸眼ではまだバーと隙間の間の移行部なのか単にグレースケール値検出のノイズ又は不正確さなのかさほど明確に決定できない。これらの箇所では、局所的に適合化された閾値を用いてもなお二値化のエラーが生じ、その結果、バーコードが誤読される又は読み取り不能となる可能性がある。
【0039】
図3は
図2のようなグレースケール値推移の一部を示している。円で囲んだ箇所において、バーコードの狭い隙間が極大としてではなく、鞍点としてですらなく、単に勾配の境界という形で現れている。本発明の動機は、グレースケール値推移の処理により、このような問題箇所においても二値化により正しい結果が得られるような初期状況を作り出すことである要約することができる。
【0040】
即ち、本発明の基本原理は、元のグレースケール値推移を直ちに二値化アルゴリズムにかけるのではなく、該グレースケール値推移を後の二値化に鑑みて修正する非線形フィルタを事前に適用することにある。このような非線形フィルタは、まさにグレースケール値推移が低解像度で且つ不鮮明である
図3の例のような場合でも、従来の方法では得られないような二値化のための情報を際立たせることができる。後で
図5から
図7a~dを参照して詳しく説明する実施形態では、このフィルタが機械学習の方法、特に、読み取りにくいグレースケール値推移の品質を改善するために訓練されたニューラルネットワーク(データ駆動型アプローチ)により実装される。他方、
図8及び
図9a~dを参照して詳しく説明する実施形態では古典的な方法が用いられる。フィルタは複数の元のグレースケール値推移から1つの鮮明化されたグレースケール値推移をその都度生成する。即ち、入力側でも出力側でも例えば8ビットの色深度又はグレースケール深度を持つグレースケール値が存在している。その後、比較的簡単な二値化アルゴリズムによって色深度が1ビットに低減される。これについては、従来の微分型又は閾値アルゴリズム等、それ自体公知の二値化アルゴリズムを実際上どれでも使用できる。原則的には、二値化にも同様に機械学習の方法(特にフィルタの機械学習の方法と同じもの)を利用することにより、入力データとしての複数の元のグレースケール値推移から出力データとしての白黒推移が直接得られるようにすることが考えられる。
【0041】
図4は、複数の元のグレースケール値推移30を処理してまず1つの高解像度化されたグレースケール値推移32にする追加の準備ステップを例示している(超解像)。先に挙げた鮮明化のための非線形フィルタはこの高解像度化されたグレースケール値推移32を入力として受け取ることが好ましい。複数のグレースケール値推移30は、特に1本の個別のラインではなくバーコードの平面的な画像部分を処理することにより、同じバーコードを貫通する複数の線に沿っていることが好ましい。平面的な画像部分はバーコードの撮影画像からそのまま取り出す必要はなく、例えば、グレースケール値推移30を縦方向に広めの間隔から狭めに詰めて並べたり、水平方向に互いに整列させたりしてもよい。入力データを平面的な画像部分と呼ぶか複数のラインと呼ぶかは本方法にとってこれ以降、重要ではない。前記線が画像行又は画像列に沿っていれば有利である。そうすれば、読み取りに最適なバーコードのバーに垂直という向きを、普通は単に近似的にではあるが、画像行又は画像列を選ぶことにより達成できる。バーコードの画像を斜めに貫通する線も考えられるが、その場合は妨害的な不連続化アーチファクトが生じる可能性がある。
図4の描画では複数の元のグレースケール値推移30が既にバーコードを横切る適切な方向に向けられている。この準備ステップは省略することができるが、その場合、非線形フィルタは回転自由度まで追加的に処理できなければならず、そうなると、特に機械学習の方法を用いる場合に膨大な数の訓練サンプルが必要になる。
【0042】
本発明は、低解像度で撮影されたバーコード、即ち、モジュール当たり1ピクセル以下という小さいモジュールサイズのために優先的に考えられたものであるから、高解像度化は有利である。より大きなモジュールサイズでは通例、特別な前処理のない従来の二値化で既に間に合う。もっとも、当然ながら本発明はそのようなバーコードにも依然として適用可能である。複数のグレースケール値推移30を取り込むことによりバーコードの情報の冗長性が有益に利用されるが、それはいずれにせよ普通のコード読み取りの応用でも空間的及び/又は時間的に多重に取得される。代案として、グレースケール値推移を1つだけ入力として用いることも考えられ、その解像度は内挿により同様に高めることができる。ただし、入力として複数のグレースケール値推移30を用いる
図4に示したやり方とは違って、内挿では情報のベースは広がらない。
【0043】
高解像度化されたグレースケール値推移32は、これから説明する後続の鮮明化の出発点である。鮮明化ではバーと隙間の間の移行部が鮮明になり、バーと隙間のグレースケール値がそれぞれより暗く又はより明るくなる。目指す結果は、まだグレースケール値で表されているものの、非常に急峻なエッジを持つ二値的な明暗の推移に可能な限り近くなる。なお、高解像度化されたグレースケール値推移32は必ずしも明示的な中間結果として生成される必要はない。特に、機械学習の方法を用いる場合は高解像度化と鮮明化を1つのステップで行うことができる。ただその場合、高解像度化はこの方法の隠れた部分である。全く同様に、二値化も別個のステップにする代わりに機械学習の方法に取り込むことができる。これについては、それ自体はより単純な複数の部分ステップの訓練と、共通ではあるがそれだけ複雑なステップの訓練との間でその都度比較検討しなければならない。いくつかの部分ステップ(二値化等)には非常に簡単な公知の古典的な方法が利用できるから、モノリシックで高度に複雑なニューラルネットワークを全ステップのために用いるアプローチは必ずしも有利ではない。
【0044】
以下では高解像度化されたグレースケール値推移32を鮮明化するための非線形フィルタを2つの実施形態で詳しく説明する。最初の実施形態は機械学習の方法(ここでは例としてニューラルネットワーク)に基づいており、
図5から
図7a~dに例示される。2番目の実施形態は古典的な方法(ここでは例としてリチャードソン・ルーシー・デコンボリューション)に基づいており、
図8及び
図9a~dに例示される。
【0045】
図5は、グレースケール値推移を鮮明化するための非線形フィルタとして利用できる模範的なニューラルネットワークを生成するためのプログラムコードの一部(コードの抜粋)を示している。好ましくも、入力において、模範例として3991個の連続するグレースケール値を持つ1つの高解像度化されたグレースケール値推移32が入力されている。複数の元のグレースケール値推移30を直接処理するという別のやり方をするには、アーキテクチャをそれに適合させること、例えば、1本の長いラインよりもむしろ複数の短いラインを入力し、アーキテクチャ内でも単一の高解像度化されたラインの第1の部分を対象にすることが好ましい。
【0046】
この模範的なニューラルネットワークは複数の隠れ層を有する畳み込みネットワーク(CNN、Convolutional Neural Network)である。カーネルサイズはここではN=5が選ばれている。これはモジュールサイズの5に合っており、このモジュールサイズの場合にカーネルがその都度ほぼ1つのモジュールを捕らえる。この模範例のモジュールサイズは、元々1.5未満のモジュールサイズで撮影されたバーコードをまず高解像度化により5倍の解像度又はモジュールサイズにした場合に生じる。言い換えれば、その場合にカーネルは元の低解像度のバーコード画像の実際の画素に対応する。カーネルはそれから外れて若干広く又は狭くてもよい。各自の選択でカーネルサイズNの1次元畳み込み層又はカーネルサイズN×1の2次元畳み込み層を用いることができる。
図1の例のネットワークでは初期層に1次元畳み込み層、その後の層に2次元畳み込み層を用いている。アーキテクチャの深さ及び幅は変更することができる。重要なのは、訓練により鮮明化されたグレースケール値推移が生成され、それを用いてコード内容を読み取ることができることである。
【0047】
模範例の畳み込みネットワークはステップ幅1(strides=1)で作動する。それは、好ましくは、出力される鮮明化されたグレースケール値推移は入力されるグレースケール値推移と同じサイズであるべきだからである。パディングをvalid、活性化関数をReLuにすることはテスト実行で有効性が実証されたが、これについては変形も考えられる。
【0048】
畳み込みネットワークの教師あり学習には、グレースケール値推移と、その各々に対するラベル又はグラウンドトゥルース(Ground Truth)としての適切な白黒推移とを含むサンプルが必要である。訓練の間、グレースケール値推移が入力側に提示され、ニューラルネットワークは、出力側での予測乃至はその二値化と訓練データセットのその都度の正しい白黒推移との間の誤差に基づいて重みを相応に適合させることにより学習する。学習すべき白黒推移は理想的であること、即ち、コード内容に応じて各エッジ上で1つの位置を越えただけで最も明るい方から最も暗い方へ及びその逆に変わるものであることが好ましい。この厳格な要求は必ずしも満たされる必要はなく、適切なデコーダにおいて読み取りが成功するような白黒推移であればよい。なお、ここでは白黒推移、即ち色深度が1ビットしかない推移を話題にしている。訓練にとっては、例えば0と255という両極端のグレースケール値又は他の非常に低い及び高いグレースケール値しか取らないようなグレースケール値推移も同じ価値がある。これらをこれ以上は殊更に区別しない。
【0049】
使用に関係する性能については本物のサンプル画像を訓練の基礎にすれば有利である。このようにすれば、畳み込みネットワークが、実際に現れる効果、とりわけそれらの効果の組み合わせに最大限に適合するように訓練される。好ましくは、そのためにモジュール幅の大きいバーコードを撮影することで、コード内容を確実に読み取ることができ、以て正しい白黒推移が現れる若しくはそれをコード内容から再構成できるようにする。そのグレースケール値推移を縮小(ダウンサンプリング)することで、小さいモジュールサイズ(例えばモジュール当たり0.75ピクセル)でバーコードが撮影された状況を人工的且つ事後的に引き起こす。付属する白黒推移の解像度もそれに合わせて低くする。
【0050】
低解像度化の際の不連続化アーチファクト又はサンプリングアーチファクトを減らすため、まず目標解像度に応じた前フィルタを適用した後、そのフィルタリング後の信号を目標解像度でサンプリングすることが好ましい。倍率が整数の場合は代わりに単純な平均計算でも足りる。更に別の方法は重み付き平均化であり、例えば、ステップ幅が3ピクセルで倍率が3の場合、その都度のピクセルの近接領域x1~x5に対して0.5*x1+x2+x3+x4+0.5*x5とする。この操作により不鮮明さが増すが、それは、まさにこのような決定的に重要な状況をカバーする必要がある訓練にとって望ましいものであり得る。
【0051】
その代わりに、又は訓練データの量を増やすために、人工的に生成されたグレースケール値推移とそれに適合した白黒推移を用いることも可能である。このような推移はコード内容から生成することができるが、その際、現実の画像撮影に少なくとも近付けるために、少なくともグレースケール値推移に様々な異化フィルタを適用すべきであろう。なお、このような異化フィルタは既存の訓練データセットから追加の訓練データセットを派生させるのにも適している。
【0052】
畳み込みネットワークはこうして特定のモジュールサイズに合わせて訓練されるから、稼働中に推論の前に、入力されたグレースケール値推移をこの訓練後のモジュールサイズに合わせて伸縮させることが有意義であり得る。ただし、まさに非整数倍で伸縮する場合は、よりによってこの伸縮のせいでアーチファクトが入り込み、適正化されたモジュールサイズの利点が帳消しにならないか慎重に検討すべきである。
【0053】
図6は訓練された畳み込みネットワークの模範的な応用結果を示している。入力信号は高解像度化されたグレースケール値推移32である。
図2及び3で既に説明したように、全ての極値とエッジが明瞭に認識できるわけではなく、利用可能なグレースケール範囲を使い切っている箇所は事実上どこにもない。これに対し、畳み込みネットワークが生成する鮮明化されたグレースケール値推移34は非常に急峻なエッジで以て最小明度と最大明度の間で変化している。鮮明化されたグレースケール値推移34は広い区間にわたって理想的な白黒推移36(正解)と一致している。エッジ及び一部の極値においてはまだ違いが認識できる。見れば分かるように、単に中央のグレースケール値に閾値を設定すれば、それを用いた二値化は理想的な白黒推移36に少なくとも非常に近いものになる。この基準はここでいずれにせよ完成ではなく、コードの読み取り成功への前提となるものである。
【0054】
図7a~dはその結果を別の描き方で示している。
図7aでは高解像度化されたグレースケール値推移32が今度は上下に複写されて一つの画像部分のように描かれている。この画像は不明瞭でコントラストが低い。
図7bは対応する鮮明化されたグレースケール値推移34を描いた図である。白でも黒でもないグレースケール値はもう若干数の移行部にしか存在しない。
図7cは対応する二値化の結果を示している。今度は前記グレースケール値を白又は黒に分類することによりそれらの値を消し去っている。
図7dは対応する理想的な白黒推移36を描いた図である。
図7cと7dを比較すると、やや細いバーがまだ若干残っている。しかし、いずれにせよバー及び隙間のそのような幅の違いがモジュールサイズの範囲内に明らかに収まっていればデコーダがそれをうまく処理できるし、そうでなくても複数回の試行やエラー訂正等により処理できる。
【0055】
別の実施形態では、非線形フィルタを機械学習の方法の代わりに古典的な方法として実装することができる。ここではリチャードソン・ルーシー・デコンボリューションを例としてそれを説明する。これは、撮影の際に生じた不鮮明さを信号から除去すること(ぼけ修正)を目的とした反復アルゴリズムである。この方法は、点広がり関数を基礎に置き、不鮮明さが光学系の中でこの点広がり関数との畳み込みにより生じているものと仮定する。そうするとデコンボリューションによりその不鮮明さを適切に除去することができる。
【0056】
好ましくはまず、入力側の高解像度化されたグレースケール値推移32がそもそも不鮮明であるかどうか見積もる。不鮮明であればリチャードソン・ルーシーの反復処理を好ましくは前もって決められた回数だけ実行する。そうすれば、後は鮮明化されたグレースケール値推移34が手元にある。点広がり関数として例えばガウス形の不鮮明さ関数を仮定する。不鮮明さ関数の幅は事前に見積もった不鮮明さに応じて選択することができる。反復回数は、利用可能な計算時間、所望の鮮明さ、及び過剰修正により生じ得るアーチファクトを比較検討して選ぶ。上に挙げた点広がり関数は経験的に実証されている。回数及び適切な点広がり関数は変化させたり、結果に基づいて選択したりできる。
【0057】
図8も
図6と同様に作成されたものであり、高解像度化されたグレースケール値推移(今度は機械学習の方法ではなく古典的な方法、具体的には本例では畳み込みネットワークの代わりにリチャードソン・ルーシー・デコンボリューション、を用いて鮮明化されたグレースケール値推移34)と理想的な白黒推移36との比較結果を示している。この実施形態でも非線形フィルタにより明らかな改善が見られるものの、ここに示した例では畳み込みネットワークの方がやや性能が高いことが分かる。もっとも二値化の後は重大な落ち込みはない。
【0058】
図9a~dは
図7a~dと同様に結果を再度示したものであり、
図9aは高解像度化されたグレースケール値推移32、
図9bはリチャードソン・ルーシー・デコンボリューションで鮮明化されたグレースケール値推移34、
図9cは対応する二値化の結果、
図9dは理想的な白黒推移36である。
【0059】
図5から
図9a~dを参照して具体的に説明した2つの実施形態は高解像度化されたグレースケール値推移32を入力量とすることを基礎にしている。既に述べたが、高解像度化と鮮明化という2つのステップは一緒に実行することも可能である。その場合は特に、
図4の左図に相当する複数の元のグレースケール値推移30を含む画像を2次元の入力量として受け取り(その複数の元のグレースケール値推移は任意選択で更に行方向に互いに揃えられていてもよい)、その後、2次元畳み込みにより、高解像度化されたグレースケール値推移32を明示的に出力することなく、鮮明化されたグレースケール値推移34を出力する畳み込みネットワークを訓練する。任意選択でこの畳み込みネットワークが同時に二値化まで学習することも可能であるが、このステップは事前処理のおかげで非常に簡単になるため、古典的な処理の方が有利である可能性がある。
【外国語明細書】