以下、本発明の光学情報読取装置の実施形態について図を参照して説明する。
[第1実施形態]
まず、本発明の光学情報読取装置を二次元コードリーダ20に適用した第1実施形態を図1〜図5に基づいて説明する。
図1に示すように、二次元コードリーダ20は、主に、照明光源21、受光センサ23、フィルタ25、結像レンズ27等の光学系と、メモリ35、制御回路40、操作スイッチ42、液晶表示装置46等のマイクロコンピュータ(以下「マイコン」という)系と、電源スイッチ41、電池49等の電源系と、から構成されている。なお、これらは、図略のプリント配線板に実装あるいは図略のハウジング内に内装されている。
光学系は、照明光源21、受光センサ23、フィルタ25、結像レンズ27等から構成されている。照明光源21は、照明光Lfを発光可能な照明光源として機能するもので、例えば、赤色のLEDとこのLEDの出射側に設けられる拡散レンズ、集光レンズ等とから構成されている。本実施形態では、受光センサ23を挟んだ両側に照明光源21が設けられており、図略のハウジングの読取口を介して読取対象物Rに向けて照明光Lfを照射可能に構成されている。この読取対象物Rは、例えば、包装容器や包装用紙あるいはラベルといった表示媒体に相当するもので、その表面には情報コードQとして例えば二次元コードが印刷されている。
受光センサ23は、読取対象物Rや情報コードQに照射されて反射した反射光Lrを受光可能に構成されるもので、例えば、C−MOSやCCD等の固体撮像素子である受光素子を2次元に配列したエリアセンサが、これに相当する。この受光センサ23の受光面23aは、ハウジング外から読取口を介して外観可能に位置しており、受光センサ23は、結像レンズ27を介して入射する入射光をこの受光面23aで受光可能に図略のプリント配線板に実装されている。
フィルタ25は、反射光Lrの波長相当以下の光の通過を許容し、当該波長相当を超える光の通過を遮断し得る光学的なローパスフィルタで、ハウジングの読取口と結像レンズ27との間に設けられている。これにより、反射光Lrの波長相当を超える不要な光が受光センサ23に入射することを抑制している。
結像レンズ27は、外部から読取口を介して入射する入射光を集光して受光センサ23の受光面23aに像を結像可能な結像光学系として機能するもので、例えば、鏡筒とこの鏡筒内に収容される複数の集光レンズとにより構成されている。本実施形態では、照明光源21から照射された照明光Lfが情報コードQに反射して読取口に入射する反射光Lrを集光することにより、受光センサ23の受光面23aに情報コードQのコード画像を結像可能にしている。
次に、マイコン系の構成概要を説明する。マイコン系は、増幅回路31、A/D変換回路33、メモリ35、アドレス発生回路36、同期信号発生回路38、制御回路40、操作スイッチ42、LED43、ブザー44、液晶表示装置46、通信インタフェース48等から構成されている。このマイコン系は、その名の通り、マイコン(情報処理装置)として機能し得る制御回路40およびメモリ35と中心に構成されるもので、前述した光学系によって撮像された情報コードQの画像信号をハードウェア的およびソフトウェア的に信号処理し得るものである。また制御回路40は、当該二次元コードリーダ20の全体システムに関する制御も行っている。
光学系の受光センサ23から出力される画像信号(アナログ信号)は、増幅回路31に入力されることで所定ゲインで増幅された後、A/D変換回路33に入力されると、アナログ信号からディジタル信号に変換される。そして、ディジタル化された画像信号、つまり画像データ(画像情報)は、メモリ35に入力されると、画像データ蓄積領域に蓄積される。なお、同期信号発生回路38は、受光センサ23およびアドレス発生回路36に対する同期信号を発生可能に構成されており、またアドレス発生回路36は、この同期信号発生回路38から供給される同期信号に基づいて、メモリ35に格納される画像データの格納アドレスを発生可能に構成されている。
メモリ35は、半導体メモリ装置で、例えばRAM(DRAM、SRAM等)やROM(EPROM、EEPROM等)がこれに相当する。このメモリ35のうちのRAMには、前述した画像データ蓄積領域のほかに、制御回路40が算術演算や論理演算等の各処理時に利用する作業領域や読取条件テーブルも確保可能に構成されている。またROMには、後述する読取処理等を実行可能な所定プログラムやその他、照明光源21、受光センサ23等の各ハードウェアを制御可能なシステムプログラム等が予め格納されている。
制御回路40は、二次元コードリーダ20全体を制御可能なマイコンで、CPU、システムバス、入出力インタフェース等からなるもので、メモリ35とともに情報処理装置を構成し得るもので情報処理機能を有する。この制御回路40には、内蔵された入出力インタフェースを介して種々の入出力装置(周辺装置)と接続可能に構成されており、本実施形態の場合、電源スイッチ41、操作スイッチ42、LED43、ブザー44、液晶表示装置46、通信インタフェース48等を接続されている。
これにより、例えば、電源スイッチ41や操作スイッチ42の監視や管理、またインジケータとして機能するLED43の点灯・消灯、ビープ音やアラーム音を発生可能なブザー44の鳴動のオンオフ、さらには読み取った情報コードQによるコード内容を画面表示可能な液晶表示装置46の画面制御や外部装置とのシリアル通信を可能にする通信インタフェース48の通信制御等を可能にしている。なお、情報コードQの読み取りの可否を音や光で知らせる報知手段に相当し得るものである。また、通信インタフェース48に接続される外部装置には、当該二次元コードリーダ20の上位システムに相当するホストコンピュータHST等が含まれる。
電源系は、電源スイッチ41、電池49等により構成されており、制御回路40により管理される電源スイッチ41のオンオフによって、上述した各装置や各回路に、電池49から供給される駆動電圧の導通や遮断が制御されている。なお、電池49は、所定の直流電圧を発生可能な2次電池で、例えば、リチウムイオン電池等がこれに相当する。また、電池49によることなく、例えば、通信インタフェース48を介して接続されるホストコンピュータHST等の外部装置から電力供給を受ける構成を採る場合もあり、この場合には当該電池49は不要となる。
このように二次元コードリーダ20を構成することによって、例えば、電源スイッチ41がオンされて所定の自己診断処理等が正常終了し、情報コードQの読み取りが可能な状態になると、照明光Lfの発光を指示する操作スイッチ42(例えばトリガースイッチ)の入力を受け付ける。これにより、作業者がトリガースイッチを押圧しオンにすることで、制御回路40が同期信号を基準に照明光源21に発光信号を出力するので、当該発光信号を受けた照明光源21は、LEDを発光させて照明光Lfを照射する。
すると、情報コードQに照射された照明光Lfが反射しその反射光Lrが読取口およびフィルタ25を介して結像レンズ27に入射するため、受光センサ23の受光面23aには、結像レンズ27により情報コードQの像、つまりコード画像が結像される。これにより、受光素子が露光されるので、制御回路40による読取処理のコード画像取得処理によって画像信号によるコード画像の取得が可能となり、取得されたコード画像を2値化した後、所定の情報処理を施すことによって、このような情報コードQとして符号化された文字データ等をデコード、つまり読み取り可能にしている。
そして、デコードに成功した場合には、その旨を示す報知出力(例えば「OK」の文字、短いビープ音や緑色光)を、またデコードに失敗した場合には、その旨を示す報知出力(例えば「NG」の文字、長いビープ音や赤色光)を、液晶表示装置46、ブザー44やLED43により出力することによって、当該二次元コードリーダ20の使用者に情報コードQの読み取りの可否を報知する。また、デコードに成功した場合には、デコードされたデータ、つまり情報コードQの内容を液晶表示装置46に出力したり、通信インタフェース48を介してホストコンピュータHSTに出力する。
このような動作の概要が、二次元コードリーダ20による情報コードQの基本的な読取動作となるが、[発明が解決しようとする課題]の欄で述べたように、二次元コードリーダ20がデータ量の多い情報コードQを読み取る場合には、比較的データ量の少ない情報コードQを読み取るときに比べ、読み取りの可否を知らせる音や光あるいは表示といった報知出力が遅くなりがちになる。このため、データ量の少ない情報コードQの読み取りに慣れている使用者に対しては、ビープ音の鳴動やLEDの点灯等がいつもよりも遅れて出てくるという違和感やレスポンスの悪さから、読み取りフィーリングを悪化させ得る。
そこで、本実施形態に係る二次元コードリーダ20では、以下説明する読取処理により比較的データ量の少ない情報コードQを読み取る場合とほぼ同様に読み取りの可否をレスポンス良く出力可能にしている。
次に、二次元コードリーダ20による二次元コードの読取処理の概要を図2〜図5に基づいて説明する。なお、この読取処理は、前述したメモリ35を構成するROM等に格納されている所定プログラムを制御回路40が実行することにより実現されるもので、情報コードQとして二次元コードの一種であるQRコードを読み取り可能にしている。このため、以下の説明では、QRコードの読み取り処理を例示して説明する。
図2に示すように、二次元コードリーダ20による二次元コードの読取処理では、まずステップS101によりコード画像取得処理が行われる。この処理は、受光センサ23に検出されてメモリ35の画像データ蓄積領域に蓄積されたコード画像を当該領域から取得するもので、取得されたコード画像は次の位置検出パターン検出処理に渡される。
次のステップS103では、位置検出パターン検出処理が行われる。この処理は、QRコードに特有の3つの位置検出要素パターンの存在を当該コード画像中で検出することにより、読取対象となる情報コードQがQRコードであるか否かを判断したり、そのコードが占める範囲(以下「コード領域」という。)を検出可能にするものである。
ここで、QRコードの位置検出要素パターンの例等を図4を参照して説明する。図4(A) に示すように、QRコードの位置検出要素パターンFPは、QRコードの基本仕様(日本工業規格;JIS X 0510:2004、以下これを単に「JIS規格」という。)により、正方形状からなる、暗(黒色等)の7×7セルα、明(白色等)の5×5セルβおよび暗の3×3セルγの3個が同心正方形状に重なって構成されている。ここにいう「セル」とは、QRコードを構成する最小構成要素のことで、データ1ビットに相当しその幅であるセルピッチCpは、これらのセル最小幅をなす。
例えば、暗の7×7セルαは7セル分のセルピッチCpで、明の5×5セルβは5セル分のセルピッチCp、暗の3×3セルγは3セル分のセルピッチCp、となる。このため、位置検出要素パターンFPを横断または縦断するように明暗情報を走査すると、暗、明、暗、明、暗の順番で同色セルの連続比率が1:1:3:1:1となる画像範囲が当該位置検出要素パターンFPである可能性の高いことがわかる。なお、QRコードでは、同色セルの連続比率がこのような1:1:3:1:1となる可能性を、後述するマスク処理による明暗のバランス調整により抑制しているため、このような連続比率のセルの組み合わせを見つけることにより、位置検出要素パターンFPを検出可能にしている。
また、QRコードでは、図4(B) に示すように、このような位置検出要素パターンFPを、一般に、その左上、左下および右上の3箇所の隅に配置して位置検出パターンを構成することによって、当該情報コードQがQRコードであるか否か、またQRコードであればそのコード領域を検出可能にしている。ここで再び図2に戻る。
ステップS103により、コード画像において位置検出パターンを検出すると、続くステップS105では、位置検出パターンを検出できたか否かを判断する処理が行われる。この処理は、ステップS103により、QRコードの3箇所の隅に配置される位置検出要素パターンFPを全て検出することができたか否かを確認するもので、位置検出パターンを検出できた場合には(S105;Yes)、次のステップS107に処理を移行し、位置検出パターンを検出できていない場合には(S105;No)、この段階で読み取りエラーを起こしていることがわかるので、後述するステップS131に処理を移行する。
ステップS107では、マスク解除処理が行われる。この処理は、前述したように、位置検出要素パターンの同色セルの連続比率である1:1:3:1:1に相当するセルの列びを当該コード領域内に存在しないように施されたマスク処理による明暗のバランス調整を解除するものである。なお、マスク処理は、QRコードのエンコード時に施されるもので、その詳細は、QRコードの基本仕様(JIS規格)に記載されており、マスク解除処理は、マスク処理の手順を逆方向に行うことで可能となる。
続くステップS109では一部デコード処理が行われる。この処理は、読取対象となるQRコードの一部分(一部)を残りの部分(残部)に先行してデコードする処理で、この処理の流れは、図3(A) に記載されている。そのため、ここでは図3(A) を参照して説明する。
図3(A) に示すように、一部デコード処理では、ステップS201により、セル数算出処理が行われる。この処理は、QRコードの各辺の長さをセルピッチCp単位で測定して、その平均をとることで、一辺当たりのセル数を求めるものである。
例えば、図4(B) に示すように、QRコードのクワイエットゾーンを除いたコード領域内の最外側に位置するセルにより構成される4辺S1,S2,S3,S4についてそれぞれセルピッチCp単位で長さを測定する(S1/Cp,S2/Cp,S3/Cp,S4/Cp)。そして、これにより得られた各辺の長さをすべて加算してその平均をとる演算([(S1/Cp)+(S2/Cp)+(S3/Cp)+(S4/Cp)]/4)を行うことによって1辺当たりのセル数を算出する。このように各辺の長さをすべて加算してその平均をとるのは、QRコードのコード画像に歪みが生じて各辺の長さに誤差を含んでいる場合があるので、このような場合に4辺の平均を求めることにより各辺の誤差を吸収して誤差の影響を抑制するためである。
次のステップS203では、誤り訂正レベル判定処理が行われる。この処理は、ステップS201により得られた1辺当たりのセル数に基づいて、当該QRコードの型番情報を検出した後、該当する型番から形式情報の所在位置を求めて当該形式情報に基づいて誤り訂正レベルの判定を行う。具体的には、図4(C) に示すようなコードワードテーブルに基づいて行われる。
即ち、型番情報は、一般に、1型から40型までの40種類のものが存在し、1型は21×21セル、2型は25×25セル、…、40型は177×177セルというように、型番が1つ上がるごとに一辺につき4セルずつ増加するように、型番と一辺当たりのセル数との関係がJIS規格により定められている。また、形式情報には、4種類の誤り訂正レベル(L,M,Q,H)を判定できるように所定のビット列が設定されている。なお、この型番情報や形式情報についても、QRコードの基本仕様(JIS規格)に記載されているので、詳細はJIS X 0510:2004を参照されたい。
このため、図4(C) に示すように、ステップS203により算出されたセル数が、例えば21前後であれば、当該コードワードテーブルを参照することにより、セル数「21×21」から型番情報は「1型」に相当することがわかる。これにより、QRコードのコード画像から「1型」に対応する形式情報を得ることにより、誤り訂正レベルを判定することが可能となる。
ステップS205では、コードワード数算出処理が行われる。この処理は、ステップS203で参照したコードワードテーブルを再び参照して該当する誤り訂正レベルに対応するコードワード数に基づいて一部読み取りを行うコードワード数を算出する。例えば、型番が「1型」で、誤り訂正レベルが「L」である場合、当該コードワードテーブルを参照すると、データビット数は152ビット、データ容量は、数字で41文字、英数字で25文字、バイナリデータで17データ(1データ/8ビット)、漢字で10文字、にそれぞれ相当することがわかる。
また、読取対象となるQRコードの先頭から数文字相当分を読み出すことにより、当該QRコードに含まれているデータが、数字、英数字、バイナリデータおよび漢字のいずれに相当するものであるかを判別することができる。このため、例えば、当該QRコードに含まれているデータが、英数字である場合には、「1型」で誤り訂正レベルが「L」のQRコードには、25文字の英数字が含まれていることがわかるので、この文字数に所定割合を乗算して一部読み取りを行うコードワード数を算出する。
例えば、この所定割合が20%に設定されている場合には、5文字(=25文字×0.2)を一部読み取りのコードワード数とする。なお、本実施形態では、この所定割合は、例えば、QRコードの場合には、誤り訂正機能が付加されているので、経験的に30%前後(20%〜40%)としている。
このようにステップS205により、一部読み取りを行うコードワード数が算出されると、次のステップS207によりデコード範囲を決定する処理が行われる。即ち、ステップS205によるコードワード数に基づいて、読取対象となるQRコードのコード画像中のどの部分をデコードすれば良いかをこのステップS207により決定する。例えば、先の例の場合、25文字中の5文字分(20%)を他の20文字分(80%)よりも先に一部読み取りするので、先頭の文字を含めて先頭から5番目までの文字を、他の文字(6番目以降)に先行して次のステップS209により読み取ることを決定する。
続くステップS209では、ステップS207により決定されたデコード範囲に基づいて、一部読み取り、つまり一部の文字等についてデコード処理を行い、これによりデコードされた結果(一部読取情報)はステップS211によりメモリ35の所定の作業領域に出力される。なお、このステップS209によるデコード処理は、デコードする範囲が限定されている点を除いては、通常のQRコードのデコードと変わりはなく、基本的なデコードのアルゴリズムは、例えば、特許第2938338号公報等に公知のものを用いる。このようにして一部デコード処理が行われると、図2に示す読取処理に処理を移行する。
図2に示すように、ステップS111では、一部デコードが成功したか否かを判断する処理が行われる。前述したようにステップS109の一部デコード処理によってメモリ35の所定の作業領域には一部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて一部デコードは成功したか否かを判断する。そして、一部デコードが成功したと判断される場合には(S111;Yes)、続くステップS113に処理を移行して報知処理を行う。これに対し、一部デコードが成功したと判断されない場合、つまり一部デコードが失敗した場合には(S111;No)、読み取りエラーを起こしていることになるので、ステップS131に処理を移行する。
続くステップS113では、報知処理を開始する処理が行われる。報知処理は、デコードに成功した旨を示す報知出力(所定報知の連続出力)をブザー44等の出力装置に出力するもので、ここではその開始を指示する。例えば、当該出力装置が、ブザー44である場合には連続したビープ音、LED43である場合には緑色発光、液晶表示装置46である場合には「OK」の文字、といった内容の出力開始命令を該当する出力装置に出力する。この処理は、図5(A) に示す(5A1)や図5(C) に示す(5C1)のタイミングに行われる。
一方、ステップS131でも報知処理を開始する処理が行われる。こちらの報知処理はデコードに失敗した旨を示す報知出力(所定報知の連続出力)をブザー44等の出力装置に出力するもので、ここではその開始を指示する。このため、この報知処理では、例えば、当該出力装置が、ブザー44である場合には連続したビープ音、LED43である場合には赤色発光、液晶表示装置46である場合には「NG」の文字、といった内容の出力開始命令を該当する出力装置に出力する。この処理は、図5(B) に示す(5B1)のタイミングに行われる。
次のステップS115では、残部デコード処理が行われる。この処理は、前述したステップS109により先に読み取ったQRコードの一部分(一部)に対する残りの部分(残部)をデコードする処理で、この処理の流れは、図3(B) に記載されている。そのため、ここでは図3(B) を参照して説明する。
図3(B) に示すように、残部デコード処理では、ステップS301により、コードワード数算出処理が行われる。この処理は、残部読み取りを行うコードワード数を算出する処理で、前述した一部デコード処理ではデコードしなかった他の部分(残部)のコードワード数を算出する。例えば、先の例の場合、一部デコード処理により25文字中の5文字分(20%)を一部読み取りしているので、25文字から5文字を減算した結果の20文字(=25文字−5文字)が残部読み取りを行うコードワード数となる。
続くステップS303では、デコード開始位置算出処理が行われる。この処理は、前述した一部デコード処理により既にデコード済みのコードワード数に基づいて、読取対象となるQRコードのコード画像中のどの部分からデコードを開始すれば良いかをこのステップS303により算出する。例えば、先の例では、先頭から5番目までの5ワード分を既に一部デコード処理によりデコードしているので、先頭から6番目をデコード開始位置として算出する。
次のステップS305では、デコード範囲決定処理が行われる。この処理では、ステップS301、S303により算出されたコードワード数およびデコード開始位置に基づいて、読取対象となるQRコードのコード画像中のどの部分をデコードすれば良いかをこのステップS305により決定する。例えば、先の例の場合、ステップS303により算出したデコード開始位置の先頭から6番目から、ステップS301により算出した20文字を、続くステップS307により読み取ることを決定する。
続くステップS307では、ステップS305により決定されたデコード範囲に基づいて、残部読み取り、つまり残りの文字等についてデコード処理を行う。そして、これによりデコードされた結果(残部読取情報)は、ステップS309によりメモリ35の所定の作業領域に出力される。なお、このステップS307によるデコード処理も、前述した一部デコード処理のステップS209と同様に、デコードする範囲が限定されている点を除いては、通常のQRコードのデコードと変わりはないので、基本的なデコードのアルゴリズムは、例えば、特許第2938338号公報等に公知のものを用いる。このようにして残部デコード処理が行われると、図2に示す読取処理に処理を移行する。
図2に示すように、ステップS117では、残部デコードが成功したか否かを判断する処理が行われる。前述したようにステップS115の残部デコード処理によってメモリ35の所定の作業領域には残部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて残部デコードは成功したか否かを判断する。そして、残部デコードが成功したと判断される場合には(S117;Yes)、続くステップS119に処理を移行してデコード結果結合処理を行う。
これに対し、残部デコードが成功したと判断されない場合、つまり残部デコードが失敗した場合には(S117;No)、読み取りエラーを起こしていることになるので、デコードに失敗した旨を示す報知出力をブザー44等の出力装置に出力したうえで、ステップS133に処理を移行する。例えば、当該出力装置が、ブザー44である場合には連続したビープ音、LED43である場合には赤色発光、液晶表示装置46である場合には「NG」の文字、といった内容の出力命令を該当する出力装置に出力する。この場合は、図5(C) に示すものに該当するので、同図に示す(5C2)のタイミングで出力される。
ステップS133は、読み取りエラーを起こしている場合に行われるタイマー処理で、所定時間を経過するまで当該ステップS133を繰り返し行うものである。この所定時間は、ステップS115、S117、S119による処理時間よりも十分に長い時間、例えばステップS115〜S119による処理時間の3倍〜5倍、あるいは2秒、3秒等の固定時間に設定されている。
なお、このステップS133によるタイマー処理の後は、後述するステップS123により報知処理が終了されるまで連続した報知が継続されるので、例えば、図5(A)〜図5(C)に示すように、ビープ音が継続する長さの違い(成功時は短いビープ音(図5(A) )、失敗時は長いビープ音(図5(B)および図5(C)))により、当該二次元コードリーダ20の使用者に読み取りエラーの有無、つまり読み取りの可否を知らせることができる。この成功時の短いビープ音(図5(A) )の継続時間は、特許請求の範囲に記載の「所定報知の連続出力の開始から終了までの連続報知時間」に相当し得るものである。また、失敗時の長いビープ音(図5(B)および図5(C))は、特許請求の範囲に記載の「連続報知時間よりも長く所定報知を連続出力して終了」するものに相当し得るもので、その継続時間は連続報知時間よりも長い。
続くステップS119では、デコード結果結合処理が行われる。この処理は、一部デコード処理(S109)によりデコードされた結果(一部読取情報)と残部デコード処理(S115)によりデコードされた結果(残部読取情報)とを連結することによって、読取対象となるコード画像の全部のデコード結果(全部読取情報)を当該QRコードの読取結果として生成するものである。
例えば、先の例の場合、一部デコード処理(S109)によりデコードされた先頭から5文字分(第1文字〜第5文字)のデコード結果と、残部デコード処理(S115)によりデコードされた先頭より6文字から20文字分(第6文字〜第25文字)のデコード結果と、を連結することによって、全体の25文字分(第1字〜第25文字)のデコード結果、つまり読取結果を生成する。
次のステップS121では、デコード結果出力処理が行われる。この処理は、ステップS119により生成した当該QRコードの読取結果等を液晶表示装置46や通信インタフェース48に出力するものである。即ち、QRコードの読み取りに成功した場合には(S111;Yes、S117;Yes)、その旨を示す成功コードとデコード後の解読データ(読取結果)を出力する。例えば、出力装置が、液晶表示装置46である場合には解読データの内容を表示し、ホストコンピュータHSTである場合には成功コードおよび解読データ(読取結果)を通信インタフェース48を介して出力する(同図に示す(5A2)のタイミング)。
これに対し、QRコードの読み取りに失敗した場合には(S105;No、S111;No、S117;No)、その旨を示す失敗コードを出力する。例えば、出力装置が液晶表示装置46である場合には既に「NG」の文字を表示しているのでこの処理では特に表示せず、また出力装置がホストコンピュータHSTである場合には失敗コードインタフェース48を介して出力する(同図に示す(5B3),(5C3)のタイミング)。
ステップS121によるデコード結果出力処理の次には、ステップS123により報知処理を終了する処理が行われる。この処理は、ステップS113やステップS131により開始された報知処理を終了させるもので、例えば、当該出力装置が、ブザー44である場合にはそれまで連続して鳴動していたビープ音を停止させ、LED43である場合にはそれまで発光していたLED43を消灯させる。当該出力装置が、また液晶表示装置46である場合にはそれまで出力されていた文字表示を終了する。
以上説明したように本第1実施形態による二次元コードリーダ20によると、メモリ35および制御回路40により、受光センサ23および結像レンズ27により検出されたQRコードのコード画像の一部を取り出し、少なくとも当該一部のコード画像の読み取りを試み(S101、S103、107、S109)、読み取り可能である場合には(S111;Yes)、コード画像の全部の読み取りに成功すると判断する。そして、ブザー44、LED43または液晶表示装置46により、制御回路40等による判断結果(ブザー44は連続したビープ音、LED43は緑色発光、液晶表示装置46は「OK」の文字)を、制御回路40等がコード画像の全部を読み取る(S119)前に使用者に報知する(S113)。これにより、QRコードのコード画像の全部を読み取ってから読み取りに成功すると判断する場合に比べてレスポンス良く読み取りの可否を早く使用者に知らせることが可能となる。したがって、当該二次元コードリーダ20の使用者は、読取対象となるQRコードのデータ量が多くても、当該QRコードの読み取りが成功することを早期に把握できるので、ビープ音の鳴動、LEDの点灯または液晶画面の表示がいつもよりも遅れて出てくるという違和感を与えることなく読み取りフィーリングを向上させることができる。
また、本第1実施形態による二次元コードリーダ20によると、制御回路40等により読み取られた一部のコード画像に対する一部デコード処理(S109)によるデコード結果と残部のコード画像に対する残部デコード処理(S115)によるデコード結果とを連結することによって(S119)、読取対象となるコード画像の全部のデコード結果を当該QRコードの解読データとして出力する。これにより、制御回路40等により読み取られた一部デコード処理(S109)によるデコード結果を無駄なく使用するので、制御回路40等がコード画像の全部を再度読み取る場合に比べて、確定的な読み取り結果を早く出力することができる。
さらに、本第1実施形態による二次元コードリーダ20によると、(1) 制御回路40等がコード画像の全部の読み取りに成功すると判断し(S111;Yes)、さらに(1a)制御回路40等によりコード画像の残部の読み取りを成功したと判断されるときには(S117;Yes)、所定の連続報知を終了(S123)するので、制御回路40等がコード画像の全部の読み取りに成功すると判断してから(S111;Yes)、制御回路40等がコード画像の残部の読み取りを成功したと判断されるときまで(S117;Yes)の間、所定の連続報知を行う。これに対し、(1) 制御回路40等がコード画像の全部の読み取りに成功すると判断しても(S111;Yes)、(1b)制御回路40等によりコード画像の残部の読み取りを成功したと判断されないときには(S117;No)、所定報知の連続出力の開始から終了までの連続報知時間よりも長く所定報知を連続出力(S133;Yes)して終了する(S123)。
つまり、制御回路40等によりコード画像の残部において読み取りに失敗したと判断した場合(読み取りエラーの場合)には(S117;No)、読み取りに成功したと判断した場合の連続報知時間よりも長く継続して所定報知を行う(S133、S123)。これにより、この(1) &(1b)の場合は、(2) 制御回路40等により当初からコード画像の全部の読み取りに失敗すると判断した場合(読み取りエラーの場合)(S111;No)と同様になるので、(1) &(1b)の場合も(2) の場合と同様に、当該二次元コードリーダ20の使用者に所定の連続報知の時間的長さによって読み取りエラーを知らせることができる。
さらにまた、本第1実施形態による二次元コードリーダ20によると、制御回路40等により、受光センサ23等により検出されたQRコードのコード画像の一部を取り出し、少なくとも当該一部のコード画像の読み取りを試み(S101、S103、107、S109)、読み取り不可能である場合には(S111;No)、コード画像の全部の読み取りに失敗すると判断する。そして、ブザー44、LED43または液晶表示装置46により、制御回路40等による判断結果(ブザー44は連続したビープ音、LED43は赤色発光、液晶表示装置46は「NG」の文字)を、制御回路40等がコード画像の全部を読み取る(S119)前に使用者に報知する(S131)。これにより、QRコードのコード画像の全部を読み取ってから読み取りに失敗すると判断する場合に比べてレスポンス良く読み取りの可否を早く使用者に知らせることが可能となる。したがって、当該二次元コードリーダ20に使用者は、読取対象となるQRコードのデータ量が多くても、当該QRコードの読み取りが失敗したことを早期に把握できるので、読み取りフィーリングを向上し、また素早く再読み取りの動作に移行することができる。
なお、上述した第1実施形態では、情報コードの例として、QRコードを例示して説明したが、二次元コードであればこれに限られることはなく、例えば、PDF417、データマトリックス、マキシコード、RSSコンポジット等の各種のコードシンボルでも、上述同様の作用および効果を得ることができる。
[第2実施形態]
次に、本発明の光学情報読取装置を一次元コードリーダに適用した第2実施形態を図6〜図9に基づいて説明する。
なお、本第2実施形態に係る一次元コードリーダの構成は、前述した第1実施形態に係る二次元コードリーダ20と実質的に同一である。このため、ここでは一次元コードリーダの構成を示すブロック図およびそれらの説明を省略する。
一次元コードリーダによる一次元コードの読取処理の概要を図6〜図9に基づいて説明する。なお、この読取処理も、前述した第1実施形態の二次元コードリーダ20による二次元コードの読取処理と同様に、図1に示すメモリ35を構成するROM等に格納されている所定プログラムを制御回路40が実行することにより実現されるもので、情報コードQとして一次元コードの一種である例えばJANコードを読み取り可能にしている。なお、第1実施形態の読取処理とほぼ同様に処理されるステップは、その旨を明示して説明を省略する。
図6に示すように、一次元コードリーダによる一次元コードの読取処理では、まずステップS501によりコード画像取得処理が行われる。この処理は、第1実施形態の読取処理によるもの(S101)とほぼ同様に処理されるもので、これにより取得されたコード画像は次のコード領域検出処理に渡される。
次のステップS503では、コード領域検出処理が行われる。この処理は、バーコードの範囲、つまり仮想の外形枠を検出するもので、公知のアルゴリズムにより行われる。例えば、図9に示すように、ステップS501によって取得されたコード画像の外形枠fを検出したり、外形枠fの高さhや幅wを検出する。
続くステップS505では、スキャン間隔算出処理が行われる。この処理は、ステップS503により検出されたバーコードの外形枠fの高さhに基づいて、その幅w方向にスキャン可能なスキャンライン(走査線)の本数とそのスキャン間隔(走査間隔)をカウントするために行われるものである。通常、スキャンラインの本数は標準で3本程度に設定されるが、バーコードの高さhが低いとスキャン間隔が狭くなり、場合によってはスキャンラインの本数を3本よりも減らして2本または1本に設定する。これに対し、バーコードの高さhが高いとスキャン間隔が広くなるため、スキャンラインの本数を3本よりも増やして4本や5本に設定する。
ステップS507では、ステップS505により算出されたスキャンラインの本数に基づいて走査可能なスキャンラインが存在するか、つまりスキャンラインの本数が1本以上であるか否かを判断する処理が行われる。そして、スキャン可能なスキャンラインが存在する場合には(S507;Yes)、続くステップS509に処理を移行し、またスキャン可能なスキャンラインが存在しない場合には(S507;No)、この段階で読み取りエラーを起こしていることがわかるので、後述するステップS531に処理を移行する。
続くステップS509では一部デコード処理が行われる。この処理は、読取対象となるバーコードの一部分(一部)を残りの部分(残部)に先行してデコードする処理で、この処理の流れは、図7(A) に記載されている。そのため、ここでは図7(A) を参照して説明する。
図7(A) に示すように、一部デコード処理では、ステップS601により、コードワード数算出処理が行われる。この処理は、ステップS503により検出されたコード画像の外形枠fの高さhおよび幅wの比率に基づいて、当該コード画像に対応するバーコードのコードワード数を概算し、それにより得られたコードワード数に所定割合を乗算することにより算出する。例えば、コードワード数が20で、所定割合が50%に設定されている場合には、10文字(=20文字×0.5)を一部読み取りのコードワード数とする。本実施形態では、この所定割合は、QRコードのように誤り訂正機能が付加されていないので、経験的に50%前後(40%〜60%)としている。なお、コードワード数は、所定の演算式による概算あるいは図5(C) に示すセル数相当を外形枠fの高さhおよび幅wに対応させたコードワードテーブルをメモリ35等に持つことでこれを参照して求める。
次のステップS603では、部分デコード処理が行われる。この処理は、読取対象となるバーコードを部分的にデコードする処理で、この処理の流れは、図8に記載されているので、ここでは図8および図9を参照して説明する。
なお、このステップS603では、バーコードの左側(紙面左)の先頭からスキャンを開始するので(図9に示す(9A)方向)、当該部分デコード処理が行われる前に、スキャンラインは上段方向1本目、スキャン開始位置は1文字目およびスキャン方向は右側(紙面右)、にそれぞれ設定可能に所定の引数またはフラグ等がセットされる。
図8に示すように、部分デコード処理では、ステップS700によりスキャンライン設定処理が行われ、またステップS701によりスキャン開始位置設定処理が行われ、さらにステップS703によりスキャン方向設定処理が行われる。前述したように、スキャンラインは上段方向1本目、スキャン開始位置は1文字目、スキャン方向は右方向に、所定の引数またはフラグ等がセットされているので、まず最初は、これらのステップS700、S701、703では、そのように設定される。これにより、図9に示すように、まずはスキャンラインXで右方向9Aにスキャンされることになる。
次のステップS705では、スキャン方向を判断する処理が行われる。そして、スキャン方向が右であれば、ステップS707により右方向のスキャンが行われ、またスキャン方向が左であれば、ステップS708により左方向のスキャンが行われる。図9に示すように、最初のスキャンの場合、スキャン方向は右方向に設定されているので(S705;右、図9に示す(9A)方向)、ステップS707により右方向のスキャンを行う。
スキャンが行われると、次にステップS709によりデコード処理が行われる。このデコード処理は、ステップS601により設定されたコードワード数分をデコードするもので、デコードする範囲が限定されている点を除いては、通常のバーコードのデコードと変わりはなく、基本的なデコードのアルゴリズムは公知のものを用いる。先の例の場合、一部読み取りのコードワード数は、10文字に設定されているので、左端の先頭から10文字分をデコードする。
続くステップS711では、予定ワード数分のデコードは成功したか否かを判断する処理が行われる。この処理は、先のステップS709による一部読み取りのコードワード数分が正常にデコードできたか否かを判断するもので、例えば、バーコードの周囲に汚れ等が存在することによって、前述したステップS503によりこのような汚れをバーコードの一部と誤認してコード領域を検出した場合等においては、正常にデコードできないことからこのような場合には(S711;No)、続くステップS713に処理を移行する。
これに対し、正常にデコードできデコードに成功した場合には(S711;Yes)には、予定したコードワード数分の読み取りが終了しているので、ステップS717に処理を移行する。先の例では、一部読み取りのコードワード数は、10文字に設定されているので、左端の先頭から10文字分のデコードが成功している場合には(S711;Yes)、ステップS717に処理を移行し、成功していない場合には(S711;No)、ステップS713に処理を移行する。ここではデコードに成功していないとして(S711;No)、ステップS713に処理を移すとする。
続くステップS713では、左右両方向のデコードを失敗したか否かを判断する処理が行われる。即ち、ステップS711によるデコードが成功していないので、この失敗が左右両方向のスキャンに対するものであるか否かを判断する。そして、両方向ともデコードを失敗している場合には(S713;Yes)、開始位置の変更が可能であるか否かを判断するためにステップS715に処理を移行し、そうでない場合には(S713;No)には残りの方向のスキャンを行うため、スキャン方向を反対側に設定した後、ステップS703に処理を移行する。例えば、先の例では、図9に示すように、最初は右方向9AにスキャンラインXでスキャンしたので、次のスキャン方向をその反対方向にしてステップS703に処理を戻す。
ステップS703に処理を戻すと、今度は、スキャン方向を先の右方向とは反対の左方向に設定した後、ステップS705により左を選択してステップS708により左方向のスキャンを行う。これにより、図9に示す左方向9BにスキャンラインXでスキャンしたデコード処理が可能になるので、続くステップS709によりデコード処理を行い、その結果から次のステップS711により予定ワード数分のデコードは成功したか否かを判断する。ここでは、ステップS711により予定ワード数分のデコードが成功していなとしてステップS713に処理を移行する。ステップS713では、前述と同様に左右両方向のデコードを失敗したか否かを判断する処理が行われるが、今回は、両方向ともデコードを失敗しているので(S713;Yes)、ステップS715に処理を移行して開始位置の変更が可能であるか否かを判断する。
ステップS715では、開始位置の変更が可能であるか否かを判断する処理が行われる。この処理は、ステップS503により検出された外形枠fの幅wとステップS701により設定されるスキャン開始位置とに基づいて行われるもので、当該スキャン開始位置がの外形枠wの半分に到達しているか否かを判断する。つまり、スキャン開始位置が外形枠wの1/2に到達している場合には、それ以上開始位置を変更してもその反対側からのスキャンにより既にデコードの可否を確認しているので、重複したスキャンおよびデコードを防止する必要上、開始位置の変更は不可能であるとするものである。
そのため、スキャン開始位置が外形枠wの1/2に到達している場合には、スキャン開始位置の変更は不可能であると判断して(S715;No)、続くステップS716に処理を移行し、そうでない場合には、まだスキャン開始位置の変更は可能であると判断して(S715;Yes)、ステップS701に処理を移行する。今回の例では、開始位置は、まだ1文字目であるので、外形枠fの幅wの半分に到達していないことから(S715;Yes)、ステップS701に処理を戻す。
ステップS701に処理を戻すと、今度は、スキャン開始位置を2文字目に設定した後、続くステップS703により前回とは反対の右方向にスキャン方向を設定した後、さらにステップS705により右を選択してステップS707により右方向のスキャンを行う。これにより、図9に示す左方向9CにスキャンラインXでスキャンしたデコード処理が可能になるので、続くステップS709によりデコード処理を行い、その結果から次のステップS711により予定ワード数分のデコードは成功したか否かを判断する。
本実施形態では、このようにスキャン方向とスキャン開始位置とを交互に変更することにより、スキャンの範囲を外形枠fの内側に向かって徐々に狭めるので、バーコード以外の汚れによりコード領域を誤って広めに検出した場合等においても、やがてバーコードを正常にデコードすることが可能となる。
また、ステップS505によりカウントしたスキャンラインの本数とステップS700により設定されたスキャンラインの位置(何本目か)とにより、ステップS716では、未だスキャンされていないスキャンラインが存在するか否かを判断する。これにより、未スキャンラインが存在する場合には(S716;Yes)、ステップS700に処理を移行することにより、現在のスキャンラインよりも下段方向のスキャンラインが選択されるので、新しいスキャンラインについて、ステップS701〜S715による各処理が実行される。例えば、図9に示す例では、現在のスキャンラインがスキャンラインXである場合には、その下段方向のスキャンラインYがステップS700により選択されてスキャンラインXと同様にスキャン処理およびデコード処理が行われる。
このようにバーコードについて所定のワード数分だけデコード処理が正常に行われると、ステップS717によりそのデコード結果がメモリ35の所定の作業領域に格納されて本部分デコード処理を終了する。このようにして部分デコード処理が行われると、図7(A) に示す一部デコード処理に処理を移行し、さらに図6に示す読取処理に処理を戻す。
図6に示すように、ステップS511では、一部デコードが成功したか否かを判断する処理が行われる。前述したようにステップS509の一部デコード処理によってメモリ35の所定の作業領域には一部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて一部デコードは成功したか否かを判断する。そして、一部デコードが成功したと判断される場合には(S511;Yes)、続くステップS513に処理を移行して報知処理を行う。これに対し、一部デコードが成功したと判断されない場合、つまり一部デコードが失敗した場合には(S511;No)、読み取りエラーを起こしていることになるので、ステップS531に処理を移行する。
続くステップS513では、報知処理を開始する処理が行われる。この報知処理は、第1実施形態の読取処理によるもの(S113)とほぼ同様に処理されるもので、これにより出力された出力開始命令を受けてブザー44等の出力装置では、連続したビープ音や緑色発光あるいは「OK」の文字を出力する。また、ステップS531による報知処理も、第1実施形態の読取処理によるもの(S131)とほぼ同様に処理され、ブザー44等の出力装置では、連続したビープ音や赤色発光あるいは「NG」の文字を出力する。
次のステップS515では、残部デコード処理が行われる。この処理は、前述したステップS509により先に読み取ったバーコードの一部分(一部)に対する残りの部分(残部)をデコードする処理で、この処理の流れは、図7(B) に記載されている。そのため、ここでは図7(B) を参照して説明する。
図7(B) に示すように、残部デコード処理では、ステップS801により、コードワード数算出処理が行われる。この処理は、残部読み取りを行うコードワード数を算出する処理で、前述した一部デコード処理ではデコードしなかった他の部分(残部)のコードワード数を算出する。例えば、先の例の場合、一部デコード処理により20文字中の10文字分(50%)を一部読み取りしているので、20文字から10文字を減算した結果の10文字(=20文字−10字)が残部読み取りを行うコードワード数となる。
続くステップS803では、デコード開始位置算出処理が行われる。この処理は、前述した一部デコード処理により既にデコード済みのコードワード数に基づいて、読取対象となるバーコードのコード画像中のどの部分からデコードを開始すれば良いかをこのステップS803により算出する。例えば、先の例では、先頭から10番目までの10ワード分を既に一部デコード処理によりデコードしているので、先頭から11番目をデコード開始位置として算出する。
次のステップS805では、部分デコード処理が行われる。この処理は、読取対象となるバーコードを部分的にデコードする処理で、既にステップS603で説明したものと同じである。そのため、ここでは説明を省略するが、このステップS805では、バーコードの左側(紙面左)の先頭から11文字目からスキャンを開始するので、当該部分デコード処理が行われる前に、スキャンラインは上段方向1本目、スキャン開始位置は11文字目およびスキャン方向は右側(紙面右)、にそれぞれ設定可能に所定の引数またはフラグ等がセットされる。このようにして残部デコード処理が行われると、図6に示す読取処理に処理を移行する。
図6に示すように、ステップS517では、残部デコードが成功したか否かを判断する処理が行われる。前述したようにステップS515の残部デコード処理によってメモリ35の所定の作業領域には残部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて残部デコードは成功したか否かを判断する。そして、残部デコードが成功したと判断される場合には(S517;Yes)、続くステップS519に処理を移行してデコード結果結合処理を行う。
これに対し、残部デコードが成功したと判断されない場合、つまり残部デコードが失敗した場合には(S517;No)、読み取りエラーを起こしていることになるので、デコードに失敗した旨を示す報知出力をブザー44等の出力装置に出力したうえで、ステップS533に処理を移行する。これにより、ブザー44等の出力装置は、連続したビープ音、赤色発光あるいは「NG」の文字を出力する。
続くステップS519では、デコード結果結合処理が行われる。この処理は、第1実施形態の読取処理によるもの(S119)と同様に処理されるもので、例えば、先の例の場合、一部デコード処理(S509)によりデコードされた先頭から10文字分(第1文字〜第10文字)のデコード結果と、残部デコード処理(S515)によりデコードされた先頭より11文字から20文字分(第11文字〜第20文字)のデコード結果と、を連結することによって、全体の20文字分(第1字〜第20文字)のデコード結果、つまり読取結果を生成する。
また、ステップS533は、読み取りエラーを起こしている場合に行われるタイマー処理で、このタイマー処理も、第1実施形態の読取処理によるもの(S133)と同様に処理されるので、ここでは説明を省略する。このステップS533によるタイマー処理の後は、後述するステップS523により報知処理が終了されるまで連続した報知が継続されるが、これも第1実施形態の読取処理によるもの(S123)と同様で、ビープ音が継続する長さの違い(成功時は短いビープ音、失敗時は長いビープ音)により、当該一次元コードリーダの使用者に読み取りエラーの有無、つまり読み取りの可否を知らせる。
次のステップS521ではデコード結果出力処理が行われ、またステップS523では報知処理を終了する処理が行われる。これらの処理も、第1実施形態の読取処理によるもの(S121、S123)とそれぞれ同様に処理される。即ち、ステップS519により生成した当該バーコードの読取結果等を液晶表示装置46や通信インタフェース48に出力するものである。即ち、バーコードの読み取りに成功した場合には(S511;Yes、S517;Yes)、その旨を示す成功コードとデコード後の解読データ(読取結果)を液晶表示装置46等の出力装置し、失敗した場合には(S507;No、S511;No、S517;No)、その旨を示す失敗コードを液晶表示装置46等に出力する。そして、それまでブザー44等の出力装置に連続して出力されていたビープ音等の報知出力を終了する。
以上説明したように本第2実施形態による一次元コードリーダによると、メモリ35および制御回路40により、受光センサ23および結像レンズ27により検出されたバーコードのコード画像の一部を取り出し、少なくとも当該一部のコード画像の読み取りを試み(S501、S503、505、S509)、読み取り可能である場合には(S511;Yes)、コード画像の全部の読み取りに成功すると判断する。そして、ブザー44、LED43または液晶表示装置46により、制御回路40等による判断結果(ブザー44は連続したビープ音、LED43は緑色発光、液晶表示装置46は「OK」の文字)を、制御回路40等がコード画像の全部を読み取る(S519)前に使用者に報知する(S513)。これにより、バーコードのコード画像の全部を読み取ってから読み取りに成功すると判断する場合に比べてレスポンス良く読み取りの可否を早く使用者に知らせることが可能となる。したがって、当該一次元コードリーダの使用者は、読取対象となるバーコードのデータ量が多くても、当該バーコードの読み取りが成功することを早期に把握できるので、ビープ音の鳴動、LEDの点灯または液晶画面の表示がいつもよりも遅れて出てくるという違和感を与えることなく読み取りフィーリングを向上させることができる。
また、本第2実施形態による一次元コードリーダによると、制御回路40等により、受光センサ23等により検出されたバーコードのコード画像の一部を取り出し、少なくとも当該一部のコード画像の読み取りを試み(S501、S503、505、S509)、読み取り不可能である場合には(S511;No)、コード画像の全部の読み取りに失敗すると判断する。そして、ブザー44、LED43または液晶表示装置46により、制御回路40等による判断結果(ブザー44は連続したビープ音、LED43は赤色発光、液晶表示装置46は「NG」の文字)を、制御回路40等がコード画像の全部を読み取る(S519)前に使用者に報知する(S531)。これにより、バーコードのコード画像の全部を読み取ってから読み取りに失敗すると判断する場合に比べてレスポンス良く読み取りの可否を早く使用者に知らせることが可能となる。したがって、当該一次元コードリーダに使用者は、読取対象となるバーコードのデータ量が多くても、当該バーコードの読み取りが失敗したことを早期に把握できるので、読み取りフィーリングを向上し、また素早く再読み取りの動作に移行することができる。
なお、上述した第2実施形態では、情報コードの例として、バーコード(JANコード)を例示して説明したが、一次元コードであればこれに限られることはなく、例えば、EAN/UPC、インターリーブド2オブ5、コーダバー、コード39/128、スタンダード2オブ5、RSS等の各種のコードシンボルでも、上述同様の作用および効果を得ることができる。
[第3実施形態]
次に、前述した第1,2実施形態の改変例にあたる、本発明の光学情報読取装置を二次元コードリーダに適用した第3実施形態を図10〜図15に基づいて説明する。
なお、本第3実施形態に係る二次元コードリーダの構成は、前述した第1実施形態に係る二次元コードリーダ20と実質的に同一である。このため、ここでは二次元コードリーダの構成を示すブロック図およびそれらの説明を省略する。
まず、前述した第1,2実施形態に係る二次元コードリーダ等が有し得る技術的な新たな課題について、図2、図5および図13を参照して説明する。図5を参照して説明したように、二次元コードリーダ20等では、二次元コードの読取処理において一部デコードが成功したと判断される場合には(S111;Yes)、続くステップS113により報知処理を開始してさらにステップS115により残部デコード処理を行う。
そして、デコード結果を結合して(S119)、さらに出力(S121)した後にステップS123により報知処理を終了する。つまり、報知処理の開始(S113)から報知処理の終了(S123)までの間には、残部デコード処理(S115)、デコード結果結合処理(S119)やデコード結果出力処理(S121)等が介在することから、これらの処理が行われている時間、報知処理が継続して行われることになる。
このため、例えば、二次元コードの情報量が比較的多い場合(QRコードであれば40型(177×177セル)のもの)や、二次元コードのデコードに時間を要する場合(QRコードであればその誤り訂正レベルが「H」に設定されているもの)等には、ステップS115による残部デコード処理に要する時間が1秒以上要することもあるので、図13(A) に示すように、たとえ読み取りが成功してもその出力期間が(図13(A) に示す13A1〜13A2)、図13(B) に示すような読取失敗時の出力期間に近い長さになり得る可能性がある(図13(B) に示す13B1〜13B3)。
そして、このような場合には、当該二次元コードリーダ20等の使用者は、読取成功時のビープ音として、「ピーッ」といった比較的長くて読取失敗時のビープ音に似た長さのものを聴くことになるので、情報量が比較的少ない読取成功時の「ピロッ」といったビープ音に比べて違和感を覚えたり、また読み取りを失敗したものと誤解することがある。
つまり、第1,2実施形態に係る二次元コードリーダ20等では、二次元コードの読取処理において、当該コードの一部のデコードが成功すると、残りのデコードの完了を待つことなく先行して報知処理を開始するように構成したことから(S111;YesでS113)、残部のデコードに時間がかかる場合には、その分、報知処理の終了が遅れてしまう(S123)。その結果、残部のデコードにそれほど時間がかからない場合に比べ、ビープ音等が間延びするので、使用者に違和感や誤解を与え得るという技術的な課題が存在する。
そこで、本第3実施形態に係る二次元コードリーダでは、このような読取成功時におけるビープ音等の間延びを解消するため、二次元コード20等の読取処理として、図10〜図12に示すものを構成することとした。以下、本第3実施形態に係る読取処理を図10〜図15に基づいて説明する。なお、図10において、図5に示す読取処理と同一の構成部分には同一符号を付し説明を省略する。
図10に示すように、本第3実施形態に係る読取処理では、まず、ステップS101によりコード画像取得処理が行われ、続くステップS103により位置検出パターンの検出処理が行われて、位置検出パターンが検出できた場合には(S105;Yes)、ステップS107によるマスク解除処理が、また位置検出パターンが検出できていない場合には(S105;No)、後述するステップS819による報知処理2の起動処理が、それぞれ行われる。そして、ステップS107によるマスク解除処理が済むとステップS109により一部デコード処理が行われて、一部デコードが成功しなかった場合には(S111;No)、後述するステップS819による報知処理2の起動処理が行われる。
このようにステップ101からステップS111までは、図5に示す第1実施形態に係る二次元コードリーダ20の読取処理と同様に行われる。また、図10に示すように、ステップS115からステップS121までの各処理も、第1実施形態に係る二次元コードリーダ20の読取処理と同様に行われる。
即ち、ステップS115により残部デコード処理が終了し、残部デコードが成功した場合には(S117;Yes)、続くステップS119により一部デコードしたデコード結果と残部デコードしたデコード結果とを結合する処理が行われ、これにより結合されたデコード結果をステップS123により出力装置に出力する処理が行われる。また、残部デコードが失敗した場合には(S117;No)、デコード結果としてその旨を示す失敗コードを出力装置に出力する。このとき、図11を参照して後述するように、ステップS1070による判断でデコード失敗時の処理を行う(S1080,S1090)。
このようにステップS101からステップS111までと、ステップS115以降は、前述した二次元コードリーダ20等の読取処理と同様に構成しているが、本第3実施形態では、ステップS111以降ステップS115以前までの各処理を次のように変更した。
図10に示すように、ステップS111により一部デコードが成功したと判断されると(S111;Yes)、続くステップS810では、残部デコード推定時間の計算処理を行う。この処理は、ステップS101により取得されたコード画像に基づいて行われるもので、例えば、当該二次元コードのコード画像から解析されるコードの種別(QRコード、PDF417、データマトリックス、マキシコード、RSSコンポジット等の各種コードシンボル)、当該コードに含まれるデータ量、コードの誤り訂正レベル等に基づいて、予め用意されたデータベース等を参照することによって推定される。
例えば、当該二次元コードのコード画像から解析されるコードの種別がQRコードである場合には、前述したように、QRコードの先頭から数文字相当分を読み出すことにより、当該QRコードに含まれているデータが、数字、英数字、バイナリデータおよび漢字のいずれに相当するものであるか、また誤り訂正レベルやデータビット数(データ量)を判別することができる(図4(c) 参照)。
このため、40型(177×177セル)のQRコードで、誤り訂正レベルが「H」のものであれば、データ量は10208ビットであるため、このようなQRコードをデコードするのに要する時間を、既存の1000種類のコード画像をデコードして得られた1000サンプル分のデコード時間を統計処理したものから、標準的なデコード時間を求め、これをメモリ35に記憶しておき、これに基づいて未デコード分に対応する残部デコードに要する時間を推定する。例えば、40型のQRコードの標準的なデコード時間が800mSecである場合に、全体(100%)に対する残部デコードの割合が60%であるときには、480mSec(=800mSec×0.6)となる。なお、この標準的なデコード時間は、二次元コードリーダ20等を構成するCPUの処理速度やメモリのアクセス速度等によって左右される。
また、当該コードに含まれるデータ量のほかに、当該コード画像の画像品質に基づいて残部デコード推定時間の計算処理を行っても良い。具体的には、当該コード画像の画像品質を解析することによって得られるコードの歪み、かすれ、にじみ、白・黒の明暗差のそれぞれの度合いや、QRコードであれば、位置検出要素パターン(切り出しシンボルともいう(図4(A) 参照))の存在が隅の3箇所に認識できない場合、また位置検出要素パターンを構成する白・黒のセルが、黒、白、黒、白、黒の順番で同色セルの連続比率が1:1:3:1:1になっていない場合、さらに正方形状であるべきQRコードの四辺S1〜S4の各長さが大きく異なる場合(図4(B) 参照)、等々、様々なコード画像をデコードしてデコード時間のサンプルデータを得る。そして、これを統計処理して得られた標準的なデコード時間をメモリ35に記憶しておき、これに基づいて未デコード分に対応する残部デコードに要する時間を推定する。
このようにしてステップS810により算出された残部デコード推定時間を、次のステップS811により成功時報知時間と比較する。「成功時報知時間」とは、ステップS109による一部デコードおよびステップS115による残部デコードのいずれもに成功した場合に連続して報知出力されるべき時間のことで、例えば、図14(A) に示すように、時間t1(50mSec)の短い期間が設定される。報知出力は、ビープ音である場合には、時間t1(50mSec)の「ピッ」という鳴動音に相当する時間になる。
そして、ステップS810により、残部デコード推定時間が成功時報知時間t1よりも大きい(長い)と判断された場合には(S811;Yes)、残部のデコードに時間が成功時報知時間t1よりもかかることになるので、その分、報知処理の開始を遅らせる必要から、次のステップS813により報知待ち時間の算出を行う。例えば、図14(B) に示すように、残部デコード推定時間t2が90mSecである場合には、このt2(90mSec)からt1(50mSec)を減算した値t3である40mSec(=90mSec−50mSec)が報知待ち時間となる。
これに対し、ステップS810により、残部デコード推定時間が成功時報知時間t1よりも大きい(長い)と判断されない場合には(S811;No)、成功時報知時間t1内で、残部デコードが終了する可能性が高いので、報知処理の開始を遅らせる必要がない。このため、特に、ステップS815により報知待ち時間を求めることなく、ステップS817に処理を移行する。
ステップS817では、報知処理1を起動させる処理を行う。この報知処理1は、当該読取処理と並列に実行されるものであるため、ここからは、図11を参照して説明する。図11に示すように、報知処理1では、まずステップS1010によりカウンタをリセットする処理を行い、続くステップS1020により前述した報知待ち時間t3を超えるまでループする(S1020;No)。そして、報知待ち時間t3を超えると(S1020;Yes)、ステップS1030により報知を開始し、次いでカウンタをリセットする。
そして、ステップS1050により図10に示すメインルーチンのデコード処理が終わるまでループして待つ(S1050;Yes)。例えば、図15(A) に示すように、残部デコード推定時間t2が90mSecであるにもかかわらず、それを超えて残部デコード処理を行っている場合には、その残部デコード処理にかかった時間t4(100mSec)から残部デコード推定時間t2(90mSec)を減算した値10mSec(=100mSec−90mSec)を超えるまでループして待つ(S1050;Yes)。
デコード処理が終わると(S1050;No)、さらに報知時間t1を超えるまでループして待つ(S1060;No)。例えば、図14(A) に示すように、残部デコード推定時間t2が40mSecである場合には、このt2(40mSec)を報知時間t1(50mSec)から減算した値10mSec(=50mSec−40mSec)だけ待つことになる。また、例えば、図15(B) に示すように、残部デコード推定時間t2が90mSecであるにもかかわらず、それを下回って速くに残部デコード処理を終えている場合には、その残部デコード処理にかかった時間t4(70mSec)を残部デコード推定時間t2(90mSec)から減算した値20mSec(=90mSec−70mSec)を超えるまでループして待つ(S1060;No)。これにより、ビープ音が読取り成功時相当に延長して出力されるため、極端に短いビープ音になることなく、このような場合における違和感を与え難くすることができるので読み取りフィーリングを向上することができる。
即ち、図10に示すメインルーチンのステップS115による残部デコード処理の結果からデコードが成功したか否(失敗)かを判断して(S1070)、デコードに成功している場合には、ステップS1100に処理を移行して報知を終了する。一方、デコードに失敗している場合には、ステップS1080によりカウンタをリセットする処理を行い、続くステップS1090により失敗報知時間t9を超えるまでループする(S1090;No)。そして、失敗報知時間t9を超えると(S1090;Yes)、ステップS1100に処理を移行して報知を終了する。なお、「失敗報知時間」は、前述した「成功報知時間」に比べて十分に長い時間で、例えば成功報知時間t1(50mSec)の10倍〜20倍(500mSec〜1000mSec)に設定されている。
このように報知処理1は、図10に示すメインルーチンのステップS817により起動されて報知出力を完了すると終了するが、同様に、メインルーチンの読取処理と並列に実行される報知処理2を図12を参照して説明する。図12に示すように、報知処理2では、まずステップS1210によりカウンタをリセットする処理を行い、続くステップS1220により報知を開始した後、ステップS1230により失敗報知時間t9を超えるまでループする(S1230;No)。そして、失敗報知時間t9を超えると(S1230;Yes)、ステップS1240に処理を移行して報知を終了する。なお、この「失敗報知時間」も、ステップS1090のものと同様に、前述した「成功報知時間」に比べて十分に長い時間で、例えば成功報知時間t1(50mSec)の10倍〜20倍(500mSec〜1000mSec)に設定されている。
ここで、図10のメインルーチンである読取処理に戻ると、ステップS817により報知処理1を起動した後、前述したように、ステップS115により残部デコード処理を行った後、ステップS117〜S121の各処理を経て本読取処理を終了する。なお、ステップS819で起動する報知処理2は、図12を参照して説明した通りである。
以上説明したように、本第3実施形態に係る二次元コードリーダ20等では、制御回路40等により読み取られたコード画像に基づいて残部デコード推定時間の算出処理(S810)が残部のコードを読み取るのに要するデコード推定時間t2を推定し、これにより推定された時間t2がブザー44により成功時報知時間t1よりも長い場合には(S811;Yes)、両時間差の期間t3(t2−t1)、ブザー44による成功時報知時間t1の出力開始時期を報知処理1(S1020のループ)により遅らせる。これにより、デコード推定時間t2がブザー44による成功時報知時間t1よりも長い場合には、その両時間差分t3、当該成功時報知を遅れて出力するため、例えば、読取対象となるQRコードに含まれるデータ量が非常に多く、残部のコードのデコード推定時間t2が、読取りエラー時に出力される失敗時報知時間t9よりも長い場合であっても、このような長い時間、成功時報知が連続出力されることがないので、このような場合における違和感を与え難くすることができる。したがって、残部のコードのデコード推定時間t2が、読取りエラー時に出力される失敗時報知時間t9よりも長い場合であっても、読み取りフィーリングを向上することができる。
[第4実施形態]
次に、前述した第1〜3実施形態の改変例にあたる、本発明の光学情報読取装置を二次元コードリーダに適用した第4実施形態を図3,図4,図14〜図18に基づいて説明する。
二次元コード(例えばQRコード)は、前述したように、コードサイズの大小等によってそれにコード化されている情報量が異なることから、コード画像の全部の読み取りに要する時間、つまりデコード時間が、長くなったり短くなったりする。このため、読み取り可能である場合に、ブザーのビープ音等により使用者にその旨の告知を開始し、読み取り完了時にビープ音等を停止するといった処理を採用すると、大量の情報をデコードしなければならないときには、ビープ音等の開始から停止までに相当の時間を要することから、ビープ音等が長くなってしまい、読み取りエラー時に出力する長めのビープ音等と使用者が誤解する可能性がある。
そこで、本第4実施形態では、このような点を改良すべく、図16に示す二次元コードの読取処理を採用している。なお、本第4実施形態に係る二次元コードリーダの構成は、前述した第1実施形態に係る二次元コードリーダ20と実質的に同一である。このため、ここでは二次元コードリーダの構成を示すブロック図およびそれらの説明を省略する。
図16に示すように、本第4実施形態に係る二次元コードの読取処理では、まずステップS101によりコード画像取得処理が行われる。この処理は、受光センサ23に検出されてメモリ35の画像データ蓄積領域に蓄積されたコード画像を当該領域から取得するもので、取得されたコード画像は次の位置検出パターン検出処理に渡される。
次のステップS103では、位置検出パターン検出処理が行われる。この処理は、QRコードに特有の3つの位置検出要素パターンの存在を当該コード画像中で検出することにより、読取対象となる情報コードQがQRコードであるか否かを判断したり、そのコード領域を検出可能にするものである。QRコードの位置検出要素パターンの例等は、図4を参照して前述した通りであるので、ここでは省略する。
ステップS103により、コード画像において位置検出パターンを検出すると、続くステップS105’では、位置検出パターンを検出できたか否かを判断する処理が行われる。この処理は、ステップS103により、QRコードの3箇所の隅に配置される位置検出要素パターンFPを全て検出することができたか否かを確認するもので、位置検出パターンを検出できた場合には(S105’;Yes)、次のステップS107に処理を移行し、位置検出パターンを検出できていない場合には(S105’;No)、この段階で読み取りエラーを起こしていることがわかるので、前述したステップS101に処理を移行して再度、コード画像取得処理が行われる。
ステップS107では、マスク解除処理が行われる。この処理では、図4を参照して説明したように、位置検出要素パターンの同色セルの連続比率である1:1:3:1:1に相当するセルの列びを当該コード領域内に存在しないように施されたマスク処理による明暗のバランス調整を解除する。
続くステップS109では一部デコード処理が行われる。この処理は、読取対象となるQRコードの一部分(一部)を残りの部分(残部)に先行してデコードする処理で、この処理の流れは、図3(A) を参照して前述した通りであるので、ここでは省略する。
ステップS111’では、一部デコードが成功したか否かを判断する処理が行われる。ステップS109の一部デコード処理によってメモリ35の所定の作業領域には一部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて一部デコードは成功したか否かを判断する。
そして、一部デコードが成功したと判断される場合には(S111’;Yes)、続くステップS810に処理を移行して残部デコード推定時間の計算処理を行う。これに対し、一部デコードが成功したと判断されない場合、つまり一部デコードが失敗した場合には(S111’;No)、読み取りエラーを起こしていることになるので、前述したステップS101に処理を移行して再度、コード画像取得処理が行われる。これにより、図18(B) に示すように、一部デコードが読み取りエラーをしている場合でも(同図に示す(18B1))、読み取りエラーを使用者に知らせることなく一部デコードを自動的に再度試行するので(同図に示す(18B2))、当該使用者の操作負担を軽減することができる。
続くステップS810では、残部デコード推定時間の計算処理が行われる。この処理は、ステップS101により取得されたコード画像に基づいて行われるもので、例えば、当該二次元コードのコード画像から解析されるコードの種別(QRコード、PDF417、データマトリックス、マキシコード、RSSコンポジット等の各種コードシンボル)、当該コードに含まれるデータ量、コードの誤り訂正レベル等に基づいて、予め用意されたデータベース等を参照することによって推定される。詳細は、図4(C) を参照して前述した通りであるので、ここでは省略する。
ステップS810により算出された残部デコード推定時間を、次のステップS811により成功時報知時間と比較する。「成功時報知時間」とは、ステップS109による一部デコードおよびステップS115による残部デコードのいずれもに成功した場合に連続して報知出力されるべき時間のことで、例えば、図14(A) に示すように、時間t1(50mSec)の短い期間が設定される。報知出力は、ビープ音である場合には、時間t1(50mSec)の「ピッ」という鳴動音に相当する時間になる。なお、この「成功時報知時間」は、特許請求の範囲に記載の「報知基準時間」に相当し得るものである。
そして、ステップS810により、残部デコード推定時間が成功時報知時間t1よりも大きい(長い)と判断された場合には(S811;Yes)、残部のデコードに時間が成功時報知時間t1よりもかかることになるので、その分、報知処理の開始を遅らせる必要から、次のステップS813により報知待ち時間の算出を行う。例えば、図14(B) に示すように、残部デコード推定時間t2が90mSecである場合には、このt2(90mSec)からt1(50mSec)を減算した値t3である40mSec(=90mSec−50mSec)が報知待ち時間となる。
これに対し、ステップS810により、残部デコード推定時間が成功時報知時間t1よりも大きい(長い)と判断されない場合には(S811;No)、成功時報知時間t1内で、残部デコードが終了する可能性が高いので、報知処理の開始を遅らせる必要がない。このため、特に、ステップS815により報知待ち時間を求めることなく、ステップS817’に処理を移行する。
ステップS817’では、報知処理3を起動させる処理を行う。この報知処理3は、当該読取処理と並列に実行されるものであるため、ここからは、図17を参照して説明する。図17に示すように、報知処理3では、まずステップS1010によりカウンタをリセットする処理を行い、続くステップS1020により前述した報知待ち時間t3を超えるまでループする(S1020;No)。そして、報知待ち時間t3を超えると(S1020;Yes)、ステップS1022によりデコード処理中であるか否かを判断する。
つまり、ステップS1022により図16に示すメインルーチンのデコード処理が終わっているか否かを判断し、デコード処理が終わっている(デコード処理を終了している)場合には(S1022;No)、ステップS1024によりデコード結果を判断する。そして、図16に示すメインルーチンのステップS115による残部デコード処理の結果から、デコードに成功している場合には(S1024;成功)、ステップS1028に処理を移行する。
一方、デコードに成功していない場合には(S1024;失敗)、ステップS1026により報知処理の未実施を記録する処理(例えば、レジスタ等による報知フラグをオフする処理)を行った後、本報知処理3を終了する。
これに対し、デコード処理が終わっていない(デコード処理中の)場合には(S1022;Yes)、ステップS1028に処理を移行して、報知処理の実行を記録する処理(例えば、レジスタ等による報知フラグをオンする処理)を行う。これにより、図16に示すメインルーチンでは、本報知処理3によって報知が行われたか否かを把握可能となる。
続くステップS1030では、報知処理を開始する処理が行われる。報知処理は、デコードに成功した旨を示す報知出力(所定報知の連続出力)をブザー44等の出力装置に出力するもので、ここではその開始を指示する。例えば、当該出力装置が、ブザー44である場合には連続したビープ音、LED43である場合には緑色発光、液晶表示装置46である場合には「OK」の文字、といった内容の出力開始命令を該当する出力装置に出力する。この処理は、図18(A) に示す(18A1)、図18(B) に示す(18B1)や図18(C) に示す(18C1)のタイミングに行われる。
そして、ステップS1040によりカウンタをリセットする処理が行われると、続くステップS1050により図16に示すメインルーチンのデコード処理が終わるまでループして待つ(S1050;Yes)。例えば、図15(A) を参照して述べたように、残部デコード推定時間t2が90mSecであるにもかかわらず、それを超えて残部デコード処理を行っている場合には、その残部デコード処理にかかった時間t4(100mSec)から残部デコード推定時間t2(90mSec)を減算した値10mSec(=100mSec−90mSec)を超えるまでループして待つ(S1050;Yes)。
デコード処理が終わると(S1050;No)、さらに報知時間t1を超えるまでループして待つ(S1060;No)。例えば、図14(A) に示すように、残部デコード推定時間t2が40mSecである場合には、このt2(40mSec)を報知時間t1(50mSec)から減算した値10mSec(=50mSec−40mSec)だけ待つことになる。また、例えば、図15(B) に示すように、残部デコード推定時間t2が90mSecであるにもかかわらず、それを下回って速くに残部デコード処理を終えている場合には、その残部デコード処理にかかった時間t4(70mSec)を残部デコード推定時間t2(90mSec)から減算した値20mSec(=90mSec−70mSec)を超えるまでループして待つ(S1060;No)。これにより、ビープ音が読取り成功時相当に延長して出力されるため、極端に短いビープ音になることなく、このような場合における違和感を与え難くすることができるので読み取りフィーリングを向上することができる。
即ち、図16に示すメインルーチンのステップS115による残部デコード処理の結果からデコードが成功したか否(失敗)かを判断して(S1070)、デコードに成功している場合には、ステップS1100に処理を移行して報知を終了する。一方、デコードに失敗している場合には、ステップS1080によりカウンタをリセットする処理を行い、続くステップS1090により失敗報知時間t9を超えるまでループする(S1090;No)。そして、失敗報知時間t9を超えると(S1090;Yes)、ステップS1100に処理を移行して報知を終了する。なお、「失敗報知時間」は、前述した「成功報知時間」に比べて十分に長い時間で、例えば成功報知時間t1(50mSec)の10倍〜20倍(500mSec〜1000mSec)に設定されている。
ここで、図16のメインルーチンである読取処理に戻ると、ステップS115により残部デコード処理が行われる。この処理は、既に説明したように、ステップS109により先に読み取ったQRコードの一部分(一部)に対する残りの部分(残部)をデコードするものである。詳細は、図3(B) を参照して前述した通りであるので、ここでは省略する。
続くステップS117’では、残部デコードが成功したか否かを判断する処理が行われる。ステップS115の残部デコード処理によってメモリ35の所定の作業領域には残部デコードされたデコード結果が格納されているので、この処理では、このデコード結果に基づいて残部デコードは成功したか否かを判断する。そして、残部デコードが成功したと判断される場合には(S117’;Yes)、続くステップS119に処理を移行してデコード結果結合処理を行う。
これに対し、残部デコードが成功したと判断されない場合、つまり残部デコードが失敗した場合には(S117’;No)、読み取りエラーを起こしていることになるので、ステップS118により報知処理を実施したか否かを判断する処理が行われる。
即ち、前述した報知処理3によって、報知処理の実行を記録する処理(例えば、レジスタ等による報知フラグをオンする処理;S1028)または報知処理の未実施を記録する処理(例えば、レジスタ等による報知フラグをオフする処理;S1026)が行われているので、この記録を参照する(読み出す)ことで、報知処理の実施の有無を判断する。
そして、報知処理が実施されている場合には(S118;Yes)、ブザー44等によるビープ音等を出力した状態でステップS121に処理移行し(図18(C) に示す(18C2)のタイミング)、報知処理が実施されていない場合には(S118;No)、先頭のステップS101に処理を移行して再度、コード画像取得処理が行われる。
ステップS119では、デコード結果結合処理が行われる。この処理は、一部デコード処理(S109)によりデコードされた結果(一部読取情報)と残部デコード処理(S115)によりデコードされた結果(残部読取情報)とを連結することによって、読取対象となるコード画像の全部のデコード結果(全部読取情報)を当該QRコードの読取結果として生成するもので、詳細は図4等を参照して既に説明した通りである。
次のステップS121では、デコード結果出力処理が行われる。この処理は、ステップS119により生成した当該QRコードの読取結果等を液晶表示装置46や通信インタフェース48に出力するものである。即ち、QRコードの読み取りに成功した場合には(S111’;Yes、S117’;Yes)、その旨を示す成功コードとデコード後の解読データ(読取結果)を出力する。例えば、出力装置が、液晶表示装置46である場合には解読データの内容を表示し、ホストコンピュータHSTである場合には成功コードおよび解読データ(読取結果)を通信インタフェース48を介して出力する(図18(A) に示す(18A2)、図18(B) に示す(18B3)や図18(C) に示す(18C3)のタイミング)。
以上説明したように本第4実施形態による二次元コードリーダ20等によると、メモリ35および制御回路40により、受光センサ23および結像レンズ27により検出されたQRコードのコード画像の一部を取り出し、少なくとも当該一部のコード画像の読み取りを試み(S101、S103、107、S109)、読み取り可能であり(S111’;Yes)、残部デコードを処理している(デコード処理中)場合には(S1022;Yes)、ブザー44、LED43または液晶表示装置46により、制御回路40等による判断結果(ブザー44は連続したビープ音、LED43は緑色発光、液晶表示装置46は「OK」の文字)を、制御回路40等がコード画像の全部を読み取る(S119)前に使用者に対する報知を開始し(S1030)、当該一部のコード画像の読み取りが不能であったり(S111’;No)、当該一部のコード画像の読み取りに成功しても残部デコードに失敗した場合には(S1024;失敗)、ビープ音等による報知を開始することなく、当該一部のコード画像の読み取りを再度試み(S101)、読み取り可能であるか否かを判断する(S111’)。
これにより、QRコードのコード画像の全部を読み取ってから読み取りに成功すると判断する場合に比べてレスポンス良く読み取りの可否を早く使用者に知らせることが可能となる。また、QRコードの一部のコード画像の読み取りが可能でない場合には、読み取りの不能を使用者に知らせることなく、一部のコード画像の読み取りを自動的に再度試行するので、使用者に再読み取りの操作負担を強いることがない。したがって、当該二次元コードリーダの使用者は、読取対象となるQRコードのデータ量が多くても、当該QRコードの読み取りが成功することを早期に把握できるので、ビープ音の鳴動、LEDの点灯または液晶画面の表示がいつもよりも遅れて出てくるという違和感を与えることなく読み取りフィーリングを向上させることができる。
また、本第4実施形態による二次元コードリーダ20等によると、制御回路40等により読み取られた一部のコード画像に対する一部デコード処理(S109)によるデコード結果と残部のコード画像に対する残部デコード処理(S115)によるデコード結果とを連結することによって(S119)、読取対象となるコード画像の全部のデコード結果を当該QRコードの解読データとして出力する。これにより、制御回路40等により読み取られた一部デコード処理(S109)によるデコード結果を無駄なく使用するので、制御回路40等がコード画像の全部を再度読み取る場合に比べて、確定的な読み取り結果を早く出力することができる。
さらに、本第4実施形態に係る二次元コードリーダ20等では、制御回路40等により読み取られたコード画像に基づいて残部デコード推定時間の算出処理(S810)が残部のコードを読み取るのに要するデコード推定時間t2を推定し、これにより推定された時間t2がブザー44により成功時報知時間t1よりも長い場合には(S811;Yes)、両時間差の期間t3(t2−t1)、ブザー44による成功時報知時間t1の出力開始時期を報知処理3(S1020のループ)により遅らせる。これにより、デコード推定時間t2がブザー44による成功時報知時間t1よりも長い場合には、その両時間差分t3、当該成功時報知を遅れて出力するため、例えば、読取対象となるQRコードに含まれるデータ量が非常に多く、残部のコードのデコード推定時間t2が、読取りエラー時に出力される失敗時報知時間t9よりも長い場合であっても、このような長い時間、成功時報知が連続出力されることがないので、このような場合における違和感を与え難くすることができる。したがって、残部のコードのデコード推定時間t2が、読取りエラー時に出力される失敗時報知時間t9よりも長い場合であっても、読み取りフィーリングを向上することができる。
なお、図17に示すブザー44による成功時報知時間t1の出力開始時期を報知処理3(S1020のループ)により遅らせている期間内に、図16に示すメインルーチンのデコード処理(S115)が失敗に終わった場合にも、ステップS1026により報知処理の未実施を記録する処理を行った後、報知処理3を終了するように構成しても良い。これにより、不要な報知をしないので、残部デコードが失敗したにもかかわらず、ビープ音等が出力されるようなことを防ぐので、読み取りフィーリングを向上することができる。
なお、上述した第3,4実施形態では、情報コードの例として、QRコードを例示して説明したが、二次元コードであればこれに限られることはなく、例えば、PDF417、データマトリックス、マキシコード、RSSコンポジット等の各種のコードシンボルでも、上述同様の作用および効果を得ることができる。