(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022134482
(43)【公開日】2022-09-15
(54)【発明の名称】光学的情報読取装置
(51)【国際特許分類】
G06K 7/14 20060101AFI20220908BHJP
G06K 19/06 20060101ALI20220908BHJP
G06K 7/10 20060101ALI20220908BHJP
G06T 3/40 20060101ALI20220908BHJP
【FI】
G06K7/14 069
G06K19/06 121
G06K19/06 037
G06K7/14 017
G06K7/14 082
G06K7/10 456
G06T3/40 725
【審査請求】未請求
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021033621
(22)【出願日】2021-03-03
(71)【出願人】
【識別番号】000129253
【氏名又は名称】株式会社キーエンス
(74)【代理人】
【識別番号】110001427
【氏名又は名称】弁理士法人前田特許事務所
(72)【発明者】
【氏名】江渕 文人
(72)【発明者】
【氏名】山田 郁生
【テーマコード(参考)】
5B057
【Fターム(参考)】
5B057CA08
5B057CA12
5B057CA16
5B057CD05
5B057CE02
5B057CE05
5B057CE06
5B057CH09
5B057DA16
5B057DB02
5B057DB09
5B057DC40
(57)【要約】
【課題】デコード処理ができなくなるほどPPCが小さい場合に超解像処理をニューラルネットワークによって自動的に適用できるようにしてデコード処理が可能なPCCの下限を引き下げる。
【解決手段】光学的情報読取装置は、カメラにより生成された読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像を出力するニューラルネットワークの構造及びパラメータを記憶する記憶部と、記憶部に記憶された構造及びパラメータで構成されたニューラルネットワークにカメラにより生成された読取画像を入力し、入力された読取画像のPPC値を拡大した拡大画像を生成し、当該拡大画像にデコード処理を実行するプロセッサとを備える。
【選択図】
図19
【特許請求の範囲】
【請求項1】
ワークに付されたコードを読み取る光学的情報読取装置において、
コードを撮影し、読取画像を生成するカメラと、
前記カメラにより生成された読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像を出力するニューラルネットワークの構造及びパラメータを記憶する記憶部と、
前記記憶部に記憶された構造及びパラメータで構成されたニューラルネットワークに前記カメラにより生成された読取画像を入力し、入力された読取画像のPPC値を拡大した拡大画像を生成し、当該拡大画像にデコード処理を実行するプロセッサとを備える光学的情報読取装置。
【請求項2】
請求項1に記載の光学的情報読取装置において、
前記カメラにより生成された読取画像に含まれるコードのPPC値を取得するPPC値取得部を備え、
前記プロセッサは、前記PPC値取得部で取得されたPPC値が所定値以下の場合に前記拡大画像を生成する一方、前記PPC値取得部で取得されたPPC値が前記所定値を超える場合に前記拡大画像を非生成とする光学的情報読取装置。
【請求項3】
請求項2に記載の光学的情報読取装置において、
前記PPC値取得部は、前記光学的情報読取装置の設定時に前記カメラにより生成された読取画像を取得し、取得した読取画像に含まれるコードのPPC値を取得する光学的情報読取装置。
【請求項4】
請求項3に記載の光学的情報読取装置において、
前記プロセッサは、前記光学的情報読取装置の設定時に前記カメラにより生成された読取画像に含まれるコードのデコード処理に失敗した場合に前記拡大画像を生成し、当該拡大画像にデコード処理を実行する光学的情報読取装置。
【請求項5】
請求項1から4のいずれか1つに記載の光学的情報読取装置において、
前記プロセッサは、カメラにより生成された読取画像をデコードする第1デコード処理と前記拡大画像をデコードする第2デコード処理とを実行するデコード処理部を有している光学的情報読取装置。
【請求項6】
請求項5に記載の光学的情報読取装置において、
前記プロセッサは、前記第1デコード処理と前記第2デコード処理とを別スレッドで並列的に実行するコアを有している光学的情報読取装置。
【請求項7】
請求項5に記載の光学的情報読取装置において、
前記デコード処理部は、前記第1デコード処理と前記第2デコード処理とを異なるコアで実行可能なマルチコアで構成されている光学的情報読取装置。
【請求項8】
請求項1から7のいずれか1つに記載の光学的情報読取装置において、
前記カメラにより生成された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する領域抽出部を備え、
前記プロセッサは、前記領域抽出部により抽出されたコード候補領域に対応する部分画像を前記ニューラルネットワークに入力して前記拡大画像を生成する光学的情報読取装置。
【請求項9】
請求項8に記載の光学的情報読取装置において、
前記領域抽出部は、前記カメラにより生成された読取画像に対して、コードを特定するための情報に基づいてコードを探索し、探索されたコードを含む領域を前記コード候補領域として抽出する光学的情報読取装置。
【請求項10】
請求項9に記載の光学的情報読取装置において、
前記カメラの撮影視野範囲内へ向けて環境光とは異なる色の可視光を照射して目印を形成するための光照射部を備え、
前記領域抽出部は、前記カメラにより生成された読取画像の中から、前記光照射部により形成された目印に対応する部分を特定し、当該特定された部分を前記コード候補領域として抽出する光学的情報読取装置。
【請求項11】
請求項1から10のいずれか1つに記載の光学的情報読取装置において、
前記カメラにより生成された読取画像を前記ニューラルネットワークに入力する前に、当該読取画像に対してノイズ除去フィルタを実行するフィルタ処理部を更に備える光学的情報読取装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、情報を光学的に読み取る光学的情報読取装置に関する。
【背景技術】
【0002】
近年、たとえば物品の流通経路を製造段階から消費段階あるいは廃棄段階まで追跡可能にする、いわゆるトレーサビリティが重要視されてきており、このトレーサビリティを目的としたコードリーダが普及してきている。また、トレーサビリティ以外にもコードリーダは様々な分野で利用されている。
【0003】
一般的に、コードリーダは、ワークに付されたバーコードや二次元コード等のコードをカメラによって撮影し、得られた画像に含まれるコードを画像処理によって切り出して二値化し、デコード処理して情報を読み取ることができるように構成されており、情報を光学的に読み取る装置であることから光学的情報読取装置とも呼ばれている。
【0004】
この種の光学的情報読取装置としては、例えば特許文献1に開示されているように、ロボットの視覚センサにより取得したコードの画像と、理想的なコードの画像との関係を示すモデル構造を学習する機械学習装置を備えたものが知られている。特許文献1には、運用時に視覚センサにより取得したコードの画像に、機械学習装置による学習結果を適用することで、読み取りに適した画像に修復することが記載されている。
【先行技術文献】
【特許文献】
【0005】
【発明の概要】
【発明が解決しようとする課題】
【0006】
ところで、コードをカメラで撮影して得られた読取画像では、コードを構成する各モジュールのピクセル数(PPC)により、デコード処理が可能な限界が存在する。安定的にデコード処理を成功させるためには、PPCが一定以上であることが求められ、PPCがある数値を下回ると全くデコード処理ができなくなる場合がある。
【0007】
ここで、PPC、即ち読取画像の解像度を上げるための技術としては様々な超解像処理が知られている。光学的情報読取装置への適用例としては、例えば複数のフレーム画像を使った超解像技術が存在しているが、複数のフレーム画像を使った超解像処理は複数フレームを撮影する必要があり処理に時間がかかることや、フレーム画像間の位置合わせが難しいという問題があった。
【0008】
本発明は、かかる点に鑑みてなされたものであり、その目的とするところは、デコード処理ができなくなるほどPPCが小さい場合に超解像処理をニューラルネットワークによって自動的に適用できるようにしてデコード処理が可能なPPCの下限を引き下げることにある。
【課題を解決するための手段】
【0009】
上記目的を達成するために、本開示の第1の側面は、ワークに付されたコードを読み取る光学的情報読取装置を前提とすることができる。光学的情報読取装置は、コードを撮影し、読取画像を生成するカメラと、前記カメラにより生成された読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像を出力するニューラルネットワークの構造及びパラメータを記憶する記憶部と、プロセッサとを備えている。プロセッサは、前記記憶部に記憶された構造及びパラメータで構成されたニューラルネットワークに前記カメラにより生成された読取画像を入力し、入力された読取画像のPPC値を拡大した拡大画像を生成し、当該拡大画像にデコード処理を実行可能に構成されている。
【0010】
すなわち、例えばワークからカメラが離れれば離れるほどコードが小さく撮影されるのでPPCが読取限界以下となり、また、例えば手持ち式の光学的情報読取装置の光学系では距離が離れていなくてもモジュールが小さくてPPCが読取限界以下となることがある。このような読取画像をニューラルネットワークに入力すると、入力された読取画像のPPC値を拡大した拡大画像をプロセッサが生成する。これにより、読取限界よりも大きなPPC値を持った拡大画像にデコード処理を実行できる。
【0011】
本開示の第2の側面では、光学的情報読取装置が、前記カメラにより生成された読取画像に含まれるコードのPPC値を取得するPPC値取得部を備えている。前記プロセッサは、前記PPC値取得部で取得されたPPC値が所定値以下の場合に前記拡大画像を生成する一方、前記PPC値取得部で取得されたPPC値が前記所定値を超える場合に前記拡大画像を非生成とすることができる。
【0012】
この構成によれば、PPC値が所定値以下、例えば読取限界以下である場合には拡大画像を生成することで、デコード処理が可能になる。一方、PPC値が読取限界を超えている場合には拡大画像を生成することなく、デコード処理が可能であるので、この場合にはニューラルネットワークによる処理が行われずにデコード結果を早期に出力できる。
【0013】
本開示の第3の側面では、前記PPC値取得部が、前記光学的情報読取装置の設定時に前記カメラにより生成された読取画像を取得し、取得した読取画像に含まれるコードのPPC値を取得することができる。
【0014】
この構成によれば、光学的情報読取装置の撮像条件等の設定を行う設定時にカメラにより生成された読取画像を取得し、その取得した読取画像に含まれるコードのPPC値を取得することができるので、拡大画像の生成が必要か否かを設定時に判断し、必要に応じて運用時に拡大画像の自動生成が可能になる。
【0015】
本開示の第4の側面では、前記プロセッサが、前記光学的情報読取装置の設定時に前記カメラにより生成された読取画像に含まれるコードのデコード処理に失敗した場合に前記拡大画像を生成し、当該拡大画像にデコード処理を実行することができる。
【0016】
すなわち、光学的情報読取装置の撮像条件等の設定を行うためには、デコード処理を成功させる必要があり、設定時に使用する読取画像のコードのPPCが読取限界以下では、設定が行えない可能性がある。この場合にプロセッサが拡大画像を生成することで、デコード処理が可能になり、その結果、各種設定も行えるようになる。
【0017】
本開示の第5の側面では、前記プロセッサが、カメラにより生成された読取画像をデコードする第1デコード処理と前記拡大画像をデコードする第2デコード処理とを実行するデコード処理部を有している構成とすることができる。
【0018】
この構成によれば、例えば第1デコード処理で読取画像のデコード処理が失敗した場合には、第2デコード処理で拡大画像のデコード処理を実行することができる。第1デコード処理と第2デコード処理とは並列的に実行してもよいし、一方を先に実行した後、他方を実行してもよい。
【0019】
本開示の第6の側面では、前記プロセッサが、前記第1デコード処理と前記第2デコード処理とを別スレッドで並列的に実行するコアを有していてもよい。
【0020】
本開示の第7の側面では、前記デコード処理部が、前記第1デコード処理と前記第2デコード処理とを異なるコアで実行可能なマルチコアで構成されていてもよい。この構成によれば、第1デコード処理を実行するコアと、第2デコード処理を実行するコアとが別のコアになるので、第1デコード処理と第2デコード処理と並列的に実行でき、処理時間が短縮される。
【0021】
本開示の第8の側面では、光学的情報読取装置が、前記カメラにより生成された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する領域抽出部を備えている。前記プロセッサは、前記領域抽出部により抽出されたコード候補領域に対応する部分画像を前記ニューラルネットワークに入力して前記拡大画像を生成することができる。
【0022】
この構成によれば、光学的情報読取装置の運用時に、カメラにより生成された読取画像の中からコード候補領域が抽出されると、そのコード候補領域に対応する部分画像がニューラルネットワークに入力されて拡大画像が生成される。この場合、読取画像の全体にコードが存在しているケースは殆ど無いので、コード候補領域に対応する部分画像のサイズは、読取画像のサイズよりも小さくなる。これにより、ニューラルネットワークに入力する画像のサイズが小さくなるので、プロセッサの演算負荷が軽くなり、ひいては処理速度の高速化が実現される。
【0023】
本開示の第9の側面では、前記領域抽出部が、前記カメラにより生成された読取画像に対して、コードを特定するための情報に基づいてコードを探索し、探索されたコードを含む領域を前記コード候補領域として抽出することができる。
【0024】
この構成によれば、ユーザがコード候補領域を抽出するための操作を行わなくても、光学的情報読取装置が自動的にコード候補領域を抽出するので、ユーザの負担を軽減できる。
【0025】
本開示の第10の側面では、光学的情報読取装置が、前記カメラの撮影視野範囲内へ向けて環境光とは異なる色の可視光を照射して目印を形成するための光照射部を備えている。前記領域抽出部は、前記カメラにより生成された読取画像の中から、前記光照射部により形成された目印に対応する部分を特定し、当該特定された部分を前記コード候補領域として抽出することができる。
【0026】
この構成によれば、カメラの撮影視野範囲内に可視光によって目印が形成される。例えば、運用時にユーザが把持するための把持部を有する手持ち式のハウジングを備えている光学的情報読取装置では、目印をコードに合わせる操作をユーザが行うことで、コードが確実に含まれる範囲をカメラで撮影できる。したがって、カメラにより生成された読取画像のうち、目印に対応する部分にはコードが存在する可能性が高い。この目印に対応する部分をコード候補領域として抽出することで、抽出された領域にコードが含まれる可能性がより一層高まり、ひいてはデコード処理の成功率を高めることができる。
【0027】
本開示の第11の側面では、学的情報読取装置が、前記カメラにより生成された読取画像を前記ニューラルネットワークに入力する前に、当該読取画像に対してノイズ除去フィルタを実行するフィルタ処理部を更に備えていてもよい。
【0028】
この構成によれば、ニューラルネットワークによる拡大画像の生成の際に悪影響となる要因を排除することができる。
【発明の効果】
【0029】
以上説明したように、読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像を出力するニューラルネットワークを利用することで、読取が可能なPCCの下限を引き下げることができるので、例えば遠距離で撮影されたコードやモジュールサイズの小さなコードのデコード処理が可能になる。
【図面の簡単な説明】
【0030】
【
図1】定置式の光学的情報読取装置の運用時を説明する図である。
【
図2】定置式の光学的情報読取装置の斜視図である。
【
図4】手持ち式の光学的情報読取装置の斜視図である。
【
図5】エイマーの光軸とカメラの光軸との位置関係を示す模式図である。
【
図6】光学的情報読取装置及びワークの距離と、エイマー光及び視野との位置関係を示す図である。
【
図7】プロセッサによって構成される各部を説明する図である。
【
図8】エイマー光の位置情報を用いてコード候補領域を抽出する場合を説明する図である。
【
図10】ニューラルネットワークの学習時の基本手順の一例を示すフローチャートである。
【
図11】不良画像と理想画像のペアを示す図である。
【
図12】画像変換に用いられる畳み込みニューラルネットワークの概念図である。
【
図13】光学的情報読取装置の設定時に行われるチューニング工程の手順の一例を示すフローチャートである。
【
図14】縮小率及び拡大率決定前のデコード処理手順の一例を示すフローチャートである。
【
図15】縮小率及び拡大率決定後のデコード処理手順の一例を示すフローチャートである。
【
図16】カメラで生成された読取画像の例と、画像処理フィルタ実行後の画像の例を示す図である。
【
図17】縮小処理後の画像の例と、コード領域抽出後の画像の例を示す図である。
【
図18】ニューラルネットワークによって読取画像に対して推論処理を実行した例を示す図である。
【
図19】超解像処理を含んだ運用時の第1の例を示すフローチャートである。
【
図20】読取画像の中からコード候補領域を抽出し、フィルタ処理を実行した画像例を示す図である。
【
図21】画像フィルタ処理後の部分画像から拡大画像を生成した例を示す図である。
【
図22】超解像処理を含んだ運用時の第2の例を示すフローチャートである。
【
図23】超解像処理を含んだ運用時の第3の例を示すフローチャートである。
【
図24】超解像処理を含んだ運用時の第4の例を示すフローチャートである。
【
図25】超解像処理の実行と非実行との区分を示す
図5相当図である。
【
図26】第1デコード処理で読み取りが成功した場合のタスクシーケンス図である。
【
図27】第2デコード処理で読み取りが成功した場合のタスクシーケンス図である。
【
図28】第1デコード処理と第2デコード処理で読み取りが成功した場合のタスクシーケンス図である。
【
図29】第2デコード処理で2回読み取りが成功した場合のタスクシーケンス図である。
【発明を実施するための形態】
【0031】
以下、本発明の実施形態を図面に基づいて詳細に説明する。尚、以下の好ましい実施形態の説明は、本質的に例示に過ぎず、本発明、その適用物或いはその用途を制限することを意図するものではない。
【0032】
(定置式の光学的情報読取装置)
図1は、本発明の実施形態に係る定置式の光学的情報読取装置1の運用時を模式的に示す図である。この例では、複数のワークWが搬送用ベルトコンベアBの上面に載置された状態で
図1における矢印Yの方向へ搬送されており、そのワークWから上方へ離れた所に、実施形態に係る光学的情報読取装置1が設置されている。光学的情報読取装置1は、ワークWに付されているコードを撮影し、撮影された画像に含まれるコードをデコード処理して情報を読み取ることができるように構成されたコードリーダである。
図1に示す例では、光学的情報読取装置1が定置式の場合である。この定置式の光学的情報読取装置1の運用時には、光学的情報読取装置1が動かないようにブラケット等(図示せず)に固定して使用する。尚、定置式の光学的情報読取装置1をロボット(図示せず)が把持した状態で使用してもよい。また、静止状態にあるワークWのコードを光学的情報読取装置1によって読み取るようにしてもよい。定置式の光学的情報読取装置1の運用時とは、搬送用ベルトコンベアBによって搬送されるワークWのコードを順に読み取る動作を行っている時である。
【0033】
また、各ワークWの外面にはコードが付されている。コードには、バーコード及び二次元コードの両方が含まれる。二次元コードとしては、たとえば、QRコード(登録商標)、マイクロQRコード、データマトリクス(Data matrix;Data code)、ベリコード(Veri code)、アズテックコード(Aztec code)、PDF417、マキシコード(Maxi code)などがある。二次元コードにはスタック型とマトリクス型があるが、本発明はいずれの二次元コードに対しても適用できる。コードは、ワークWに直接印刷あるいは刻印することによって付してもよいし、ラベルに印刷した後にワークWに貼付することによって付してもよく、その手段、方法は問わない。
【0034】
光学的情報読取装置1は、コンピュータ100及びプログラマブル・ロジック・コントローラ(PLC)101にそれぞれ信号線100a、101aによって有線接続されているが、これに限らず、光学的情報読取装置1、コンピュータ100及びPLC101に通信モジュールを内蔵し、光学的情報読取装置1と、コンピュータ100及びPLC101とを無線接続するようにしてもよい。PLC101は、搬送用ベルトコンベアB及び光学的情報読取装置1をシーケンス制御するための制御装置であり、汎用のPLCを利用することができる。コンピュータ100は、汎用あるいは専用の電子計算機や携帯型端末等を利用することができる。
【0035】
また、光学的情報読取装置1は、その運用時において、PLC101から信号線101aを介して、コード読取の開始タイミングを規定する読取開始トリガ信号を受信する。そして、光学的情報読取装置1は、この読取開始トリガ信号に基づいてコードの撮像やデコードを行う。その後、デコードした結果は、信号線101aを介してPLC101へ送信される。このように、光学的情報読取装置1の運用時には、光学的情報読取装置1とPLC101等の外部制御装置との間で、信号線101aを介して読取開始トリガ信号の入力とデコード結果の出力が繰り返し行われる。なお、読取開始トリガ信号の入力やデコード結果の出力は、上述したように、光学的情報読取装置1とPLC101との間の信号線101aを介して行ってもよいし、それ以外の図示しない信号線を介して行ってもよい。例えば、ワークWの到着を検知するためのセンサと光学的情報読取装置1とを直接的に接続し、そのセンサから光学的情報読取装置1へ読取開始トリガ信号を入力するようにしてもよい。
【0036】
図2に示すように、光学的情報読取装置1は、箱状のハウジング2と、偏光フィルタアタッチメント3と、照明部4と、カメラ5と、表示部6と、電源コネクタ7と、信号線コネクタ8とが設けられている。さらに、ハウジング2には、インジケータ9と、エイマー光照射部(光照射部)10と、操作ボタン11、12とが設けられており、インジケータ9、エイマー光照射部10及び操作ボタン11、12も光学的情報読取装置1の構成要素である。
【0037】
ハウジング2は、所定方向に長い形状となっているが、ハウジング2の形状は図示した形状に限られるものではない。ハウジング2の前側の外面には、偏光フィルタアタッチメント3が脱着可能に取り付けられている。このハウジング2の内部に、照明部4、カメラ5、エイマー光照射部10、プロセッサ20、記憶装置30、ROM40、RAM41等が収容されている。プロセッサ20、記憶装置30、ROM40及びRAM41も光学的情報読取装置1の構成要素である。
【0038】
ハウジング2の前側には、照明部4が設けられている。照明部4は、光学的情報読取装置1の前方へ向けて光を照射することによってワークWの少なくともコードを照明するための部分である。
図3にも示すように、照明部4は、複数の発光ダイオード((LED:Light Emission Diode)からなる第1照明部4aと、複数の発光ダイオードからなる第2照明部4bと、第1照明部4a及び第2照明部4bを駆動するLEDドライバ等からなる照明駆動部4cとを備えている。第1照明部4a及び第2照明部4bは、照明駆動部4cにより個別に駆動され、別々に点灯及び消灯させることができるようになっている。照明駆動部4cはプロセッサ20に接続されており、プロセッサ20によって照明駆動部4cが制御されるようになっている。尚、第1照明部4a及び第2照明部4bのうち、一方を省略してもよい。
【0039】
図2に示すように、ハウジング2の前側の中央部には、カメラ5が設けられている。カメラ5の光軸方向は、照明部4による光の照射方向と略一致している。カメラ5は、コードを撮影し、読取画像を生成する部分である。
図3に示すように、カメラ5は、ワークWに付されていて上記照明部4によって照明されているコードからの反射光を受光する撮像素子5aと、レンズ等を有する光学系5bと、AFモジュール(オートフォーカスモジュール)5cとを備えている。光学系5bには、ワークWのコードが付された部分から反射した光が入射するようになっており、入射した光は撮像素子5aへ向けて出射されて撮像素子5aの撮像面上で結像する。
【0040】
撮像素子5aは、光学系5bを通して得られたコードの画像を電気信号に変換するCCD(charge-coupled device)やCMOS(complementary metal oxide semiconductor)等の受光素子からなるイメージセンサである。撮像素子5aはプロセッサ20に接続されていて、撮像素子5aによって変換された電気信号は、読取画像のデータとしてプロセッサ20に入力される。また、AFモジュール5cは、光学系5bを構成するレンズのうち、合焦用レンズの位置や屈折率を変更することによってピント合わせを行う機構である。AFモジュール5cもプロセッサ20に接続され、プロセッサ20により制御される。
【0041】
図2に示すように、ハウジング2の側面には表示部6が設けられている。表示部6は、たとえば有機ELディスプレイや液晶ディスプレイ等からなるものである。表示部6は、プロセッサ20に接続され、たとえば撮像部5で撮像されたコード、コードのデコード結果である文字列、読み取り成功率、マッチングレベル等を表示させることができる。読み取り成功率とは、複数回読み取り処理を実行したときの平均読み取り成功率である。マッチングレベルとは、デコードが成功したコードの読み取りのしやすさを示す読取余裕度である。これはデコード時に発生した誤り訂正の数等から求めることができ、たとえば数値で表すことができる。誤り訂正が少なければ少ないほどマッチングレベル(読取余裕度)が高くなり、一方、誤り訂正が多ければ多いほどマッチングレベル(読取余裕度)が低くなる。
【0042】
電源コネクタ7には、光学的情報読取装置1に外部から電源を供給するための電源ケーブル(図示せず)が接続される。また、信号線コネクタ8には、コンピュータ100及びPLC101と通信を行うための信号線100a、101a等が接続される。信号線コネクタ8は、例えばEthernetコネクタ、RS232C等のシリアル通信用コネクタ、USBコネクタ等で構成することができる。
【0043】
ハウジング2には、インジケータ9が設けられている。インジケータ9は、プロセッサ20に接続されていて、たとえば発光ダイオード等の発光体で構成することができる。光学的情報読取装置1の作動状態をインジケータ9の点灯状態によって外部に報知することができる。
【0044】
ハウジング2の前側には、カメラ5を挟むように一対のエイマー光照射部10が設けられている。
図3に示すように、エイマー光照射部10は、発光ダイオード等からなるエイマー10aと、エイマー10aを駆動するエイマー駆動部10bと、エイマー10aから照射された光が入射するエイマーレンズ10cとを備えている。エイマー10aは、光学的情報読取装置1の前方へ向けて光(エイマー光)を照射することによってカメラ5の撮影範囲や視野中心、照明部4の光軸の目安等を示すためのものであり、光を照射する素子を備えている。具体的には、エイマー10aは、カメラ5の撮影視野範囲内へ向けて環境光とは異なる色(例えば赤色や緑色等)の可視光を照射し、その可視光が照射された面に肉眼で視認可能な目印を形成する。目印は各種図形や記号、文字等であってもよい。ユーザは、エイマー10aから照射される光を参照して光学的情報読取装置1を設置することもできる。
【0045】
図2に示すように、ハウジング2の側面には、光学的情報読取装置1の設定時等に使用する操作ボタン11、12が設けられている。操作ボタン11、12は、例えばセレクトボタンやエンターボタン等を含んでいる。操作ボタン11、12以外にも、例えばタッチパネル式の操作手段が設けられていてもよい。操作ボタン11、12はプロセッサ20に接続されていて、プロセッサ20は操作ボタン11、12の操作状態を検出可能になっている。操作ボタン11、12の操作により、表示部6に表示された複数の選択肢の中から1つを選択することや、選択した結果を確定することができる。
【0046】
(手持ち式の光学的情報読取装置)
上述した例では、光学的情報読取装置1が定置式である場合を示したが、本発明は定置式の光学的情報読取装置1以外にも適用可能である。
図4は、手持ち式の光学的情報読取装置1Aを示すものであり、この図に示すような手持ち式の光学的情報読取装置1Aにも本発明を適用することができる。
【0047】
手持ち式の光学的情報読取装置1Aのハウジング2Aは、上下方向に長い形状とされている。尚、光学的情報読取装置1Aの使用時の向きは図示した向きに限定されるものではなく、様々な向きで使用可能であるが、説明の便宜上、光学的情報読取装置1Aの上下方向を特定している。
【0048】
ハウジング2Aの上側部分には、表示部6Aが設けられている。表示部6Aは、定置式の光学的情報読取装置1の表示部6と同様に構成されている。ハウジング2Aの下側部分は、運用時にユーザが把持するための把持部2Bである。把持部2Bは、一般的な成人が片手で握るようにして持つことが可能な部分であり、形状や大きさは自由に設定できる。この把持部2Bを持つことで、光学的情報読取装置1Aを携帯して移動することができる。つまり、この光学的情報読取装置1Aは、携帯型端末装置であり、例えばハンディターミナルと呼ぶこともできるものである。
【0049】
定置式の光学的情報読取装置1と同様に、手持ち式のハウジング2Aにも、照明部、カメラ、エイマー光照射部、プロセッサ、記憶部、ROM、RAM等(図示せず)が収容されている。照明部の光軸、カメラの光軸、エイマー光照射部の光軸は、ハウジング2Aの上端近傍から斜め上方に向いている。また、手持ち式のハウジング2Aには、ブザー(図示せず)も設けられている。
【0050】
把持部2Bやその近傍には、複数の操作ボタン11A及びトリガーキー11Bが設けられている。操作ボタン11Aは、定置式の光学的情報読取装置1の操作ボタン11等と同様である。ユーザが光学読取装置1Aの先端(上端)をワークWに向けてトリガーキー11Bを押下すれば、光学読取装置1Aの先端からエイマー光が照射され、エイマー光が照射された面に肉眼で視認可能な目印を形成する。ユーザは、ワークWの表面で反射されるエイマー光(目印)を目視しながら光学読取装置1Aの向きを調整し、エイマー光を読取対象のコードに合わせれば、コードの読み取り及びデコード処理が自動的に行われる。読み取りが完了すると、ブザーから完了報知音が発せられる。
【0051】
手持ち式の光学的情報読取装置1Aの使用例として、物流倉庫内におけるピッキング作業に手持ち式の光学的情報読取装置1Aを用いる例がある。例えば、受注した商品を物流倉庫から発送する場合、商品倉庫内の商品棚から必要な商品がピッキングされる。このピッキング作業は、コードが記載された受注伝票を持ったユーザが、商品棚まで移動した後、受注伝票のコードと、商品又は商品棚に付されたコードとを照合しながら行われる。この場合、受注伝票のコードと、商品又は商品棚に付されたコードとを交互に手持ち式の光学的情報読取装置1Aで読み取る。
【0052】
図5は、手持ち式の光学的情報読取装置1Aのエイマー10の光軸と、カメラ5の光軸との関係を簡易的に示す図である。この図に示すように、エイマー10の光軸とカメラ5の光軸とは異なるため、目印となるエイマー光の中心はカメラ5の視野の中心から大きく外れることがある。例えば、
図6に「近距離」、「中距離」及び「遠距離」として示すように、手持ち式の光学的情報読取装置1AとワークWとの距離に応じて、エイマー光10dの中心とカメラ5の視野5dの中心との相対的な位置が変化する。この
図6では、エイマー光10dが+字形状である場合について示しているが、これに限られるものではない。
【0053】
図4に示すように、手持ち式の光学的情報読取装置1Aでは、複数のカメラ5、5Aを設けることができる。一方のカメラ5は近距離を撮影するための光学系を備えたカメラとし、他方のカメラ5Aは一方のカメラ5よりも遠距離を撮影するための光学系を備えたカメラとすることができる。カメラ5、5Aはオートフォーカス機能を有しているので、近距離から遠距離までピントの合った読取画像を生成することができる。
【0054】
複数のカメラ5、5Aを設ける場合、近距離用のカメラ5をモノクロカメラとし、遠距離用のカメラ5Aをカラーカメラとすることができる。
【0055】
(プロセッサの構成)
以下の説明は、定置式の光学的情報読取装置1と、手持ち式の光学的情報読取装置1Aとで共通しており、特に断りがなければ、いずれの装置1、1Aでも適用できる。
図3に示すように、プロセッサ20は、中央演算処理装置であるコアを複数有するマルチコアプロセッサで構成されている。具体的には、プロセッサ20は、第1汎用コア21、第2汎用コア22、第3汎用コア23、第4汎用コア24及びニューラルネットワークによる推論処理専用の専用コア25を備えている。第1~第4汎用コア21~24及び専用コア25は、いわゆるSystem-on-a-chip(SoC,SOC)であり、同一の基板上に実装されている。尚、第1~第4汎用コア21~24及び専用コア25は、SoCでなくてもよく、その場合は同じ基板上に実装されなくともよい形態となるが、その場合も本発明の範囲に含まれる。この実施形態では、汎用コアの数が4つの場合について説明するが、これに限らず、汎用コアは1つであってもよいし、2以上の任意の数(例えば6コア、8コア等)であってもよい。
【0056】
第1~第4汎用コア21~24及び専用コア25には、同一のメモリとしてのRAM41が接続されており、第1~第4汎用コア21~24及び専用コア25のいずれもが同一のRAM41にアクセス可能となっている。また、プロセッサ20には、同一のメモリとしてのROM40が接続されており、第1~第4汎用コア21~24及び専用コア25のいずれもが同一のROM40にもアクセス可能となっている。
【0057】
第1~第4汎用コア21~24は、いわゆる汎用プロセッサであり、例えばAF制御、照明制御、カメラ制御、コード候補領域を抽出する抽出処理、読取画像に対するデコード処理、読取画像に対する各種フィルタ処理等を実行する部分である。第1~第4汎用コア21~24の具体的な処理例については後述する。
【0058】
一方、専用コア25は、ニューラルネットワークを利用して、読取画像に対して超解像処理を実行したり、読取画像に対応する理想画像を生成する推論処理を実行するためのコアであり、ニューラルネットワークによる処理に必要な積和演算を超高速に実行することに特化したものである。専用コア25は、例えばICやFPGA等を含む。尚、ニューラルネットワークによる学習結果を適用して推論処理することで、読取画像をデコードに適した画像に修復することができるので、推論処理によって理想画像を生成することを読取画像の修復とも呼ぶ。この場合、専用コア25は、ニューラルネットワークを利用して読取画像の修復を試行する部分である。
【0059】
図7に示すように、プロセッサ20により、AF制御部20a、撮像制御部20b、フィルタ処理部20c、チューニング実行部20d、デコード処理部20f、抽出部20g、縮小部20h、拡大部20i、推論処理部20j及び超解像処理部20kが構成される。AF制御部20a、撮像制御部20b、フィルタ処理部20c、チューニング実行部20d、デコード処理部20f、抽出部20g、縮小部20h及び拡大部20iは、第1~第4汎用コア21~24の演算処理によって構成される部分である。一方、推論処理部20j及び超解像処理部20kは、専用コア25によって構成される部分である。
【0060】
(AF制御部の構成)
AF制御部20aは、
図3に示すAFモジュール5cを制御するユニットであり、従来から周知のコントラストAFや位相差AFによって光学系5bのピント合わせを行うことができるように構成されている。AF制御部20aは、第1~第4汎用コア21~24のうち、デコード処理部20f及び抽出部20gとなるコアで構成してもよいし、デコード処理部20f及び抽出部20gとなるコア以外のコアで構成してもよい。
【0061】
(撮像制御部の構成)
撮像制御部20bは、カメラ5のゲインを調整したり、照明部4の光量を制御したり、撮像素子5aの露光時間(シャッタースピード)を制御するユニットである。ここで、カメラ5のゲインとは、撮像素子5aから出力された画像の明るさをデジタル画像処理によって増幅する際の増幅率(倍率とも呼ばれる)のことである。照明部4の光量については、第1照明部4aと第2照明部4bを別々に制御して変更することができる。ゲイン、照明部4の光量及び露光時間は、カメラ5の撮像条件である。撮像制御部20bは、第1~第4汎用コア21~24のうち、デコード処理部20f及び抽出部20gとなるコアで構成してもよいし、デコード処理部20f及び抽出部20gとなるコア以外のコアで構成してもよい。尚、上記AF制御部20aと撮像制御部20bとは、同じコアで構成してもよいし、別のコアで構成してもよい。
【0062】
(フィルタ処理部の構成)
フィルタ処理部20cは、読取画像に対して画像処理フィルタを実行する部分であり、デコード処理部20f及び抽出部20gとなるコアで構成してもよいし、デコード処理部20f及び抽出部20gとなるコア以外のコアで構成してもよい。フィルタ処理部20cを構成するコアはDSPコアであってもよい。
【0063】
フィルタ処理部20cは、カメラ5により生成された画像に含まれるノイズを除去するノイズ除去フィルタや、コントラストを補正するコントラスト補正フィルタ、平均化フィルタ等を実行する。フィルタ処理部20cが実行する画像処理フィルタは、ノイズ除去フィルタ、コントラスト補正フィルタ、平均化フィルタに限られるものではなく、他の画像処理フィルタを含んでいてもよい。
【0064】
フィルタ処理部20cは、後述する超解像処理実行前及び推論処理実行前の読取画像に対して画像処理フィルタを実行するように構成されている。また、フィルタ処理部20cは、後述する拡大、縮小前の読取画像に対して画像処理フィルタを実行するように構成されている。尚、フィルタ処理部20cは、超解像処理実行後及び推論処理実行後の読取画像に対して画像処理フィルタを実行するように構成されていてもよいし、拡大、縮小後の読取画像に対して画像処理フィルタを実行するように構成されていてもよい。
【0065】
(チューニング実行部の構成)
図5に示すチューニング実行部20dは、光学的情報読取装置1、1Aの設定時に、カメラ5のゲイン、照明部4の光量及び露光時間等の撮像条件や、フィルタ処理部20cにおける画像処理条件を変更してデコードに適した条件となるように各種条件(チューニングパラメータ)を設定する部分である。フィルタ処理部20cにおける画像処理条件とは、画像処理フィルタの係数(フィルタの強弱)や、複数の画像処理フィルタがある場合に画像処理フィルタの切替、種類の異なる画像処理フィルタの組み合わせ等である。搬送時のワークWに対する外光の影響や、コードが付されている面の色及び材質等によって適切な撮像条件及び画像処理条件は異なる。よって、チューニング実行部20dは、より適切な撮像条件及び画像処理条件を探索して、AF制御部20a、撮像制御部20b、フィルタ処理部20cによる処理を設定する。
【0066】
また、チューニング実行部20dは、PPC値取得部20nを備えている。PPC値取得部20nは、光学的情報読取装置1の設定時にカメラ5により生成された読取画像に含まれるコードのPPC値を取得する部分であるとともに、カメラ5により生成された読取画像に含まれるコードのサイズを取得可能に構成されている。コードのサイズを取得する場合、始めに、PPC値取得部20nは、コードらしさを示す特徴量に基づいてコードを探索する。次いで、チューニング実行部20dは、探索したコードのPPC、コード種、コードサイズ等を取得する。PPC、コード種、コードサイズ等は、コードパラメータまたはコード条件に含まれるものであり、従って、PPC値取得部20nは、探索したコードのコードパラメータまたはコード条件を取得可能に構成されている。
【0067】
二次元コードは、複数の白色のモジュールと黒色のモジュールとがランダムに配列されることによって構成されている。例えば、QRコードのモデル2ではモジュール数は21×21~177×177まである。定置式の光学的情報読取装置1の場合は事前に読み取り対象のコードを読み取ることで、モジュール数やPPCを限定し、コードの大きさ(ピクセルサイズ)をモジュール数×PPCに限定して運用する。
【0068】
コードを構成するモジュールのうち、1つのモジュールに着目した時、そのモジュールがいくつのピクセル(画素)で構成されているかを示すコードパラメータがPPCである。PPC値取得部20nは、1つのモジュールを特定した後、1つのモジュールを構成している画素数をカウントすることで、PPCを取得できる。
【0069】
コード種は、例えばQRコード、データマトリクスコード、ベリコードといったコードの種類のことである。各コードには特徴があるので、チューニング実行部20dは、例えばファインダパターンの有無等によってコード種を判別することが可能である。
【0070】
また、コードサイズは、コードの縦または横方向に並ぶモジュールの数とPPCとによって算出できる。PPC値取得部20nは、コードの縦または横方向に並ぶモジュールの数を算出するとともに、PPCを算出し、縦または横方向に並ぶモジュールの数とPPCとを積算することによってコードサイズを取得できる。
【0071】
(デコード処理部の構成)
デコード処理部20fは、白黒の二値化されたデータをデコードする部分である。デコードには、符号化されたデータの対照関係を示すテーブルを使用することができる。さらに、デコード処理部20fは、デコードした結果が正しいか否かを所定のチェック方式に従ってチェックする。データに誤りが発見された場合にはエラー訂正機能を使用して正しいデータを演算する。エラー訂正機能はコードの種類によって異なる。
【0072】
この実施形態では、デコード処理部20fは、後述する超解像処理後の拡大画像に含まれるコードをデコードする。また、デコード処理部20fは、推論処理後の理想画像に含まれるコードをデコードする。尚、デコード処理部20fは、超解像処理前の読取画像及び推論処理前の読取画像に含まれるコードをデコードすることもできる。デコード処理部20fは、コードをデコードして得られたデコード結果を
図3に示すROM40のデコード結果記憶部40bに書き込むように構成されている。
【0073】
(抽出部の構成)
抽出部20gは、カメラ5により生成された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する部分である。コード候補領域は、コードらしさを示す特徴量に基づいて抽出することができ、この場合、コードらしさを示す特徴量はコードを特定するための情報となる。例えば、抽出部20gは、読取画像を取得し、取得した読取画像に対して、コードらしさを示す特徴量に基づいてコードを探索することができる。具体的には、取得した読取画像の中に、コードらしさを示す特徴量を所定以上持った部分が存在するか否かを探索し、その結果、コードらしさを示す特徴量を持った部分を探索することができれば、その部分を含む領域をコード候補領域として抽出する。コード候補領域には、コード以外の領域が含まれていてもよいが、少なくともコードである可能性が所定以上高い部分を含んでいる。尚、コード候補領域は、あくまでもコードが存在する可能性が高い領域であることから、結果的にコードが含まれない領域の場合もあり得る。
【0074】
抽出部20gは、エイマー光照射部10から照射されたエイマー光の位置情報を、コードを特定するための情報として利用し、コード候補領域を抽出することもできる。この場合、例えば
図8に示すように、抽出部20gは、カメラ5の視野5d内の読取画像の中から、エイマー光照射部10から照射されたエイマー光10dによって形成された目印に対応する部分を画像処理によって特定し、当該特定された部分をコード候補領域として抽出する。すなわち、上述したように、エイマー光10dはカメラ5の撮影範囲や視野5dの中心及びその近傍を示すためのものであることから、エイマー光10dによって形成される目印は、予めカメラ5の視野5d内に位置付けておくことが可能である。特に、手持ち式の光学的情報読取装置1Aの場合、ユーザはエイマー光10dを読取対象のコードに合わせるので、エイマー光10dによって形成される目印は、コードと重なっている確率が高い。つまり、エイマー光照射部10により形成された目印に対応する部分をカメラ5の視野5d内に位置付けておくことで、抽出部20gがカメラ5の視野5d内におけるエイマー光10dに対応する領域を抽出すると、その領域はコードが存在する可能性が高い領域となる。この場合、エイマー光照射部10により形成された目印に対応する部分をカメラ5の視野中心と完全に一致させておかなくてもよく、例えば
図6に示すように視野5dの縦方向または横方向に多少ずれていてもよい。また、コードは所定の大きさを有しているので、抽出部20gが抽出する領域は、カメラ5の視野5dの中心だけではなく、視野5dの中心を含む所定の大きさを持った領域である。
【0075】
図6に示すように、エイマー光10dの視野5d内における位置は、手持ち式の光学的情報読取装置1Aとコードとの距離によって変化する。正確には、カメラ5の撮像素子5aの受光面とコードとの距離によって変化する。従って、光学的情報読取装置1Aとコードとの距離と、エイマー光10dの視野5d内における位置との関係を事前に計算して記憶装置30等に記憶させておき、運用時には、周知の距離センサやカメラ5のフォーカス情報等を利用して光学的情報読取装置1Aとコードとの距離を取得し、取得した距離に基づいてエイマー光10dの視野5d内における位置を算出することができる。
【0076】
抽出部20gは、読取画像に含まれるコードのファインダパターンを探索し、その探索結果に基づいてコード候補領域を抽出することもできる。例えば、コードを含む読取画像の中から画像処理でファインダパターンを探索し、そのファインダパターンを含む所定範囲の領域をコード候補領域として決定し、その領域をコード候補領域に対応する部分画像とする。
【0077】
抽出部20gは、読取画像の中心部分を特定し、当該中心部分をコード候補領域として抽出することもできる。例えば、カメラ5の視野中心を、コードを特定するための情報として予め取得しておくことで、このカメラ5の視野中心となる部分を読取画像上で特定することができる。特に、手持ち式の光学的情報読取装置1Aの場合、読取画像上で特定した中心部分は、エイマー光照射部10により形成された目印に対応しているので、その中心部分はコードが存在する可能性が高い領域となる。
【0078】
抽出部20gは、読取画像の中から、ユーザによる所定の部分の指定を受け付けるように構成することができ、当該指定された部分をコード候補領域として抽出することができる。すなわち、ユーザは読取画像上の任意の位置(座標)で任意の大きさの領域指定を行うと、抽出部20gは、その位置の座標及び大きさの情報に基づいて読取画像の中から所定の部分の指定を受け付ける。抽出部20gは、受け付けた部分をコード候補領域として抽出する。例えば、定置式の光学的情報読取装置1の場合、
図1に示すように搬送用ベルトコンベアBによって搬送されているワークWを撮影してコードのデコード処理を実行することになるが、搬送用ベルトコンベアBの幅方向中央部にワークWが存在しているとは限らず、端にワークWが存在していることがあり、この場合には、読取画像の中から、搬送用ベルトコンベアBの端に対応する部分を指定することで、コードが存在する可能性が高い領域として的確な抽出が可能になる。その他にも、大きなワークWで、その中央部から離れた端近傍にコードが表示されている場合もあり、この場合には、読取画像の中から、ワークWの端近傍に対応する部分を指定することで、コードが存在する可能性が高い領域として的確な抽出が可能になる。
【0079】
(記憶装置、ROMの構成)
図3に示す記憶装置30は、例えばSSD(ソリッドステートドライブ)等のような読み書き可能な記憶装置で構成することができる。記憶装置30には、各種プログラムや設定情報、画像データ等を記憶しておくことができる。
【0080】
ROM40には、画像データ記憶部40aと、デコード結果記憶部40bと、パラメータセット記憶部40cと、ニューラルネットワーク記憶部40dとが含まれている。画像データ記憶部40aは、カメラ5で生成された読取画像や超解像処理によって生成された拡大画像、推論処理によって生成された理想画像等を記憶する部分である。デコード結果記憶部40bは、デコード処理部20fで実行されたコードのデコード結果を記憶する部分である。パラメータセット記憶部40cは、チューニング実行部20dが実行したチューニングの結果、設定された各種条件、PPC値を含むコード情報やユーザが設定した各種条件を記憶する部分である。ニューラルネットワーク記憶部40dは、後述する学習済みのニューラルネットワークの構造及びパラメータを記憶する部分である。
【0081】
上記記憶部40a、40b、40c、40dの少なくとも一部は、ROM40以外の部分に設けられていてもよく、例えば、記憶装置30に設けられていてもよい。
【0082】
(ニューラルネットワークを利用した処理)
光学的情報読取装置1、1Aは、カメラにより生成された読取画像を、ニューラルネットワークを利用して超解像処理することによって拡大画像を生成する拡大画像生成機能と、カメラ5で取得した読取画像を、ニューラルネットワークを利用して推論処理することによって理想画像を生成する理想画像生成機能を有している。本実施形態では、理想画像生成機能は必須ではない。
【0083】
本実施形態では、光学的情報読取装置1、1Aで機械学習を行うのではなく、既に学習が終わったニューラルネットワークの構造及びパラメータを光学的情報読取装置1、1Aが予め保持しておき、その保持している構造及びパラメータで構成されたニューラルネットワークを利用して推論処理を実行するように構成されている例について説明するが、これに限らず、光学的情報読取装置1、1Aで機械学習を行ってニューラルネットワークの構造及びパラメータを変更してもよい。
【0084】
ニューラルネットワークは、
図9に示すように、入力データ(本例では画像データ)が入力される入力層と、出力データを出力する出力層と、入力層及び出力層の間に設けられる中間層とを有している。中間層は例えば複数設けることができ、これにより、多層構造のニューラルネットワークとすることができる。
【0085】
(ニューラルネットワークの学習)
始めに、
図10に示すフローチャートに基づいてニューラルネットワークの学習時の基本手順について説明する。ニューラルネットワークの学習は、光学的情報読取装置1、1A以外の学習用として用意したコンピュータを用いて行うことができるが、学習用以外の汎用コンピュータを用いて行ってもよい。また、光学的情報読取装置1、1Aで学習を行ってもよい。ニューラルネットワークの学習方法は従来から周知の方法を用いてもよい。
【0086】
スタート後のステップSA1では予め準備している不良画像のデータを読み込む。不良画像は、コードの読み取りに不適切な部分を有する画像であり、
図11の左側に示すような画像を例示することができる。不適切な部分とは、例えば汚れた部分や着色された部分等である。その後、ステップSA2に進み、予め準備している理想画像のデータを読み込む。理想画像は、コードの読み取りに適切な画像であり、
図11の右側に示すような画像を例示することができる。不良画像と理想画像とはペアとしておき、このようなペアを複数準備しておく。光学的情報読取装置1、1Aで学習を行う場合には、光学的情報読取装置1、1Aに不良画像と理想画像を入力する。
【0087】
ステップSA2では、損失関数を計算し、不良画像と理想画像との差分を求める。ステップSA3では、ステップSA2で求めた差分を反映させてニューラルネットワークのパラメータを更新する。
【0088】
ステップSA4では機械学習の完了条件を満たすか否かを判定する。機械学習の完了条件とは、ステップSA2で求めた差分に基づいて設定することができ、例えば差分が所定以下であれば、機械学習の完了条件を満たすと判定できる。ステップSA4でYESと判定されて機械学習の完了条件を満たしている場合には機械学習を終了する。一方、ステップSA4でNOと判定されて機械学習の完了条件を満たしていない場合にはステップSA1に戻り、別の不良画像を読み込んだ後、ステップSA2に進んで当該別の不良画像とペアになっている別の理想画像を読み込む。
【0089】
このようにして、複数の不良画像と、当該複数の不良画像にそれぞれ対応する複数の理想画像とを機械学習させることにより、学習済みのニューラルネットワークを予め生成することができる。学習済みのニューラルネットワークの構造及びパラメータを光学的情報読取装置1、1Aが保持しておくことで、光学的情報読取装置1、1A内で学習済みのニューラルネットワークを構築することができる。本例のように、光学的情報読取装置1、1A外で機械学習を行い、その結果得られたニューラルネットワークの構造及びパラメータを光学的情報読取装置1、1Aで保持しておけば、光学的情報読取装置1、1Aの小型軽量化を実現しながら、ニューラルネットワークによる推論処理が可能になる。尚、演算処理能力が十分に高いプロセッサ20を搭載している場合には、光学的情報読取装置1、1Aで学習を行っても問題とはならない。
【0090】
また、超解像処理の実行が可能なニューラルネットワークの学習を行う場合、例えば、低解像度の画像を入力画像(不良画像)として用意しておき、この入力画像をニューラルネットワークに入力することで高解像度の画像が出力されるように機械学習を行う。この場合のニューラルネットワークの損失関数には、低解像度の画像を超解像した画像と、元の高解像度の画像(教師画像)の平均二乗誤差を使用することができ、この誤差が小さくなるようにニューラルネットワークのパラメータを変更する。このようにして学習したニューラルネットワークは、超解像処理が可能になるので、カメラ5により生成された読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像を出力することが可能な超解像処理用のニューラルネットワークとなる。超解像処理用のニューラルネットワークは、当該ニューラルネットワークの構造及びパラメータによって特定することができる。超解像処理用のニューラルネットワークとしては、例えばFSRCNNを利用することができる。
【0091】
超解像処理用のニューラルネットワークの学習の際に使用する不良画像としては、例えば一定範囲のPPCのコードを含む画像とすることができる。一定範囲とは、例えばPPCが1.2~2.0である。また、不良画像の撮影時のチルト角は、略水平及び略垂直に限定することができるが、プラスマイナス10゜程度のチルト角が付いていてもよい。
【0092】
図12は、畳み込みニューラルネットワーク(CNN:Convolutional Neural Network)の一例を示す概念図である。「Convolution」では、入力された画像の特徴の抽出を行う。この層は、画像処理フィルタのような畳み込み演算で構成される。フィルタの重みをカーネルと呼び、カーネルに合わせた特徴量の抽出を行う。畳み込み層は一般的に複数の異なるカーネルを持ち、カーネル数に応じてマップ数(D)が増えていく。カーネルサイズは、例えば3×3、5×5などを取ることができる。
【0093】
「pooling」では、縮小処理を行って各カーネルの反応をまとめる。「Deconvolution」では、逆畳み込みフィルタにより、特徴値から画像を再構成する。「Unpooling」では、拡大処理を行って反応値を先鋭化する。
【0094】
学習済みのニューラルネットワークの構造及びパラメータは、
図3に示すROM40のニューラルネットワーク記憶部40dに記憶される。ニューラルネットワークの構造とは、入力層と出力層との間に設けられる中間層の数(D)や、画像処理フィルタの数等である。ニューラルネットワークのパラメータは、
図7に示すフローチャートのステップSA3で設定されたパラメータである。
【0095】
また、ニューラルネットワーク記憶部40dには、層の数または画像処理フィルタの数が異なる複数のニューラルネットワークの構造及びパラメータを記憶することが可能になっている。この場合、複数のニューラルネットワークの構造及びパラメータと、コード条件とを関連付けた状態でニューラルネットワーク記憶部40dに記憶することができる。例えば、第1のニューラルネットワークを構成するための当該ニューラルネットワークの構造及びパラメータと、第1のニューラルネットワークに対応する第1のコード条件とを関連付ける。関連付けを行う際、第1のニューラルネットワークの層の数またはフィルタの数は、第1のコード条件、特に第1のPPCによって最適な数を事前に特定しておくことができるものなので、この関係が保たれるように関連付けておく。同様に、第1のニューラルネットワークとは異なる第2のニューラルネットワークの構造及びパラメータと、第1のコード条件とは異なる第2のコード条件とを関連付ける。
【0096】
複数のニューラルネットワークの構造及びパラメータをニューラルネットワーク記憶部40dに記憶している場合には、光学的情報読取装置1、1Aの設定時に、次のようにチューニング実行部20dが動作する。すなわち、チューニング実行部20dは、カメラ5により生成された読取画像に含まれるコード条件を設定する際、設定したコード条件に関連付けられたニューラルネットワークの構造及びパラメータをニューラルネットワーク記憶部40dから読み出して運用時に使用するニューラルネットワークとして特定する。例えば、チューニング実行部20dが読取画像に含まれるコード条件をして第1のコード条件を設定した場合には、第1のコード条件と関連付けられた第1のニューラルネットワークの構造及びパラメータをニューラルネットワーク記憶部40dから読み出す。そして、第1のニューラルネットワークの構造及びパラメータを光学的情報読取装置1、1Aの運用時に使用するニューラルネットワークとして特定する。これにより、コード条件に最適なニューラルネットワークの構造及びパラメータで読取画像に対して推論処理を実行できるので、読み取り精度を高めることができる。
【0097】
ニューラルネットワークの学習にあたっては、コードを構成するモジュールのピクセル分解能が特定範囲内である不良画像及び理想画像を機械学習させることもできる。モジュールのピクセル分解能は、例えばコードを構成する1つのモジュールのピクセル数(PPC)で表すことができ、PPCが特定範囲内にある不良画像及び理想画像のみでニューラルネットワークの機械学習を行ってもよい。
【0098】
上記特定範囲は、読取画像に対する推論処理効果の高いピクセル分解能を含み、かつ、読取画像に対する推論処理効果が殆ど向上しないピクセル分解能を除外する範囲であり、複数のモジュールで構成されたコードを含む画像に対する推論処理を前提として設定することができる。これにより、コードを含む画像に対する推論処理に特化したニューラルネットワーク構造として処理速度を向上させることができる。
【0099】
上記ピクセル数の特定範囲としては、例えば4PPC以上6PPC以下とすることができるが、4PPC未満であってもよいし、6PPCよりも多くてもよい。また、例えば特定範囲を4PPC以上6PPC以下に限定して機械学習することで、学習に用いる画像から余分なスケールの変動を排除することができ、学習済みニューラルネットワーク構造の適正化を図ることもできる。
【0100】
(推論処理)
図7に示すように、光学的情報読取装置1、1Aのプロセッサ20には、専用コア25によって構成される推論処理部20jが設けられている。推論処理部20jは、ROM40のニューラルネットワーク記憶部40dに記憶されたニューラルネットワークの構造及びパラメータを読み出し、読み出したニューラルネットワークの構造及びパラメータで光学的情報読取装置1、1A内に推論処理用のニューラルネットワークを構成する。光学的情報読取装置1、1A内に構成されたニューラルネットワークは、
図10のフローチャートに示す手順で学習した学習済みニューラルネットワークと同じものである。
【0101】
推論処理部20jは、カメラ5により生成された読取画像をニューラルネットワークに入力することにより、ニューラルネットワーク記憶部40dに記憶されたニューラルネットワークの構造及びパラメータに従って読取画像に対応する理想画像を生成する推論処理を実行する。推論処理部20jが生成した理想画像は、あくまでも推論処理によって生成した画像であることから、上述した学習時に用いた理想画像と同じであるとは限らないが、本実施形態では推論処理部20jが生成した画像も理想画像と呼ぶ。
【0102】
フィルタ処理部20cは、カメラ5により生成された読取画像を推論処理部20jがニューラルネットワークに入力する前に、読取画像に対して画像処理フィルタを実行するように構成されている。これにより、ニューラルネットワークによる推論処理を実行する前に適切な画像処理を実行しておくことができ、その結果、推論処理がより的確なものになる。
【0103】
デコード処理部20fでデコード処理する全ての読取画像に対して推論処理部20jが推論処理を実行してもよいし、デコード処理部20fでデコード処理する一部の読取画像に対してのみ推論処理部20jが推論処理を実行してもよい。例えば、デコード処理部20fは、推論処理を実行する前の読取画像に対してデコード処理を実行し、デコードが成功したか否かを判定する。デコードに成功した場合には、推論処理が不要な読取画像であったということであり、そのまま結果を出力する。一方、デコードに失敗した場合には、推論処理部20jが推論処理を実行し、生成された理想画像に対してデコード処理部20fがデコード処理を実行する。
【0104】
(超解像処理)
図7に示すように、光学的情報読取装置1、1Aのプロセッサ20には、専用コア25によって構成される超解像処理部20kが設けられている。超解像処理部20kは、ROM40のニューラルネットワーク記憶部40dに記憶されたニューラルネットワークの構造及びパラメータを読み出し、読み出したニューラルネットワークの構造及びパラメータで光学的情報読取装置1、1A内に超解像処理用のニューラルネットワークを構成する。光学的情報読取装置1、1A内に構成された超解像処理用のニューラルネットワークは、上述した低解像画像及び高解像画像で学習した学習済みニューラルネットワークと同じものである。
【0105】
超解像処理部20kは、カメラ5により生成された読取画像を超解像処理用のニューラルネットワークに入力することにより、ニューラルネットワーク記憶部40dに記憶されたニューラルネットワークの構造及びパラメータに従って読取画像のPPC値を拡大した拡大画像を生成する。すなわち、超解像処理部20kが生成した拡大画像は、画素間の補間ではなく元の読取画像に含まれない高周波成分の推定をニューラルネットワークで行った画像であり、これにより、読取画像のPPC値を拡大することができる。
【0106】
例えば、カメラ5により生成された読取画像に含まれるコードのPPC値が2未満(例えば1.2~1.5程度)であると、全くデコード処理ができなくなる場合があるが、超解像処理部20kによる超解像処理によってPPC値を2以上にすることで、デコード処理が可能になる。本実施形態では、PPC値が0.1であっても超解像処理を適用することでデコード処理が可能になる。
【0107】
また、カメラ5により生成された読取画像に含まれるコードのPPC値が1.5~2.0未満では、デコード処理がかろうじて可能であるが、デコード処理が安定しないので、この範囲にあるPPC値を2.0以上にすることで、安定したデコード処理が可能になる。
【0108】
拡大後のPPC値としては、例えば2.2以上、または2.4以上とすることができる。拡大後のPPC値は、ニューラルネットワークによる拡大率によって設定することができる。ニューラルネットワークによる拡大率は、任意の整数倍にすることができ、例えば2.0倍、3.0倍等にすることができる。ニューラルネットワークによる拡大率を2.0倍とした場合、ニューラルネットワークに入力した読取画像のサイズが128×128(ピクセル)であったとすると、出力される拡大画像のサイズは256×256(ピクセル)となる。
【0109】
超解像処理部20kは、PPC値取得部20nで取得されたPPC値が所定値以下の場合に拡大画像を生成する一方、PPC値取得部20nで取得されたPPC値が所定値を超える場合に拡大画像を非生成とするように構成されている。所定値は、例えば2.0~2.3の間の任意の値とすることができる。上述したように、PPC値が2を超えれば、デコード処理が安定して可能になるので、拡大画像の必要性が低く、この場合には超解像処理を非実行にすることで、処理速度を向上できる。
【0110】
また、
図4に示す手持ち式の光学的情報読取装置1Aでは近距離用のカメラ5と遠距離用のカメラ5Aとを有しており、各カメラ5、5Aにより近距離から遠距離までピントの合った読取画像を生成することができる。この場合、近距離用のカメラ5で生成した読取画像と、遠距離用のカメラ5Aで生成した読取画像との両方に超解像処理を実行してもよい。これにより、遠距離にあるコードや、近距離で撮影しても読み取りにくい小さなコードを含む読取画像から拡大画像を生成することができる。
【0111】
また、近距離用のカメラ5をモノクロカメラとし、遠距離用のカメラ5Aをカラーカメラとした場合、遠距離用のカメラ5Aで生成したカラーの読取画像をモノクロに変換した後に、超解像処理を実行してもよい。この場合、プロセッサ20がモノクロ変換部を備えた構成となる。
【0112】
フィルタ処理部20cは、カメラ5により生成された読取画像を超解像処理用のニューラルネットワークに入力する前に、読取画像に対して画像処理フィルタを実行するように構成されている。これにより、超解像処理用のニューラルネットワークによる超解像処理を実行する前に適切な画像処理を実行しておくことができ、その結果、拡大処理がより鮮明なものになる。
【0113】
デコード処理部20fでデコード処理する全ての読取画像に対して超解像処理部20kが超解像処理を実行してもよいし、デコード処理部20fでデコード処理する一部の読取画像に対してのみ超解像処理部20kが超解像処理を実行してもよい。例えば、デコード処理部20fは、超解像処理を実行する前の読取画像に対してデコード処理を実行し、デコードが成功したか否かを判定する。デコードに成功した場合には、超解像処理が不要な読取画像であったということであり、そのまま結果を出力する。一方、デコードに失敗した場合には、超解像処理部20kが超解像処理を実行し、生成された拡大画像に対してデコード処理部20fがデコード処理を実行する。
【0114】
(部分画像の入力)
推論処理部20j及び超解像処理部20kがニューラルネットワークに入力する画像は、カメラ5により生成された読取画像の全部であってもよいが、入力する画像のサイズが大きければ大きいほどニューラルネットワークによる演算量が増大し、プロセッサ20の演算負荷が重くなり、ひいては処理速度の低下を招くおそれがある。具体的には、
図12に示すようなFCN(Fully Convolutional Network)型のニューラルネットワークでは、構造が等しいと仮定した場合、演算量は入力画像サイズに比例した量となり、入力画像サイズはコードの大きさの二乗に比例するため、演算量もコードの大きさの二乗に比例することになる。
【0115】
一方、カメラ5により生成された読取画像の全体にコードが存在しているケースは皆無といってよく、通常の運用時には読取画像の一部の領域にのみコードが存在しており、その領域のみニューラルネットワークによる推論処理を実行することができれば、読み取り精度を高めることができる。
【0116】
そこで、推論処理部20j及び超解像処理部20kがニューラルネットワークに入力する画像は、カメラ5により生成された読取画像の一部、即ちコードを含んだ部分画像とすることができる。具体的には、抽出部20gが抽出したコード候補領域に対応する部分画像を画像データ記憶部40aに記憶させておき、推論処理部20j及び超解像処理部20kがアクセス可能にしておく。推論処理部20j及び超解像処理部20kは部分画像をニューラルネットワークに入力することにより、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータに従って部分画像に推論処理及び超解像処理を実行する。また、超解像処理部20kによる超解像処理を実行した後に推論処理部20jによる推論処理を実行し、その後、デコード処理部20fがデコード処理を実行してもよい。
【0117】
そして、生成された理想画像または拡大画像に対してデコード処理部20fがデコード処理を実行する。また、後述するように、部分画像に推論処理及び超解像処理を実行することなく、デコード処理を実行する場合には、デコード処理部20fが画像データ記憶部40aにアクセス可能にしておき、画像データ記憶部40aに記憶された部分画像をデコード処理部20fが読み込んでデコード処理を実行する。
【0118】
上述したように読取画像の全体にコードが存在しているケースは殆ど無いので、コード候補領域に対応する部分画像のサイズは、読取画像のサイズよりも小さくなる。これにより、ニューラルネットワークに入力する画像のサイズが小さくなるので、プロセッサ20の演算負荷が軽くなり、ひいては処理速度の高速化が実現される。また、部分画像は、コードが存在する可能性が高い領域に対応しているので、読み取りに必要な情報、即ちコードの全体を含んだ画像とすることが可能である。このコードの全体を含んだ画像をニューラルネットワークに入力するので、読み取り精度の低下は抑制される。
【0119】
推論処理部20j及び超解像処理部20kは、チューニング実行部20dで取得したコードサイズに基づいて部分画像のニューラルネットワークへの入力サイズを決定することができる。上述したように、チューニング実行部20dはコードサイズを取得することができる。推論処理部20j及び超解像処理部20kは、ニューラルネットワークへ入力する部分画像の入力サイズを、チューニング実行部20dで取得したコードサイズよりも所定量だけ大きくする。
【0120】
すなわち、部分画像をニューラルネットワークへ入力することで演算負荷を軽くすることができる反面、例えばコードが回転していたり、コードの位置が精密に検出できなかった場合には、部分画像中のコードの一部が欠けてしまい、デコード処理に失敗する可能性もある。本実施形態では、ニューラルネットワークへの入力サイズがチューニング実行部20dで取得したコードサイズと同じではなく、コードサイズよりも所定量だけ大きいので、部分画像中でコードの一部が欠けるのを抑制できる。尚、コードサイズよりも所定量だけ大きくしていることで、ニューラルネットワークへの入力サイズに上限を持たせることができ、よって、演算負荷が重くならないようにすることができる。「所定量」とは、例えばニューラルネットワークへ入力される部分画像の横(または縦)の長さが、チューニング実行部20dで取得したコードの横(または縦)の長さの1.5倍以上、または2.0倍以上、または3.0倍以上であってもよい。
【0121】
推論処理部20j及び超解像処理部20kがニューラルネットワークへ入力する部分画像の入力サイズを決定する際、チューニング実行部20dで取得したコードを構成する1つのモジュールのピクセル数と当該コードの縦または横方向に並ぶモジュール数とに基づいて決定することができる。
【0122】
また、チューニング実行部20dでは上述したようにコード条件を設定することができる。推論処理部20j及び超解像処理部20kは、チューニング実行部20dで設定されたコード条件に基づいて、ニューラルネットワークに入力する読取画像のサイズを設定することもできる。例えば、チューニング実行部20dで設定されたコード条件のうち、コードサイズを推論処理部20j及び超解像処理部20kが取得すると、取得したコードサイズよりも所定量だけ大きなサイズの部分画像をニューラルネットワークに入力する。コードサイズが大きければニューラルネットワークに入力する部分画像のサイズが大きくなる一方、コードサイズが小さければニューラルネットワークに入力する部分画像のサイズが小さくなる。つまり、ニューラルネットワークに入力する部分画像のサイズをコード条件に応じて変えることができる。
【0123】
(縮小・拡大機能)
ここで、
図12に示すような畳み込みニューラルネットワークにおいてコードの特徴を十分に捉え、デコードに適した理想画像にするためには、一定量のモジュール数をカバーする範囲で特徴量を抽出する必要がある。例えば、ニューラルネットワークから得られる1つの特徴値が6×6モジュールの範囲から抽出される値であるとし、1つのモジュールが20ピクセルで撮影された画像の場合、120×120ピクセルの範囲から集約された特徴値を算出するようにニューラルネットワークを設計しなければならない。つまり、カバーしたいピクセル範囲が広ければ広い程、ニューラルネットワークの階層を深くしなければならず、例えば上述した120×120ピクセルの範囲から特徴値を集約しようとすると、6回の畳み込み層が必要となる。
【0124】
しかし、コードは白色のモジュールと黒色のモジュールとがランダムに配列されることによって構成されているため、広範囲でのピクセル値の関係は希薄であり、カバーするピクセル範囲を一定以上に広げても推論処理効果は殆ど向上しない。このような特徴を、本明細書では狭範囲特徴と呼ぶ。
【0125】
また、コードに含まれるファインダパターンなど決まったモジュールパターンの配置やコード全体として四角形状であることは広範囲特徴になり得るが、モジュールと背景とを大まかに分離するだけであれば、広範囲特徴を用いることなく、狭範囲特徴のみを用いても十分に推論処理可能である。尚、広範囲特徴とは、広範囲に渡って決まった形状を持つ特徴と定義することができる。
【0126】
そこで、
図10に示すニューラルネットワークの学習の際、コードのPPCが特定範囲にある画像を用いることができる。これにより、コードを含む画像に対する推論処理に特化したニューラルネットワーク構造として処理速度を向上させることができる反面、PPCが特定範囲外にある読取画像に対する推論処理効果は低下する懸念がある。尚、ニューラルネットワークの学習の際、コードのPPCが特定範囲外にある画像を用いてもよい。
【0127】
本実施形態の光学的情報読取装置1、1Aでは、読取画像のPPCが特定範囲に入るようにするために、読取画像の縮小・拡大機能を備えている。
図7に示すように、プロセッサ20には、縮小部20h及び拡大部20iが構成されている。縮小部20hは、カメラ5により生成された読取画像の中のコードを構成するモジュールのピクセル分解能が上述した特定範囲内となるように縮小した読取画像を生成する部分であり、また、拡大部20iは、カメラ5により生成された読取画像の中のコードを構成するモジュールのピクセル分解能が上述した特定範囲内となるように拡大した読取画像を生成する部分である。
【0128】
縮小部20h及び拡大部20iは、例えばカメラ5により生成された読取画像におけるコードのPPCが特定範囲(4PPC以上6PPC以下)外にあるか否かを判定し、特定範囲内である場合には、縮小または拡大を非実行にする一方、特定範囲外である場合には、縮小または拡大を実行する。縮小または拡大を実行することで、推論処理部20j及び超解像処理部20kがニューラルネットワークへ入力する部分画像におけるコードのPPCが特定範囲内に入る。
【0129】
推論処理部20j及び超解像処理部20kは、特定範囲内となるように拡大または縮小した読取画像を、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータで構成されたニューラルネットワークに入力することにより、その構造及びパラメータに従って読取画像に対する推論処理を実行する。そして、生成された理想画像に対してデコード処理部20fがデコード処理を実行する。
【0130】
抽出部20gは、拡大部20iにより拡大した読取画像または縮小部20hにより縮小した読取画像に対してコードを探索し、探索されたコードを含む領域をコードが存在する可能性が高いコード候補領域として抽出するように構成してもよい。この場合、推論処理部20j及び超解像処理部20kは、抽出部20gが抽出したコード候補領域に対応する部分画像を、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータで構成されたニューラルネットワークに入力することにより、その構造及びパラメータに従って読取画像に対する推論処理を実行する。
【0131】
光学的情報読取装置1、1Aの設定時には、チューニング実行部20dが、拡大率を変えた複数の読取画像(拡大画像)を生成すること、及び縮小率を変えた複数の読取画像(縮小画像)を生成することができる。チューニング実行部20dは、生成した複数の読取画像(拡大画像または縮小画像)をニューラルネットワークに入力して各読取画像の推論処理を実行し、生成された各理想画像に対してデコード処理を実行し、コードの読み取りのしやすさを示す読取余裕度を求める。チューニング実行部20dは、求めた読取余裕度が所定よりも高い読取画像の拡大率または縮小率を、運用時に使用する拡大率または縮小率として特定する。チューニング実行部20dが拡大率または縮小率を特定した場合、光学的情報読取装置1、1Aの運用時には、縮小部20h及び拡大部20iは、チューニング実行部20dが特定した拡大率または縮小率で読取画像を拡大または縮小する。
【0132】
すなわち、例えば特定範囲にある程度の広さがある場合、その特定範囲内であっても拡大率や縮小率を変えると、読取余裕度が変化することが考えられる。チューニング実行部20dが求めた読取余裕度が所定よりも高くなるように、運用時における読取画像の拡大率または縮小率を特定することができるので、処理速度及び読み取り精度が向上する。
【0133】
チューニング実行部20dは、各読取画像の読取余裕度を求めた後、求めた複数の読取余裕度のうち、最も高い読取余裕度の読取画像の拡大率または縮小率を、運用時に使用する拡大率または縮小率として特定することができる。これにより、処理速度及び読み取り精度を更に向上させることができる。
【0134】
また、縮小部20h及び拡大部20iで読取画像を縮小及び拡大できることを利用して、パラメータセットの種類を増やすこともできる。縮小部20hによる縮小率が異なる複数のパラメータセットと、拡大部20iによる拡大率が異なる複数のパラメータセットを生成し、これらパラメータセットをROM40のパラメータセット記憶部40cに記憶させることができる。例えば、縮小部20hによる縮小率が1/2、1/4、1/8のように複数設定可能な場合、縮小率が1/2のパラメータセット、縮小率が1/4のパラメータセット、縮小率が1/8のパラメータセットをパラメータセット記憶部40cに記憶させることができる。また、拡大部20iによる拡大率が2倍、4倍、8倍のように複数設定可能な場合、拡大率が2倍のパラメータセット、拡大率が4倍のパラメータセット、拡大率が8倍のパラメータセットをパラメータセット記憶部40cに記憶させることができる。そして、パラメータセット記憶部40cに記憶された複数のパラメータセットの中から任意の一のパラメータセットを適用することができる。
【0135】
(推論処理フィルタ及び超解像処理フィルタ)
推論処理部20jは、ニューラルネットワークを利用して推論処理を実行する推論処理フィルタを実行する部分であってもよい。また、超解像処理部20kは、ニューラルネットワークを利用して超解像処理を実行する超解像処理フィルタを実行する部分であってもよい。
【0136】
推論処理フィルタは、読取画像を、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータで構成されたニューラルネットワークに入力することにより、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータに従って推論処理を実行するフィルタであり、上述した推論処理機能と同じ機能を発揮する。
【0137】
また、超解像処理フィルタは、読取画像を、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータで構成された超解像処理用のニューラルネットワークに入力することにより、ニューラルネットワーク記憶部40dに記憶された構造及びパラメータに従って超解像処理を実行するフィルタであり、上述した超解像処理機能と同じ機能を発揮する。
【0138】
推論処理フィルタまたは超解像処理フィルタを実行可能にする場合、推論処理フィルタまたは超解像処理フィルタを設定するための設定部20e(
図7に示す)を設けることができる。設定部20eは、ユーザによる推論処理フィルタまたは超解像処理フィルタの設定を受付可能に構成されている。設定部20eは、例えば光学的情報読取装置1、1Aの設定時に、「推論処理フィルタの適用」と「推論処理フィルタの非適用」との一方をユーザが選択可能なユーザインターフェースを生成して表示部6に表示させ、ユーザによる選択を受け付けるように構成することができる。また、設定部20eは、例えば光学的情報読取装置1、1Aの設定時に、「超解像処理フィルタの適用」と「超解像処理フィルタの非適用」との一方をユーザが選択可能なユーザインターフェースを生成して表示部6に表示させ、ユーザによる選択を受け付けるように構成することができる。
【0139】
設定部20eは、チューニング実行部20dに含まれていてもよいし、チューニング実行部20dとは別に構成されていてもよい。設定部20eがチューニング実行部20dに含まれている場合、チューニング時に推論処理フィルタまたは超解像処理フィルタに関するパラメータを設定することが可能になる。推論処理フィルタに関するパラメータとしては、「推論処理フィルタの適用」と「推論処理フィルタの非適用」とを含むことができる。「推論処理フィルタの適用」とは、推論処理フィルタを実行可能に設定することであり、「推論処理フィルタの非適用」とは、推論処理フィルタを設定しないことである。
【0140】
また、超解像処理フィルタに関するパラメータとしては、「超解像処理フィルタの適用」と「超解像処理フィルタの非適用」とを含むことができる。「超解像処理フィルタの適用」とは、超解像処理フィルタを実行可能に設定することであり、「超解像処理フィルタの非適用」とは、超解像処理フィルタを設定しないことである。
【0141】
推論処理フィルタまたは超解像処理フィルタに関するパラメータは、推論処理フィルタまたは超解像処理フィルタに関する情報でもあり、この場合、推論処理フィルタまたは超解像処理フィルタの設定に関する情報を含むパラメータセットをパラメータセット記憶部40cに記憶することができる。パラメータセット記憶部40cに記憶されるパラメータセットには、推論処理フィルタを実行可能に設定する第1のパラメータセットと、推論処理フィルタを設定しない第2のパラメータセットと、超解像処理フィルタを実行可能に設定する第3のパラメータセットと、超解像処理フィルタを設定しない第4のパラメータセットとを含むことができる。
【0142】
光学的情報読取装置1、1Aの運用時には、第1のパラメータセットと、第2のパラメータセットと、第3のパラメータセットと、第4のパラメータセットの中から選択された一のパラメータセットが適用される。第1のパラメータセットが適用された場合には、推論処理フィルタによって推論処理が実行された理想画像に対してデコード処理部20fによるデコード処理が実行される一方、第2のパラメータセットが適用された場合には、推論処理が実行されない読取画像に対してデコード処理部20fによるデコード処理が実行される。第3のパラメータセット及び第4のパラメータセットも同様である。
【0143】
パラメータセット記憶部40cに記憶されるパラメータセットには、カメラ5により生成された読取画像に含まれるコード条件を設定する項目も含まれる。コード条件を設定する項目では、チューニング実行部20dが取得したPPC、コード種、コードサイズ等が設定される。例えば、1つのパラメータセットには、コード条件を設定する項目としてのPPC、コード種、コードサイズと、撮像条件としてのカメラ5のゲイン、照明部4の光量、露光時間と、フィルタ処理部20cが適用する画像処理フィルタの項目としての画像処理フィルタ種類、当該画像処理フィルタのパラメータと、推論処理フィルタ、超解像処理フィルタの適用項目とを含むことができる。これら各項目は、チューニング実行部20dが設定した値等をそのまま用いてもよいし、ユーザが任意に変更することもできる。
【0144】
(チューニング工程の手順の一例)
光学的情報読取装置1、1Aの設定時にチューニング実行部20dによって行われるチューニング工程の手順の一例について、
図13に示すフローチャートに基づいて具体的に説明する。
図13に示すフローチャートのスタート後のステップSB1では、チューニング実行部20dが照明部4及びカメラ5を制御してカメラ5に読取画像を生成させ、チューニング実行部20dが読取画像を取得する。このとき、デコード処理前に実行される画像処理フィルタの有無や種類、ニューラルネットワークによる推論処理、超解像処理を適用するためのデコード処理パラメータは任意のパラメータに設定されている。次いでステップSB2に進み、取得した読取画像に対してチューニング実行部20dがデコード処理部20fにデコード処理を実行させる。
【0145】
デコード処理後、ステップSB3に進み、ステップSB2のデコード処理が成功したか否かをチューニング実行部20dが判定する。ステップSB3でNOと判定されてステップSB2のデコード処理が失敗した場合、即ちコードの読み取りができなかった場合には、ステップSB4に進み、デコード処理パラメータを別のパラメータに変更した後、ステップSB2で再度デコード処理を実行する。例えば、超解像処理が実行されないパラメータであった場合には、超解像処理が実行されるパラメータに変更し、ステップSB2の前に、読取画像に対して超解像処理を実行する。全てのデコード処理パラメータでデコード処理を失敗した場合にはこのフローを終了してユーザに報知する。
【0146】
一方、ステップSB3でYESと判定されてステップSB2のデコード処理が成功した場合には、ステップSB5に進み、チューニング実行部20dがコードパラメータ(PPC、コード種、コードサイズ等)を決定する。チューニング実行部20dがコードパラメータを決定すると、コードパラメータと関連付けられてニューラルネットワーク記憶部40dに記憶されているニューラルネットワークの構造及びパラメータも決定される(ステップSB6)。ステップSB6では、ニューラルネットワーク記憶部40dから読み出した構造及びパラメータでニューラルネットワークを構成する。
【0147】
ステップSB7では、推論処理部20jが、ステップSB6で構成されたニューラルネットワークに読取画像を入力することにより、推論処理を実行し、生成された理想画像に対してデコード処理部20fがデコード処理を実行する。その後、ステップSB8に進み、チューニング実行部20dがステップSB7のデコード処理結果に基づいて読取余裕度を評価し、一旦記憶しておく。
【0148】
ステップSB9では、全てのデコード処理パラメータでデコード処理の実行が完了したか否かを判定する。ステップSB9でNOと判定されて、全てのデコード処理パラメータでデコード処理の実行が完了していない場合にはステップSB10に進み、デコード処理パラメータを別のパラメータに変更した後、ステップSB7に進む。
【0149】
一方、ステップSB9でYESと判定されて全てのデコード処理パラメータでデコード処理の実行が完了するとステップSB11に進む。ステップSB11では、チューニング実行部20dが、全てのデコード処理パラメータの中から読取余裕度が最も高いデコード処理パラメータを選択し、その選択したデコード処理パラメータを運用時に適用するパラメータとして決定する。尚、チューニング工程では、撮像条件等も適切な条件に設定される。
【0150】
(縮小率及び拡大率決定前のデコード処理手順)
次に、縮小率及び拡大率決定前のデコード処理手順の一例について、
図14に示すフローチャートに基づいて具体的に説明する。
図14に示すフローチャートで特定される処理は、
図13に示すフローチャートのステップSB2で実行することができる。
【0151】
図14に示すフローチャートのスタート後のステップSC1では、チューニング実行部20dが、複数の画像処理フィルタの中から任意の画像処理フィルタを選択する。この画像処理フィルタは、フィルタ処理部20cで実行されるフィルタである。その後、ステップSC2では、ステップSC1で選択した画像処理フィルタを読取画像に対してフィルタ処理部20cが実行する。
【0152】
次いで、ステップSC3に進み、画像ピラミッドを作成する。画像ピラミッドは、元の読取画像、元の読取画像を1/2に縮小した画像、元の読取画像を1/4に縮小した画像、元の読取画像を1/8に縮小した画像、…で構成されている。読取画像の縮小は、縮小部20hで実行される。また、画像ピラミッドは、元の読取画像、元の読取画像を2倍に拡大した画像、元の読取画像を4倍に拡大した画像、元の読取画像を8倍に拡大した画像、…で構成することもできる。読取画像の拡大は、拡大部20iで実行される。尚、縮小した画像と、拡大した画像とのうち、一方を省略してもよい。
【0153】
画像ピラミッドを作成した後、ステップSC4に進み、画像ピラミッドを構成する複数の読取画像の中から任意の読取画像を選択する。この選択された画像の中には、縮小及び拡大されていない元の読取画像が含まれる場合もある。ステップSC5では、抽出部20gが、ステップSC4で選択した読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する。その後、ステップSC6に進み、超解像処理が実行されるパラメータの場合には、超解像処理部20kがステップSC5で抽出されたコード候補領域に対応する部分画像をニューラルネットワークに入力して超解像処理を実行する。また、ステップSC6では、推論処理が実行されるパラメータの場合には、推論処理部20jが、ステップSC5で抽出されたコード候補領域に対応する部分画像をニューラルネットワークに入力して推論処理を実行する。ニューラルネットワークに入力する部分画像のサイズは、上述したコード条件によって決定する。尚、超解像処理が実行されないパラメータの場合には、ステップSC6で超解像処理を実行せず、また、推論処理が実行されないパラメータの場合には、ステップSC6で推論処理を実行しない。
【0154】
ステップSC6を経た後、ステップSC7に進み、コードの輪郭やコードを構成しているモジュールの位置決め処理を実行する。位置決め処理後、ステップSC8に進み、コードを構成している各モジュールが白であるか、黒であるかを判別する。白黒の判別後、ステップSC9に進み、生成された理想画像に対してデコード処理部20fがデコード処理を実行する。デコード処理では、例えばモジュールの0-1マトリックスから文字列を復元する手法を採用することができる。
【0155】
その後、ステップSC10に進み、ステップSC9のデコード処理が成功したか否かをチューニング実行部20dが判定する。ステップSC10でNOと判定されてステップSC9のデコード処理が失敗した場合には、ステップSC11に進み、画像ピラミッドを構成している全ての読取画像が選択されたか否かを判定する。ステップSC11でNOと判定されて画像ピラミッドを構成している全ての読取画像が選択されていない場合にはステップSC4に進み、画像ピラミッドを構成している別の縮小された読取画像または別の拡大された読取画像を選択し、ステップSC5に進む。
【0156】
一方、ステップSC11でYESと判定されて画像ピラミッドを構成している全ての読取画像が選択された場合にはこのフローを終了し、デコードが成功した条件を記憶しておく。
【0157】
(縮小率及び拡大率決定後のデコード処理手順)
次に、縮小率及び拡大率決定後のデコード処理手順の一例について、
図15に示すフローチャートに基づいて具体的に説明する。
図15に示すフローチャートで特定される処理は、
図13に示すフローチャートのステップSB7及び光学的情報読取装置1、1Aの運用時に実行することができる。
【0158】
図15に示すフローチャートのスタート後のステップSD1では、
図14に示すフローチャートのステップSC1で選択した画像処理フィルタを読取画像に対してフィルタ処理部20cが実行する。このとき、
図16の上側に示すような読取画像に対してフィルタ処理部20cが平均化フィルタを実行した場合には、
図16の下側に示すような画像処理フィルタ実行後の画像が得られる。
【0159】
その後、ステップSD2に進み、必要に応じて読取画像の縮小・拡大処理を実行する。具体的には、画像処理フィルタ実行後の読取画像におけるコードのPPCが特定範囲内である場合には、縮小または拡大を非実行にする一方、特定範囲外である場合には、縮小または拡大を実行し、PPCが特定範囲内に入るようにする。
図17の上側に、縮小処理後の読取画像の例を示している。
【0160】
次いで、ステップSD3では、抽出部20gが、ステップSD2で縮小または拡大された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する。
図17の下側に、コード候補領域抽出画像の例を示している。尚、ステップSD2で縮小または拡大されていない場合には、ステップSD3で元の読取画像に対して抽出処理が実行されることになる。
【0161】
その後、ステップSD4に進み、推論処理部20jが、ステップSD3で抽出されたコード候補領域に対応する部分画像をニューラルネットワークに入力して推論処理を実行する。
図18に推論処理実行前の読取画像と推論処理実行後の理想画像の例を示している。理想画像の生成後、ステップSD5~SD7を経てこのフローが終了する。ステップSD5~SD7は、
図14に示すフローチャートのステップSC7~SC9と同じである。
【0162】
(超解像処理を含んだ運用時の第1の例)
光学的情報読取装置1、1Aの運用時に超解像処理を実行する場合の第1の例について、
図19に示すフローチャートに基づいて説明する。スタート後のステップSE1では、抽出部20gが、カメラ5により生成された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する。
図20に画像例を示すように、読取画像中の矩形枠で囲まれた領域がコード候補領域であり、このコード候補領域を部分画像として抜き出す。
【0163】
その後、ステップSE2に進み、部分画像に対してフィルタ処理部20cが画像処理フィルタを実行する。画像処理フィルタは、ノイズ除去フィルタである。特にカメラ5とコードとが離れている遠距離撮影時においては照明がコードまで届かず、カメラ5は自動明るさ制御にてゲインを上げるためランダムノイズが増える場合がある。ランダムノイズが多い状態で超解像処理を実行すると、ノイズを強調してしまいセル復元に悪影響が出ることがある。したがって、超解像処理を実行する前にノイズ除去フィルタを実行して余分なノイズを落とすことで、超解像処理の効果を高めることができる。ノイズ除去フィルタとして通常の平均化フィルタではセルの情報をつぶしてしまうことがあるため、例えばL1スパースモデリング等を利用したノイズ除去を実行する。また、このとき、コントラストの調整も行う。画像処理フィルタ後の部分画像を
図20の下側に示す。ステップSE1とステップSE2とは順番が逆でもよい。すなわち、画像処理フィルタの実行後に、コード候補領域を抽出してもよい。
【0164】
次いで、ステップSE3に進み、画像処理フィルタ処理後の部分画像に対して超解像処理部20kが超解像処理を実行する。これにより、
図21の下側に示すように、拡大画像が生成される。この例では、拡大率が2倍の場合を示している。その後のステップSE4~SE6は、
図14に示すフローチャートのステップSC7~SC9と同じである。
【0165】
(超解像処理を含んだ運用時の第2の例)
光学的情報読取装置1、1Aの運用時に超解像処理を実行する場合の第2の例について、
図22に示すフローチャートに基づいて説明する。第2の例を説明する前に、2種類のデコード処理について説明する。上述したように本実施形態では、カメラ5により生成された読取画像に超解像処理部20kが超解像処理を実行することなく、当該読取画像に対してデコード処理部20fがデコード処理する場合と、カメラ5により生成された読取画像に超解像処理部20kが超解像処理を実行して拡大画像を生成し、生成した拡大画像に対してデコード処理部20fがデコード処理する場合とがある。前者の場合、即ち、読取画像に対してデコード処理する場合を第1デコード処理といい、後者の場合、即ち、超解像処理で生成された拡大画像に対してデコード処理する場合を第2デコード処理という。
【0166】
第1デコード処理及び第2デコード処理は、共にデコード処理部20fで実行されるが、異なるデコード処理部で実行するようにしてもよい。すなわち、プロセッサ20は、専用コア25と第1~第4汎用コア21~24とを有しているので、専用コア25で構成される超解像処理部20kによる超解像処理と、第1~第4汎用コア21~24の少なくとも1つで構成されるデコード処理部20fによる第1デコード処理とを並列的にかつ高速で実行することができる。さらに、プロセッサ20は、超解像処理部20kによる超解像処理の完了後に、デコード処理部20fによる第2デコード処理を実行することができる。
【0167】
一例として、第1汎用コア21が第1デコード処理を実行し、第2汎用コア22が第2デコード処理を実行することができる。具体的には、第1汎用コア21が第1デコード処理を実行する間に専用コア25が超解像処理を実行する。第2汎用コア22は、超解像処理が終了すると、第1デコード処理の終了を待つことなく、第2デコード処理を実行する。これにより、第1デコード処理と第2デコード処理とをそれぞれ別の汎用コアで実行できるので、処理がより一層高速になる。
【0168】
また、プロセッサ20の第1~第4汎用コア21~24のうち、任意の1つは、第1デコード処理と第2デコード処理とを別スレッドで並列的に実行するように構成されていてもよい。具体的には、例えば第1汎用コア21が第1デコード処理を実行する間に専用コア25が超解像処理を実行する。第1汎用コア21は、超解像処理が終了すると、第1デコード処理の終了を待つことなく、第1デコード処理とは別スレッドで第2デコード処理を実行する。
【0169】
図22に示すフローチャートのスタート後のステップSF1では、プロセッサ20が読取画像を取得する。その後、ステップSF2で第1デコード処理、即ち、読取画像に対してデコード処理部20fがデコード処理を実行する。第1デコード処理後にステップSF3に進み、読み取りが成功したか否かを判定する。読み取りが成功しなければ、ステップSF2に戻り、第1デコード処理を再度実行する。所定回数(時間)経過しても読み取りが成功しなければタイムアウトとなり、デコード処理を終了する。一方、ステップSF3で読み取りが成功したと判定された場合には、デコード処理を終了する。
【0170】
また、ステップSF1からステップSF2に進むのと並行してステップSF4に進む。ステップSF4では、抽出部20gが、カメラ5により生成された読取画像の中からコードが存在する可能性が高いコード候補領域を抽出する。その後、ステップSF5に進み、ステップSF4で抽出された複数のコード候補領域の中から任意の1つのコード候補領域を選択し、ステップSF6に進む。
【0171】
ステップSF6では、カメラ5により生成された読取画像に超解像処理部20kが超解像処理を実行して拡大画像を生成する。この例では、超解像処理を専用コア25が実行するようにしているが、汎用コア21~24が実行してもよい。拡大画像の生成と、ステップSF2の第1デコード処理とは並行して実行される。ステップSF6で拡大画像を生成した後、ステップSF7に進み、第2デコード処理、即ち、ステップSF6で生成した拡大画像に対してデコード処理部20fがデコード処理を実行する。第2デコード処理後にステップSF8に進み、読み取りが成功したか否かを判定する。読み取りが成功しなければ、ステップSF5に戻り、別のコード候補領域を選択した後、ステップSF6、SF7に順に進み、第2デコード処理を再度実行する。所定回数(時間)経過しても読み取りが成功しなければタイムアウトとなり、デコード処理を終了する。一方、ステップSF8で読み取りが成功したと判定された場合には、デコード処理を終了する。
【0172】
ステップSF2に進む場合と、ステップSF4に進む場合とをPPC値によって区別することができる。例えば、PPC値が所定値を超える場合にはステップSF2に進み、一方、PPC値が所定値以下の場合には、ステップSF4に進むように判定する判定部をプロセッサ20に設けることができる。具体的には、PPC値が2.0以上である場合には、ステップSF2に進み、一方、PPC値が2.0未満である場合には、ステップSF4に進むように判定部を構成することができる。これにより、幅広いPPCのコードをデコード処理することができる。特に、手持ち式の光学的情報読取装置1Aでは、コードまでの距離やコードサイズが一定でない場合が多いが、このような場合であっても本例ではデコード処理の成功率を高めることができる。また、定置式の光学的情報読取装置1では設置自由度を高めることができる。
【0173】
ステップSF4~SF8をキャンセルする機能を光学的情報読取装置1に設けてもよい。ステップSF4~SF8は、超解像処理及び第2デコード処理を実行するステップであるが、特に超解像処理には時間を要するため、ステップSF4~SF8をキャンセルすることで、処理を高速化できる。ステップSF4~SF8をキャンセルする方法としては、例えばユーザの操作による方法がある。例えば、パラメータセット記憶部40cに記憶されるパラメータの一つとして、超解像処理を実行するか否かの選択パラメータを含んでいてもよい。この選択パラメータをユーザが変更することで、超解像処理を実行するモードと、実行しないモードとの一方に切り替えることができる。選択パラメータとしては、例えば「速度優先モード」の選択パラメータであってもよい。「速度優先モード」がユーザにより選択された場合には、超解像処理を実行しないモードで動作させ、一方、「速度優先モード」が選択されない場合には、超解像処理を実行するモードで動作させる。尚、チューニングによって得られた情報に基づいて、超解像処理が不要な状況であると判定される場合には超解像処理を自動的にキャンセルするようにしてもよい。
【0174】
(超解像処理を含んだ運用時の第3の例)
光学的情報読取装置1、1Aの運用時に超解像処理を実行する場合の第3の例について、
図23に示すフローチャートに基づいて説明する。第3の例は、手持ち式の光学的情報読取装置1Aを使用してコードを読み取る場合に適用可能な例である。上述したように、手持ち式の光学的情報読取装置1Aで小さなコードや遠距離でコードの読み取りを行うときは、エイマー光を頼りにコードを読む。
図5に示すようにエイマー光学系は通常、カメラ光学系と光軸が異なるため、
図6に示すようにエイマー光10dの中心とカメラ5の視野5dの中心とは、ずれることが多い。超解像処理を実行する領域は処理時間の都合上、小さい方がよいので、第3の例では、エイマー光10dとの位置関係によって超解像処理を実行する領域を限定する。
【0175】
図23に示すフローチャートのスタート後、読取画像が入力されるとステップSG1で領域抽出部20gがエイマー光10d(
図8に示す)の位置を検出する。このステップSG1では、例えば、
図8に示すようなエイマー光10dが写る読取画像をカメラ5で生成してエイマー光10dの位置を画像処理で検出する方法や、光学的情報読取装置1Aとコードとの距離と、エイマー光10dの視野5d内における位置との関係を事前に計算して記憶装置30等に記憶させておき、周知の距離センサやカメラ5のフォーカス情報等を利用して光学的情報読取装置1Aとコードとの距離を取得し、取得した距離に基づいてエイマー光10dの視野5d内における位置を算出する方法等を適用できる。
【0176】
その後、ステップSG2に進み、領域抽出部20gがエイマー光10dの位置に基づいてコード候補領域を決定する。このステップSG2では、
図8に示すように、エイマー光10dの位置が検出されると、その中心を含む所定範囲の領域をコード候補領域として決定し、その領域をコード候補領域に対応する部分画像とする。
【0177】
次いで、ステップSG3に進み、フィルタ処理部20cがコード候補領域に対応する部分画像に対してノイズ除去フィルタ処理を実行するとともに、コントラスト調整を実行する。その後、ステップSG4に進み、フィルタ処理後の部分画像に対して超解像処理部20kが超解像処理を実行して拡大画像を生成する。ステップSG5~SG7は、
図19に示すフローチャートのステップSE4~SE6と同じである。
【0178】
(超解像処理を含んだ運用時の第4の例)
光学的情報読取装置1、1Aの運用時に超解像処理を実行する場合の第4の例について、
図24に示すフローチャートに基づいて説明する。第4の例は、手持ち式の光学的情報読取装置1Aを使用してコードを読み取る場合に適用可能な例であり、カメラ5とコードとの距離に応じて超解像処理の実行と非実行を切り替える制御を含んでいる。
【0179】
すなわち、
図25に示すように、超解像処理を実行したい場合は、カメラ5とコードとが離れていてピクセル分解能が低くなる長距離の場合と、小さなコード(小コード)を近距離で読む場合とがある。カメラ5とコードとの距離を測定して近距離(距離d≦距離d1)または長距離(距離d≧距離d2)の場合にのみ超解像処理を実行することで、中距離で超解像処理を実行することによる処理速度の低下を回避することができる。
【0180】
図24に示すフローチャートのステップSH1~SH3は、
図22に示すフローチャートのステップSF1~SF3と同じである。ステップSH1からステップSH2に進むのと並行してステップSH4に進む。ステップSH4では、プロセッサ20が、カメラ5とコードとの距離が中距離にあるか否かを判定する。具体的には、
図25に示すように、カメラ5の撮像素子5aの受光面とコードとの距離dを測定する。距離dは、例えば距離センサやカメラ5のフォーカス情報等を利用して取得できる。そして、距離dが距離d1以下である(近距離である)か、距離dが距離d2以上である(遠距離である)場合にはステップSH5に進む。一方、距離dが距離d1を超え、かつ、距離d2未満である(中距離である)場合には、超解像処理の実行が不要な距離であると判断し、終了する。距離d1、距離d2は、読取画像に含まれるコードのPPCが所定値以下となる距離とすることができる。
【0181】
その後、ステップSH5に進む。ステップSH5~SH9は、
図22に示すフローチャートのステップSF4~SF8と同じである。
【0182】
(タスクシーケンスの説明)
図26は、読取画像に対してデコード処理する第1デコード処理で読み取りが成功した場合のタスクシーケンス図である。この図では、制御タスク、第1デコード処理タスク、第2デコード処理タスク及び超解像処理タスクを示しており、制御タスクが第1デコード処理タスクに読み取り実行命令1を出すと、第1デコード処理を開始する。第1デコード処理で読み取りが成功した段階で読み取り成功通知2を制御タスクに出す。制御タスクは、読み取り成功通知2を受けると、処理終了命令3を第1デコード処理タスクに出し、第1デコード処理タスクは処理終了通知4を制御タスクに出す。
【0183】
また、制御タスクは、第2デコード処理タスクに読み取り実行命令5を出すと、第2デコード処理タスクは、超解像処理タスクに超解像開始命令6を出す。超解像処理タスクは超解像処理が完了すると超解像完了通知7を第2デコード処理タスクに出す。その後、第2デコード処理タスクは、超解像処理タスクに次の超解像開始命令8を出す。その後、処理終了通知4が制御タスクに出されたので、制御タスクは、処理終了命令9を第2デコード処理タスクに出す。第2デコード処理タスクは、超解像処理タスクに超解像終了命令10を出し、超解像処理タスクは超解像終了通知11を第2デコード処理タスクに出す。次いで、第2デコード処理タスクは、処理終了通知12を制御タスクに出して読み取りを終了する。つまり、プロセッサ20は、第1デコード処理でデコードに成功した場合は、超解像処理部20jによる超解像処理が完了していなくても、超解像処理を途中で終了させるように構成されている。これにより、次の超解像処理を早期に開始できる。
【0184】
図27は、超解像処理で生成された拡大画像に対してデコード処理する第2デコード処理で読み取りが成功した場合のタスクシーケンス図である。制御タスクが第1デコード処理タスクに読み取り実行命令1を出し、第2デコード処理タスクに読み取り実行命令2を出す。第2デコード処理タスクは、超解像処理タスクに超解像開始命令3を出す。超解像処理タスクは超解像処理が完了すると超解像完了通知4を第2デコード処理タスクに出す。その後、第2デコード処理タスクは、超解像処理タスクに次の超解像開始命令5を出す。
【0185】
第2デコード処理タスクは、超解像完了通知4を受けて第2デコード処理を開始する。第2デコード処理で読み取りが成功し、第2デコード処理タスクが制御タスクに読み取り成功通知6を出すと、制御タスクは第2デコード処理タスクに処理終了命令7を出す。このとき、制御タスクは第1デコード処理タスクにも処理終了命令8を出す。
【0186】
第2デコード処理タスクが処理終了命令7を受けると、超解像処理タスクに超解像終了命令9を出し、超解像処理タスクは第2デコード処理タスクに超解像終了通知10を出す。また、第1デコード処理タスクは制御タスクに処理終了通知11を出す。また、第2デコード処理タスクは制御タスクに処理終了通知12を出す。この例では、第2デコード処理でデコードに成功した場合に、超解像処理部20kによる超解像処理を終了させることができる。
【0187】
図28は、第1デコード処理と第2デコード処理で読み取りが成功した場合のタスクシーケンス図である。制御タスクが第1デコード処理タスクに読み取り実行命令1を出し、第2デコード処理タスクに読み取り実行命令2を出す。第2デコード処理タスクは、超解像処理タスクに超解像開始命令3を出す。第1デコード処理タスクは、第1デコード処理を開始する。第1デコード処理で読み取りが成功し、第1デコード処理タスクが制御タスクに読み取り成功通知4を出すと、制御タスクは第2デコード処理タスクに処理終了命令5を出す。第2デコード処理タスクは制御タスクに処理終了通知6を出す。
【0188】
一方、超解像処理タスクは超解像処理が完了すると超解像完了通知7を第2デコード処理タスクに出す。その後、第2デコード処理タスクは、超解像処理タスクに次の超解像開始命令8を出す。第2デコード処理タスクは、超解像完了通知7を受けて第2デコード処理を開始する。第2デコード処理で読み取りが成功し、第2デコード処理タスクが制御タスクに読み取り成功通知9を出すと、制御タスクは第2デコード処理タスクに処理終了命令10を出す。
【0189】
第2デコード処理タスクが処理終了命令10を受けると、超解像処理タスクに超解像終了命令11を出し、超解像処理タスクは第2デコード処理タスクに超解像終了通知12を出す。第2デコード処理タスクは超解像終了通知12を受け取った後、制御タスクに処理終了通知13を出す。この例では、第1デコード処理及び第2デコード処理の両方でデコードに成功した場合に、超解像処理部20kによる超解像処理を終了させることができる。
【0190】
図29は、第2デコード処理で2回読み取りが成功した場合のタスクシーケンス図である。制御タスクが第1デコード処理タスクに読み取り実行命令1を出し、第2デコード処理タスクに読み取り実行命令2を出す。第2デコード処理タスクは、超解像処理タスクに超解像開始命令3を出す。超解像処理タスクは超解像処理が完了すると超解像完了通知4を第2デコード処理タスクに出す。その後、第2デコード処理タスクは、超解像処理タスクに次の超解像開始命令5を出す。第2デコード処理タスクは、超解像完了通知4を受けて第2デコード処理を開始する。第2デコード処理で読み取りが成功し、第2デコード処理タスクが制御タスクに読み取り成功通知6を出す。
【0191】
その後、超解像処理タスクでは2回目の超解像処理が完了して2回目の超解像完了通知7を第2デコード処理タスクに出す。第2デコード処理タスクは、2回目の超解像完了通知7を受けて2回目の第2デコード処理を開始する。2回目の第2デコード処理でも読み取りが成功し、第2デコード処理タスクが制御タスクに読み取り成功通知8を出す。この間、第1デコード処理タスクでは読み取りが成功していないので、第1デコード処理タスクから読み取り成功通知は出されない。
【0192】
制御タスクは第2デコード処理タスクに処理終了命令9を出す。第2デコード処理タスクが処理終了命令9を受けると、超解像処理タスクに超解像終了命令10を出し、超解像処理タスクは第2デコード処理タスクに超解像終了通知11を出す。第2デコード処理タスクは超解像終了通知11を受け取った後、制御タスクに処理終了通知12を出す。また、制御タスクは第1デコード処理タスクに処理終了命令13を出すと、第1デコード処理タスクは制御タスクに処理終了通知14を出す。この例では、1回目の第2デコード処理及び2回目の第2デコード処理の両方でデコードに成功した場合に、超解像処理部20kによる超解像処理を終了させることができる。
【0193】
(実施形態の作用効果)
以上説明したように、この実施形態によれば、読取画像に含まれるコードを構成する各モジュールのピクセル数を示すPPCを拡大した拡大画像をニューラルネットワークによって生成することができる。これにより、読取が可能なPCCの下限を引き下げることができるので、例えば遠距離で撮影されたコードやモジュールサイズの小さなコードのデコード処理が可能になる。
【0194】
上述の実施形態はあらゆる点で単なる例示に過ぎず、限定的に解釈してはならない。さらに、特許請求の範囲の均等範囲に属する変形や変更は、全て本発明の範囲内のものである。
【産業上の利用可能性】
【0195】
以上説明したように、本発明に係る光学的情報読取装置は、例えばワークに付されたコードを読み取る場合に利用することができる。
【符号の説明】
【0196】
1 定置式の光学的情報読取装置
1A 手持ち式の光学的情報読取装置
5、5A カメラ
10 エイマー光照射部(光照射部)
20 プロセッサ
20f デコード処理部
20g 領域抽出部
20n PPC値取得部
20k 超解像処理部
21~24 第1~第4汎用コア
25 専用コア