JP2020160961A - 二次元コード読取装置、コンピュータプログラム、及び、二次元コード - Google Patents
二次元コード読取装置、コンピュータプログラム、及び、二次元コード Download PDFInfo
- Publication number
- JP2020160961A JP2020160961A JP2019061458A JP2019061458A JP2020160961A JP 2020160961 A JP2020160961 A JP 2020160961A JP 2019061458 A JP2019061458 A JP 2019061458A JP 2019061458 A JP2019061458 A JP 2019061458A JP 2020160961 A JP2020160961 A JP 2020160961A
- Authority
- JP
- Japan
- Prior art keywords
- dimensional code
- decoding
- specific
- codewords
- code
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Editing Of Facsimile Originals (AREA)
Abstract
【課題】読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる技術を提供する。【解決手段】撮像部によって撮像された二次元コードを表わすコード画像に基づいてデコードを行うデコード部と、第1のデコード結果が取得される場合に、特定のコードワードを特定する特定ステップと、特定のコードワードの値を特定の値に変更する変更ステップと、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行うデコードステップと、第1のデコード結果とは異なる第2のデコード結果が取得されるか否かを判断する判断ステップと、を含む検査処理を繰り返し実行する検査処理実行部と、を備える。【選択図】図4
Description
本明細書で開示する技術は、二次元コード読取装置、二次元コード読取装置のためのコンピュータプログラム、及び、二次元コードに関する。
特許文献1に示すように、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードに記録された情報を読み取るための二次元コードが知られている。この種の二次元コードに記録された情報を読み取るために、二次元コード読取装置が用いられる。このような二次元コード読取装置は、通常、二次元コードを撮像する撮像部と、撮像部によって撮像された二次元コードを表わすコード画像に基づいて、二次元コードに記録された情報のデコードを行う制御部と、を備える。
特許文献1の技術では、読み取り対象である1個の二次元コードには、本来、一種類の情報のみが記録されることが予定されている。即ち、特許文献1の技術では、特定のセル構成を有する特定の二次元コードが二次元コード読取装置で読み取られる場合、読み取られた結果として出力されるデコード結果は、毎回、特定の二次元コードに予め記録された特定の情報であることが予定されている。
しかしながら、近年、1個の二次元コードを構成する複数個のセルのうちの1個のセルを、意図的に明色と暗色の中間色で表示したり、意図的に明色部と暗色部とに分割して表示したりする特殊セルとした特殊二次元コードが、例えば不正の目的等で使用される事態が確認されている。このような特殊二次元コードが二次元コード読取装置によって読み取られる場合、読み取りの際の諸条件(例えば、特殊二次元コードが撮像される際の光の加減等)に応じて、特殊セルが、暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とがある。そして、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しないデコード結果(例えば、有害サイトのURL等)が出力されてしまう等の不都合が発生する場合もある。
本明細書では、読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる技術を提供する。
本明細書は、二次元コード読取装置を開示する。前記二次元コード読取装置は、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、前記デコード部が前記デコードを行ったことによって第1のデコード結果が取得される第1の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、(a)前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、(b)前記特定のコードワードの値を特定の値に変更する変更ステップと、(c)前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、(d)前記デコードステップにより、前記第1のデコード結果とは異なる第2のデコード結果が取得されるか否かを判断する判断ステップと、を含む、前記検査処理実行部と、を備える。
上記の通り、近年、1個の二次元コードを構成する複数個のセルのうちの1個のセルを、読み取り時の条件によって暗色セルと明色セルの二通りに読み取られ得る特殊セルとした特殊二次元コードが、例えば不正の目的等で使用される事態が確認されている。例えば、特殊セルは、意図的に暗色と明色の中間色で表示されたり、意図的に暗色部と明色部とに分割して表示されたりする。
一方、そのような特殊セルを含まない通常の二次元コードにおいても、印字の際の不具合等により、上記の特殊セルと同様の表示態様のセルが偶発的に含まれる場合がある。また、二次元コードが汚れたり削れたりすることにより、二次元コードを構成する複数個のセルのうちの一部が、明色セル(又は暗色セル)に変わってしまう事態も起こり得る。ただし、通常であれば、二次元コード読取装置がそのような通常の二次元コードを読み取る場合、公知の誤り訂正処理が行われることにより、所定の最大誤り訂正許容率(例えば、7%、15%、25%、30%等)以下の割合の誤り(汚損、損傷、欠け等)は訂正される。そのため、通常であれば、何らかの事情で二次元コードに所定割合までの特殊セルが含まれた場合であっても、二次元コード読取装置は、誤り訂正処理を行った上で、予め二次元コードに記録された情報をデコード結果として出力することができる。
ここで、「最大誤り訂正許容率」とは、二次元コードが汚損等している場合においても、情報をデコードし得る許容率の最大値のことである。例えば最大誤り訂正許容率が25%である二次元コードの場合、二次元コードの情報記録領域に含まれる複数個のセルブロックのうちの25%が損傷している場合であっても、読取装置は当該二次元コードからデータをデコード可能であることを意味する。ここで言う1個の「セルブロック」は、8個のセルを単位とするセル群によって構成されるセル群単位である。デコードの過程では、1個の「セルブロック」からは1個のコードワードが抽出される。1個のコードワードは、2桁の16進数の英数字によって表わされる。そして、最大誤り訂正許容率のレベルは、二次元コード毎に予め設定されている。二次元コードは、最大誤り訂正許容率を示すデータも含んでいる。従って、最大誤り訂正許容率のレベルが高いほど、二次元コードに誤りを含むセルブロックが含まれる割合が高い場合であってもデータを正しくデコードすることが可能となる。
しかしながら、本件発明者等の分析の結果、近年確認されている上記の特殊二次元コードは、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合と、のどちらの場合においても、特殊セルを含むセルブロック以外の部分において、最大誤り訂正許容率に対応する数のセルブロック(即ち、最大誤り訂正許容率の限界値のセルブロック)に対する誤り訂正処理が実行されるよう、緻密に設定されていることが判明した。その結果、特殊二次元コードが読み取られた際に、特殊セルを含むセルブロックが「誤り」として処理されることなく、特殊セルが暗色セル又は明色セルとして読み取られた状態でデコードが成功してしまう事態が発生する。その結果、特殊セルが暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまう事態が起こる。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しない読取結果(例えば、有害サイトのURL等)がデコード結果として出力されてしまう等の不都合が発生する場合もある。
これに対し、上記の構成を有する本明細書の二次元コード読取装置によると、検査処理実行部は、二次元コードを表わすコード画像に基づいてデコードを行うことで第1のデコード結果が取得される第1の場合に、上記の検査処理を繰り返し実行する。検査処理では、検査処理実行部は、コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定し、特定のコードワードの値を特定の値に変更し、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行い、第1のデコード結果と異なる第2のデコード結果が取得されるか否かを判断する。ここで言う「コードワード」は、上記の通り、二次元コードに含まれるセルブロック(即ち、8個のセルによって構成されるセル群)のデコード結果を表わす文字列(2桁の16進数の英数字)である。「コードワードを変更」することは、当該コードワードに対応するセルブロック内の8個のセルの明色/暗色の組合せの少なくとも一部を変更することに対応する。また、ここで言う「複数個のコードワードのうちから、特定のコードワードを特定する」ことは、複数個のコードワードのうちから1個の特定のコードワードを特定することと、複数個のコードワードのうちから2個以上の特定のコードワードを特定することと、のどちらも含む。「複数個のコードワード」は、第1のデコード結果が取得される過程で誤り訂正処理が行われている場合には、コード画像に基づいて抽出され、かつ、誤り訂正処理が行われる前の複数個のコードワードを意味する。第1のデコード結果が取得される過程で誤り訂正処理が行われていない場合には、コード画像に基づいて抽出された複数個のコードワードを意味する。
そして、上記の検査処理を繰り返し行う過程で、特定の値に変更された変更済みの特定のコードワードを含む複数個のコードワードを用いてデコードを行う場合、以下の三通りの結果のうちのいずれかが得られる。
第1の結果は、デコード失敗(即ち、デコード結果が得られないこと)である。即ち、第1の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したことで、誤ったセルブロックの数(即ち正しい値を示さないコードワードの数)が最大誤り訂正許容率の限界値を超え、その結果、誤り訂正処理を行ってもデコード結果の取得に失敗する場合である。
第2の結果は、既に取得済みの第1のデコード結果が得られることである。即ち、第2の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したが、誤ったセルブロックの数(即ち正しい値を示さないコードワードの数)が最大誤り訂正許容率の限界値以下であるため、誤り訂正処理が行われることで、誤ったセルブロックに対応するコードワードの値が訂正され、第1のデコード結果が得られる場合である。
第3の結果は、第1のデコード結果とは異なる第2のデコード結果が得られることである。即ち、第3の結果が得られる場合とは、特定のコードワードの値を特定の値に変更したことで、第1のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われ、その結果、第1のデコード結果とは異なる第2のデコード結果が得られる場合である。
読み取られた二次元コードが通常の二次元コードである場合、検査処理を繰り返し実行する過程で、複数個のコードワードのうち、特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての特定の値に変更し、変更されたすべての特定の値のそれぞれについてデコードを行った場合であっても、上記の第1の結果と第2の結果のいずれかが得られるに過ぎない。
一方、読み取られた二次元コードが、上記の特殊二次元コードである場合、検査処理を繰り返し実行する過程で、二通りのデコード結果(第1のデコード結果及び第2のデコード結果)が得られ得る。即ち、検査処理を繰り返し実行したことで、上記の第3の結果が得られた場合、読み取られた二次元コードが特殊二次元コードであると言うことができる。
従って、上記の二次元コード読取装置によれば、読み取られた二次元コードが、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる。
前記二次元コード読取装置は、前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得された後、前記デコードの過程で誤り訂正処理が行われたか否かを判断する、第1の判断部をさらに備えてもよい。前記検査処理実行部は、前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得され、かつ、前記第1の判断部が、前記誤り訂正処理が行われたと判断した前記第1の場合に、前記検査処理を繰り返し実行してもよい。前記特定ステップでは、前記コード画像に基づいて抽出され、前記誤り訂正処理が行われる前の前記複数個のコードワードのうちから、前記特定のコードワードが特定されてもよい。
この構成によると、検査処理実行部は、第1のデコード結果が取得され、かつ、第1の判断部が、誤り訂正処理が行われたと判断した第1の場合に限り、検査処理を繰り返し実行することができる。上記の通り、読み取られた二次元コードが特殊二次元コードである場合には、第1のデコード結果が取得される過程で誤り訂正処理が行われている。即ち、第1のデコード結果が取得される過程で誤り訂正処理が行われていない場合、読み取られた二次元コードが特殊二次元コードである可能性は極めて低い。従って、上記の構成によると、二次元コードが特殊二次元コードである可能性が極めて低い場合に検査処理を実行させないことにより、どのような場合も検査処理を実行させる場合に比べて、検査処理実行部の処理負荷を軽減することができる。
前記特定ステップでは、前記複数個のコードワードのうち、前記第1のデコード結果が取得された際に前記誤り訂正処理が実行された1個以上の訂正対象コードワードを除いた1個以上の特定可能コードワードのうちから、前記特定のコードワードが特定されてもよい。
複数個のコードワードのうち、訂正対象コードワードの値を他の値に変えても、デコードの際にその値に対して誤り訂正処理が行われることで、同じ第1のデコード結果が出力されるように訂正されるに過ぎない。即ち、訂正対象コードワードの値を特定のコードワードとして特定し、値を変更したとしても、変わらず第1のデコード結果が出力されるに過ぎない。そのため、上記の構成によると、二次元コード読取装置は、訂正対象コードワードを特定のコードワードとして特定しないようにすることで、検査処理の実行回数を減少させ、検査処理実行部の処理負荷を少なくすることができる。
前記第1の判断部は、前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得される場合に、前記デコードの過程で、前記二次元コードに設定されている最大誤り訂正許容率の90%以上のコードワードに対して、前記誤り訂正処理が行われたか否かを判断してもよい。前記検査処理実行部は、前記第1の判断部が、前記二次元コードに設定されている前記最大誤り訂正許容率の90%以上のコードワードに対して前記誤り訂正処理が行われたと判断した前記第1の場合に、前記検査処理を繰り返し実行してもよい。
第1のデコード結果が取得される場合に、最大誤り訂正許容率の90%以上のコードワードに対して、既に誤り訂正処理が行われていれば、検査処理実行部は、特定ステップにおいて、残りの10%以下のコードワードに対応する数のコードワードを特定のコードワードとして特定した上で、残りのステップを実行すればよい。そのため、最大誤り訂正許容率の90%以上のコードワードに対して既に誤り訂正処理が行われていれば、検査処理の実行回数を比較的少なくし得る。そのため、二次元コード読取装置の全体としての処理速度を向上させ得る。
前記特定ステップでは、1個の前記特定のコードワードが特定されてもよい。
特定ステップにおいて、複数個の特定のコードワードが特定される場合、各特定のコードワードの変更後の値の組合せが多くなり、検査処理実行部の処理負荷が大きくなる。これに対し、上記の構成によると、1個の特定のコードワードが特定される場合、複数個の特定のコードワードが特定される場合に比べて各特定のコードワードの変更後の値の組合せが少なくなり、検査処理実行部の処理負荷を小さくすることができる。
二次元コード読取装置は、端末装置と、前記端末装置と通信可能なサーバと、をさらに備えてもよい。前記端末装置には、前記撮像部と、前記デコード部と、前記第1の場合に、前記コード画像を前記サーバに送信する送信部と、が搭載されてもよい。前記サーバには、前記検査処理実行部が搭載されてもよい。
検査処理を実行する検査処理実行部の処理負荷は、撮像部、及び、デコード部の処理負荷の合計よりも大きい場合がある。上記の構成によると、端末装置よりも処理能力の高いサーバを準備することにより、一つの装置で全ての処理を行う場合に比べ、二次元コード読取装置の全体としての処理速度を向上させ得る。
前記検査処理実行部が前記検査処理を実行することによって前記第2のデコード結果が取得される場合に、前記第1のデコード結果の少なくとも一部、及び、前記第2のデコード結果のうちの少なくとも一部を出力する、デコード結果出力部をさらに備えてもよい。
この構成によると、二次元コード読取装置は、第2のデコード結果が取得される場合に、第1のデコード結果の少なくとも一部と第2のデコード結果の少なくとも一部とを出力することができる。二次元コード読取装置の利用者は、出力された内容に基づいて、読み取られた二次元コードが特殊二次元コードであることを把握することができるとともに、二次元コードからデコードされ得る第1のデコード結果の少なくとも一部と第2のデコード結果の少なくとも一部とを確認することができる。
前記二次元コード読取装置は、前記検査処理実行部が前記検査処理を実行することによって前記第2のデコード結果が取得される第2の場合に、前記コード画像に基づいて、前記二次元コードのうち、前記第1のデコード結果及び前記第2のデコード結果が取得される要因となった特定のセルブロックを強調した画像である強調コード画像を出力する、強調コード画像出力部をさらに備えてもよい。
この構成によると、二次元コード読取装置の利用者は、出力された強調コード画像を見ることで、特定のセルブロックを要因として第1のデコード結果及び第2のデコード結果が取得されたことを把握することができる。特に、特定のセルブロック内に特殊セルが視認可能な態様で存在する場合、利用者が特殊セルを見て確認することができる。
前記検査処理実行部は、前記検査処理を実行する場合に、前記判断ステップにおいて、前記第2のデコード結果が取得されたと判断された場合に、前記検査処理を終了してもよい。
この構成によると、検査処理実行部は、第2のデコード結果が取得されたと判断された時点で、検査処理を繰り返し実行することを終了することができる。複数個のコードワードのうち、特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての特定の値に変更し、変更されたすべての特定の値のそれぞれについてデコードを行う場合に比べて、検査処理の実行回数を少なくすることができる。そのため、二次元コード読取装置の全体としての処理速度を向上させ得る。
前記検査処理実行部は、前記検査処理を実行する場合に、前記特定ステップにおいて、前記複数個のコードワードのうち、誤り訂正符号に対応する1個以上のコードワードのうちから優先的に前記特定のコードワードを特定してもよい。
1つの二次元コードにおける複数個のコードワード(即ち複数個のセルブロック)は、データキャラクタに対応する1個以上のコードワードと、誤り訂正符号に対応する1個以上のコードワードと、を含んでいる。そして、上記の特殊二次元コードは、その特性上、データキャラクタに対応するコードワードよりも、誤り訂正符号に対応するコードワードのほうに、誤りがより多く含まれる傾向がある。データキャラクタに対応するコードワードは、その値がデコード結果に直結するため、誤り訂正を前提とするコードワードを多く含ませられないという技術的な事情もある。そのため、検査処理の実行の際に、誤り訂正符号に対応する1個以上のコードワードのうちから優先的に特定のコードワードを特定することで、第2のデコード結果が比較的早期に取得され得る。検査処理の実行回数を少なくし得るため、二次元コード読取装置の全体としての処理速度を向上させ得る。
前記検査処理実行部は、前記検査処理を実行する場合に、前記判断ステップにおける判断結果に関わらず、前記複数個のコードワードのうち、前記特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、特定されたすべての前記特定のコードワードについて、前記特定のコードワードの値を変更可能なすべての前記特定の値に変更し、変更されたすべての前記特定の値のそれぞれについて前記デコードステップを行うようにしてもよい。
この構成によると、二次元コード読取装置は、特定可能コードワードと特定の値とのすべての組み合わせについてデコードステップを行う。そのため、二次元コード読取装置は、二次元コードに基づいて行われ得るすべてのデコードの結果を把握することができる。
前記変更ステップでは、前記特定のコードワードの値に基づいて、前記二次元コードのうち、前記特定のコードワードに対応する特定のセルブロックに含まれる8個のセルのうち、特定のセルの明暗を反転させた場合における前記特定のコードワードの値を特定することにより、前記特定のコードワードの値を前記特定の値に変更するようにしてもよい。
上記の通り、1個のコードワードは、二次元コードに含まれる1個のセルブロック(即ち、8個のセルによって構成されるセル群)のデコード結果を表わす文字列(2桁の16進数の英数字)である。そして、コードワードの値は、当該コードワードに対応するセルブロック内の8個のセルの明色/暗色の組合せに対応している。即ち、上記の構成によると、検査処理実行部は、特定のコードワードの値を特定の値に変更する際、特定のコードワードに対応する特定のセルブロックの8個のセルのうちの少なくとも1つの明暗を反転させた場合に対応する特定のコードワードの値を特定する。これにより、特定のコードワードに対応する特定のセルブロック8個のセルの明暗のすべての組合せに対応する特定の値を1つずつ特定する場合に比べ、特定の値のバリエーションが少なく済む。この結果、検査処理の実行回数を少なくし得るため、二次元コード読取装置の全体としての処理速度を向上させ得る。
なお、上記の二次元コード読取装置を実現するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。
さらに、本明細書は、複数個の明色セルと複数個の暗色セルとを含む複数個のセルを二次元のマトリックス上に配置して構成される二次元コードを開示する。前記二次元コードは、二次元コード読取装置によってデコードが行われる場合に、前記二次元コードを表わすコード画像に基づいて抽出される複数個のコードワードのうちの特定のコードワードの値が第1の値である場合には、第1のデコード結果が出力され、前記特定のコードワードの値が前記第1の値とは異なる第2の値に変更された場合には、前記第1のデコード結果とは異なる第2のデコード結果が出力される。
この構成によると、二次元コードからは、特定のコードワードの値が第1の値である場合には、第1のデコード結果が出力され、特定のコードワードの値が第2の値に変更された場合には、第2のデコード結果が出力される。そのため、上記の二次元コードでは、例えば、第1のデコード結果を、汎用の二次元コード読取装置によってデコード可能な汎用情報として記録させ、第2のデコード結果を、特定のコードワードの値を第2の値に変更してデコードを行ない得る構成を有する二次元コード読取装置によってのみデコード可能な光セキュリティ情報として記録させることもできる。従って、上記の二次元コードによると、外見上、上記の特殊セルに相当するセル等を含まない構成を有していても、特定のコードワードの値が第1の値であるか第2の値であるかに応じて二通りのデコード結果を出力することができる。
なお、上記の二次元コードを生成するための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。また、上記の二次元コードを読み取るための制御方法、コンピュータプログラム、及び、当該コンピュータプログラムを記憶するコンピュータ読取可能記録媒体も、新規で有用である。
(第1実施例)
(二次元コード読取システム2の構成;図1)
図1に示す本実施例の二次元コード読取システム2は、サーバ6と、二次元コード読取端末10とを備える。二次元コード読取端末10とサーバ6とは相互に通信を実行可能に構成されている。
(二次元コード読取システム2の構成;図1)
図1に示す本実施例の二次元コード読取システム2は、サーバ6と、二次元コード読取端末10とを備える。二次元コード読取端末10とサーバ6とは相互に通信を実行可能に構成されている。
サーバ6は、図示しない制御部およびメモリを備える管理装置である。サーバ6の制御部が実行する処理については、後述の第2実施例で詳しく説明する。
二次元コード読取端末10は、例えば、端末機器のディスプレイや紙などに表示された二次元コード100を読み取って、二次元コード100に記録されたデータを取得するための装置である。図1の例では、読み取りの対象の二次元コード100は、QRコード(本件出願人の登録商標)である。二次元コード100は、複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成されている。他の例では、読み取りの対象の二次元コード100は、他のマトリックス形式の二次元コードであってもよい。
本実施例の二次元コード読取端末10は、例えば、利用者が所持するスマートフォン等の端末装置である。図1に示すように、二次元コード読取端末10は、操作部12と、表示部14と、撮像部16と、通信インターフェース18と、制御部20と、メモリ22と、を備える。なお以下ではインターフェースのことを「I/F」と記載する。
操作部12は、1個以上のキーを含む。利用者は、操作部12を操作して、様々な指示を二次元コード読取端末10に入力することができる。表示部14は、読み取られた二次元コード100のデコード結果を含む様々な情報を表示させるためのディスプレイである。また、操作部12と表示部14は、両者が一体に構成されたタッチパネルであってもよい。撮像部16は、所定の撮影可能範囲内の画像を撮影可能なCCDカメラである。撮像部16が二次元コード100を撮像することにより、二次元コード100を表わすコード画像C(図1、図2等参照)が取得される。通信I/F18は、外部の機器(例えばサーバ6)との間で通信(無線通信又は有線通信)を実行するためのI/Fである。
制御部20は、メモリ22に記憶されているプログラムに従って、後述のコード読取処理(図4参照)を含む様々な処理を実行する。本実施例では、制御部20がコード読取処理を実行することにより、二次元コード100に記録されたデータを取得し、出力することができる。メモリ22は、ROM(Read Only Memoryの略)、RAM(Random Access Memoryの略)等によって構成される。上記の通り、メモリ22は、OSプログラム、上述のコード読取処理を実行するための読取アプリケーションプログラム等、様々なプログラムを記憶している。さらに、メモリ22は、後述のコード読取処理の実行過程において生成される様々なデータを記憶するための一時記憶領域も有している。
(特殊二次元コードの構成及び仕組み;図2、図3)
上記の通り、二次元コード読取端末10は二次元コード100を読み取り対象とする。一方、近年、1個の二次元コードを構成する複数個のセルのうちの1個のセルを、条件によって暗色セルと明色セルの二通りに読み取られ得る特殊セルとした二次元コード(以下では「特殊二次元コード」と呼ぶ)が、例えば不正の目的で使用される事態が確認されている。ここで言う「特殊セル」は、意図的に暗色と明色の中間色で表示されたり、意図的に暗色部と明色部とに分割して表示されたりしている。このような特殊二次元コードが従来の二次元コード読取装置によって読み取られる場合、読み取りの際の諸条件(例えば、特殊二次元コードが撮像される際の光の加減等)に応じて、特殊セルが、明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とが生じ得る。そして、特殊セルが明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しない読取結果(例えば、有害サイトのURL等)がデコード結果として出力されてしまう等の不都合が発生する場合もある。
上記の通り、二次元コード読取端末10は二次元コード100を読み取り対象とする。一方、近年、1個の二次元コードを構成する複数個のセルのうちの1個のセルを、条件によって暗色セルと明色セルの二通りに読み取られ得る特殊セルとした二次元コード(以下では「特殊二次元コード」と呼ぶ)が、例えば不正の目的で使用される事態が確認されている。ここで言う「特殊セル」は、意図的に暗色と明色の中間色で表示されたり、意図的に暗色部と明色部とに分割して表示されたりしている。このような特殊二次元コードが従来の二次元コード読取装置によって読み取られる場合、読み取りの際の諸条件(例えば、特殊二次元コードが撮像される際の光の加減等)に応じて、特殊セルが、明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とが生じ得る。そして、特殊セルが明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。その結果、特殊二次元コードが読み取られた際、二次元コード読取装置の利用者が意図しない読取結果(例えば、有害サイトのURL等)がデコード結果として出力されてしまう等の不都合が発生する場合もある。
以下、図2、図3を参照して、このような特殊二次元コードの構成と、特殊二次元コードが読み取られた際に二通りの異なるデコード結果が出力される仕組みと、について説明する。以下では、本実施例の二次元コード読取端末10が、特殊二次元コードである二次元コード100を読み取る場合を例として説明する。図2の(a)は、二次元コード読取端末10の撮像部16によって撮像される二次元コード100(及びその二次元コード100を表わすコード画像C)の例である。即ち、図2の(a)の二次元コード100は、特殊二次元コードである。二次元コード100は、暗色(具体的には黒色)のセル(以下「暗色セル」と呼ぶ)と、明色(具体的には白色)のセル(以下「明色セル」と呼ぶ)との組み合わせによって構成されている。二次元コード100は、3箇所の角部に配置されたファインダパターン40と、1個のアライメントパターン42と、ファインダパターン40及びアライメントパターン42の中央に配置されたデータセル領域44と、を含む。
ファインダパターン40は、二次元コード100の読み取りの際に最初に認識される部分であり、二次元コード100の上下左右位置を特定するためのパターンである。ファインダパターン40の位置、大きさ、形状等は予め定められている。二次元コード読取端末10は、ファインダパターン40を認識することで、二次元コード100の向きに関わらず、どの方向からでも二次元コード100に記録されたデータを読み取ることができるようになる。アライメントパターン42は、歪みによって生じる各セルの位置ずれを補正するための部分である。
データセル領域44は、二次元コード100に記録されるデータを表現するための各種セルが含まれる領域である。データセル領域44には、データキャラクタ、誤り訂正符号等が含まれる。
ここで、「データキャラクタ」は、二次元コード100に記録されるデータを含む。データキャラクタによって表現されるデータには、デコード対象のデータ自身のほかに、最大誤り訂正許容率を示すデータも含まれる。最大誤り訂正許容率とは、二次元コード100が汚損等している場合においても、データをデコードし得る許容率の最大値(例えば、7%、15%、25%、30%等)を示す。例えば最大誤り訂正許容率が20%である情報コードの場合、二次元コード100のデータセル領域44を構成する44個のセルブロックCB(後述の図2の(b)参照。即ち、ファインダパターン40及びアライメントパターン42を除く部分)のうちの20%(この場合は9個)が損傷している場合であっても、二次元コード読取端末10は当該二次元コード100からデータをデコード可能であることを意味する。そして、「誤り訂正符号」は、二次元コード100を読み取った二次元コード読取端末10が、読み取ったデータの誤りを検出し、訂正することを可能にするための情報である。二次元コード読取端末10は、読み取ったデータと誤り訂正符号とを比較して、データに誤り(即ち、欠け等)があるか否かを判定することができるとともに、誤りがある場合に、誤り訂正符号に基づいて誤り部分を補完することができる。この機能は誤り訂正機能と呼ばれ、一般に知られている。また、この誤り訂正機能に基づいて誤り部分を補完する処理のことを以下では「誤り訂正処理」と呼ぶ場合がある。
さらに、本実施例では、データセル領域44には、意図的に明色と暗色の中間色で表示させた1個の特殊セル50が含まれる。即ち、特殊二次元コードである二次元コード100は、1個の特殊セル50を含む。特殊セル50は、二次元コード読取端末10によって読み取られる場合、読み取りの際の諸条件(例えば、特殊二次元コードが撮像される際の光の加減等)に応じて、特殊セル50が、明色セルとして読み取られる場合と、暗色セルとして読み取られる場合がある。そして、特殊セル50が明色セルとして読み取られる場合と、暗色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまうことがある。この例では、特殊セル50が暗色セルとして読み取られる場合(パターンA)には、デコード結果「http://srv.prof.net/~lob」が出力される。一方、特殊セル50が明色セルとして読み取られる場合(パターンB)には、デコード結果「http://srv.prof.net/~lab」が出力される。パターンAのデコード結果と、パターンBのデコード結果は、ともにウェブサイトのURLを示すが、URLの一部が「a」と「o」とで異なっている。このように、特殊二次元コードである二次元コード100が読み取られると、二通りの異なるデコード結果が出力される。その結果、特殊二次元コードが読み取られた際、利用者が意図しないデコード結果(例えば、有害サイトのURL等)が出力される場合もある。
図2の(b)に示すように、データセル領域44に含まれる多数のセルは、8個のセルを単位とするセル群である複数個のセルブロックCBを構成している。図2の(b)の例では、二次元コード100内には、合計44個のセルブロックCB(図2の(b)中のD1〜D28、E1〜E16)が設けられる。このうち、28個のセルブロックD1〜D28は、上述のデータキャラクタに対応するセルブロックである。セルブロックD1〜D28のそれぞれは、16進法で表される2桁の文字列であるコードワード(例えば図3の(a)の「41」等)を表わしている。16個のセルブロックE1〜E16は、上述の誤り訂正符号に対応するセルブロックである。セルブロックE1〜E16のそれぞれも、16進法で表される2桁の文字列であるコードワード(例えば図3の(a)の「E6」等)を表わしている。
特殊二次元コードに基づいて二通りのデコード結果が出力される仕組みについて説明する前に、特殊セル50を含まない通常の二次元コードにおいて、一部のセルに特殊が生じた場合であっても、予定された(即ち一通りの)デコード結果が正しく出力される仕組みについて説明しておく。通常の二次元コードにおいて、印字の際の不具合等により、上記の特殊セル50と同様の表示態様を有するセルが偶発的に含まれる場合がある。また、二次元コードが汚れたり削れたりすることにより、二次元コードを構成する複数個のセルのうちの一部が、暗色セル(又は明色セル)に変わってしまう事態も起こり得る。ただし、通常であれば、二次元コード読取端末10がそのような二次元コードを読み取る場合、上記の誤り訂正処理が行われることにより、所定の最大誤り訂正許容率(例えば、7%、15%、25%、30%等)以下の割合の誤り(汚損、損傷、欠け等)が訂正される。そのため、通常であれば、何らかの事情で二次元コードに所定割合までの特殊セルが含まれた場合であっても、二次元コード読取端末10は、誤り訂正処理を行った上で、予め二次元コードに記録されたデータ(一通りのデータ)をデコード結果として出力することができる。即ち、特定のセル構成を有する通常の二次元コードが二次元コード読取端末10で読み取られる場合、読み取られた結果として出力されるデコード結果は、毎回、通常の二次元コードに予め記録された一種類のデータであることが予定されている。
これに対し、近年確認されている上記の特殊二次元コードは、データセル領域44に含まれる特殊セル50が暗色セルとして読み取られる場合(図3の(a)[パターンA]参照)と、明色セルとして読み取られる場合(図3の(b)[パターンB]参照)と、のどちらの場合においても、特殊セル50を含むセルブロック以外の部分において、最大誤り訂正許容率に対応する数のセルブロック(即ち、最大誤り訂正許容率の限界値のセルブロック)に対する誤り訂正処理が実行されるよう、故意かつ巧妙に設定されていることが判明している。その結果、特殊二次元コードが読み取られた際に、特殊セル50を含むセルブロックが「誤り」として処理されることなく、特殊セル50が暗色セル又は明色セルとして読み取られてしまう事態が発生する。その結果、特殊セル50が暗色セルとして読み取られる場合と、明色セルとして読み取られる場合とによって、二通りの異なるデコード結果が出力されてしまう事態が起こる(図3の(a)(b)参照)。
図3の(a)、(b)を参照して、このことをより詳細に説明する。図3の(a)は、特殊二次元コードである二次元コード100(図2参照)の特殊セル50が暗色セルとして読み取られる場合(パターンA)の具体例を示す。パターンAでは、デコードの過程で誤り訂正処理が実行されることにより、各セルブロックに対応する訂正後の44個のコードワードが取得される。図3の(b)は、同様の状況において、特殊セル50が明色セルとして読み取られる場合(パターンB)の具体例を示す。パターンBでは、誤り訂正処理が実行されることにより、各セルブロックに対応する訂正後の44個のコードワード(即ち、パターンAの場合とは部分的に異なる44個の訂正後のコードワード)が取得される。いずれもパターンでも、特殊二次元コードである二次元コード100に設定された最大誤り訂正許容率は20%である。即ち、デコードの際、44個のセルブロックCBのうち、最大9個のセルブロックまでの誤りを訂正可能である。
(パターンA;図3の(a))
特殊二次元コードである二次元コード100(図2参照)の特殊セル50が暗色セルとして読み取られると、誤り訂正処理が行われる前において、図3の(a)の上段に示すような44個のコードワードが取得される。44個のコードワードのうち、前半の28個のコードワード(「41」から「F7」まで)は、セルブロックD1〜D28(即ちデータキャラクタに対応するセルブロック)に対応するコードワードである。このうち、網掛け表示で示されている「96」とその隣の「C6」が、英文字「o」に相当するコードワードである。そして、44個のコードワードのうち、後半の16個のコードワード(「E6」から「C6」まで)は、セルブロックE1〜E16(即ち誤り訂正符号に対応するセルブロック)に対応するコードワードである。このうち、斜線ハッチング表示で示されている「71」が、特殊セル50が暗色セルとして読み取られたことで得られたコードワードである。
特殊二次元コードである二次元コード100(図2参照)の特殊セル50が暗色セルとして読み取られると、誤り訂正処理が行われる前において、図3の(a)の上段に示すような44個のコードワードが取得される。44個のコードワードのうち、前半の28個のコードワード(「41」から「F7」まで)は、セルブロックD1〜D28(即ちデータキャラクタに対応するセルブロック)に対応するコードワードである。このうち、網掛け表示で示されている「96」とその隣の「C6」が、英文字「o」に相当するコードワードである。そして、44個のコードワードのうち、後半の16個のコードワード(「E6」から「C6」まで)は、セルブロックE1〜E16(即ち誤り訂正符号に対応するセルブロック)に対応するコードワードである。このうち、斜線ハッチング表示で示されている「71」が、特殊セル50が暗色セルとして読み取られたことで得られたコードワードである。
上記の通り、二次元コード100に設定された最大誤り訂正許容率は20%である。そして、特殊二次元コードである二次元コード100は、特殊セル50が暗色セルとして読み取られる場合と明色セルとして読み取られる場合のどちらの場合も、最大誤り訂正許容率に対応するセルブロックのコードワードに対する誤り訂正処理が実行されるように故意かつ巧妙に設定される。そのため、二次元コード読取端末10は、44個のセルブロックCBに対応するコードワードのうち、9個のセルブロックに対応するコードワードの誤りを訂正する。図3の(a)の例では、下線を付した9個のコードワードが訂正される。パターンAでは、誤り訂正処理の対象の9個のコードワードは、いずれも、セルブロックE1〜E16に対応するコードワードである。
誤り訂正処理が行われたことにより、図3の(a)の下段に示すような44個のコードワードが取得される。図中の44個のコードワードのうち、訂正処理が行われたコードワード(以下では「訂正ワード」と呼ぶ場合がある)には、下線を付している。誤り訂正処理後においても、網掛け表示で示されている「96」とその隣の「C6」は、誤り訂正処理前と変わらず維持されている。即ち、「96」と「C6」は、誤り訂正処理前と変わらず英文字「o」を表わしている。この結果、二次元コード読取端末10は、誤り訂正処理後の44個のコードワードのうち、前半の28個のコードワード(「41」から「F7」まで)に基づいて、デコード結果「http://srv.prof.net/~lob」を出力することができる。
(パターンB;図3の(b))
特殊二次元コードである二次元コード100(図2参照)の特殊セル50が明色セルとして読み取られると、誤り訂正処理が行われる前において、図3の(b)の上段に示すような44個のコードワードが取得される。この場合も、前半の28個のコードワード(「41」から「F7」まで)は、セルブロックD1〜D28(即ちデータキャラクタに対応するセルブロック)に対応するコードワードである。このうち、網掛け表示で示されている「96」とその隣の「C6」が、英文字「o」に相当するコードワードである。そして、44個のコードワードのうち、後半の16個のコードワード(「E6」から「C6」まで)は、セルブロックE1〜E16(即ち誤り訂正符号に対応するセルブロック)に対応するコードワードである。このうち、斜線ハッチング表示で示されている「F1」が、特殊セル50が明色セルとして読み取られたことで得られたコードワードである。このように、特殊セル50が明色セルとして読み取られた場合に得られるコードワード(「71」)とは異なっている。
特殊二次元コードである二次元コード100(図2参照)の特殊セル50が明色セルとして読み取られると、誤り訂正処理が行われる前において、図3の(b)の上段に示すような44個のコードワードが取得される。この場合も、前半の28個のコードワード(「41」から「F7」まで)は、セルブロックD1〜D28(即ちデータキャラクタに対応するセルブロック)に対応するコードワードである。このうち、網掛け表示で示されている「96」とその隣の「C6」が、英文字「o」に相当するコードワードである。そして、44個のコードワードのうち、後半の16個のコードワード(「E6」から「C6」まで)は、セルブロックE1〜E16(即ち誤り訂正符号に対応するセルブロック)に対応するコードワードである。このうち、斜線ハッチング表示で示されている「F1」が、特殊セル50が明色セルとして読み取られたことで得られたコードワードである。このように、特殊セル50が明色セルとして読み取られた場合に得られるコードワード(「71」)とは異なっている。
この場合も、二次元コード100に設定された最大誤り訂正許容率(20%)に応じた数(9個)のコードワードの誤りが訂正される。具体的には、図3の(b)のうち、下線を付した9個のコードワードが訂正される。パターンBで誤り訂正処理の対象となるコードワードは、パターンAの場合とは異なる。図3の(b)に示すように、パターンBでは、セルブロックE1〜E16に対応する(誤り訂正符号に対応する)コードワードに対して誤り訂正処理が行われる他、セルブロックD1〜D28に対応する(データキャラクタに対応する)コードワードのうち、英文字「o」を構成する部分である「C6」に対しても誤り訂正処理が行われる。
誤り訂正処理が行われたことにより、図3の(b)の下段に示すような44個のコードワードが取得される。図中の44個のコードワードのうちの訂正ワードには、下線を付している。パターンBでは、網掛け表示で示されている「96」の隣の「C6」が「16」に訂正されている。「96」と「16」は、英文字「a」を表わす。この結果、二次元コード読取端末10は、誤り訂正処理後の44個のコードワードのうち、前半の28個のコードワード(「41」から「F7」まで)に基づいて、デコード結果「http://srv.prof.net/~lab」を出力することができる。このように、パターンAのデコード結果と、パターンBのデコード結果は、ともにウェブサイトのURLを示すが、URLの一部が「a」と「o」とで異なっている。
特殊二次元コードである二次元コード100が読み取られる(即ちデコードされる)場合、二次元コード読取端末10が上記のような処理を行うことにより、二通りのデコード結果が出力される。
(コード読取処理;図4)
本実施例では、二次元コード読取端末10の制御部20は、図4のコード読取処理を実行することで、読み取られた二次元コード100が上記のような特殊二次元コードであるのか否かを判別することができる。さらに、本実施例では、制御部20は、読み取られた二次元コード100が特殊二次元コードである場合、特殊二次元コードに記録された二通りのデコード結果を両方とも取得することもできる。以下、図4を参照して、本実施例の二次元コード読取端末10の制御部20が実行するコード読取処理について説明する。利用者は、二次元コードを読み取るための読取アプリケーションプログラムが起動された二次元コード読取端末10の操作部12に、所定の読取指示を入力することができる。読取指示が入力される場合、制御部20は、図4のコード読取処理を開始する。
本実施例では、二次元コード読取端末10の制御部20は、図4のコード読取処理を実行することで、読み取られた二次元コード100が上記のような特殊二次元コードであるのか否かを判別することができる。さらに、本実施例では、制御部20は、読み取られた二次元コード100が特殊二次元コードである場合、特殊二次元コードに記録された二通りのデコード結果を両方とも取得することもできる。以下、図4を参照して、本実施例の二次元コード読取端末10の制御部20が実行するコード読取処理について説明する。利用者は、二次元コードを読み取るための読取アプリケーションプログラムが起動された二次元コード読取端末10の操作部12に、所定の読取指示を入力することができる。読取指示が入力される場合、制御部20は、図4のコード読取処理を開始する。
S10では、制御部20は、二次元コード100を表わすコード画像Cが撮像されることを監視する。コード読取処理が開始されると、制御部20は、撮像部16を起動させ、撮像範囲内の画像の撮像を開始する。この際、利用者が、撮像部16の撮像範囲内に二次元コード100が含まれるように二次元コード読取端末10の位置及び角度を変化させることで、撮像部16に二次元コード100を撮像させることができる。これにより、撮像部16によって二次元コード100を表わす画像が撮像される。そして、制御部20は、撮像された画像内に、二次元コード100を表わす特徴(例えば、ファインダパターン40等)が存在するか否かを判断し、二次元コード100を表わす特徴が存在すると判断される場合に、コード画像Cが撮像されたと判断(即ちS10でYESと判断)し、S12に進む。
S12では、制御部20は、S10で撮像されたコード画像Cに基づいてデコードを試行する。即ち、制御部20は、公知のデコード手法に従って、コード画像Cが表す二次元コード100に記録されたデータのデコードを行う。その際、上記の通り、制御部20は、必要に応じて誤り訂正処理も行う(図2、図3参照)。
S14では、制御部20は、S12で試行されたデコードの結果、第1のデコード結果が取得されたか否かを判断する。具体的には、制御部20は、S12のデコードの結果、何らかのデコード結果(即ち第1のデコード結果)が取得されていれば、S14でYESと判断し、S16に進む。一方、何らかの事情(例えば、コード画像Cが表わす二次元コード100の破損度が、最大誤り訂正許容率を超えていた場合等)でデコード結果の取得に失敗していた場合、制御部20は、S14でNOと判断し、コード読取処理をエラー終了する。
S16では、制御部20は、デコードの過程で、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断する。例えば、図2、図3の例のように、二次元コード100のセルブロックCBの数(即ちコードワードの数)が全部で44個であり、最大誤り許容率が20%である場合、最大で9個のコードワードの誤りを訂正することが可能である。そして、その最大数である9個の95%は8.55[個]であり、概ね9個と言える。そのため、この場合S16では、制御部20は、デコードの過程で9個のコードワード(即ち最大誤り許容率の95%以上に相当する数のコードワード)に対して誤り訂正処理が実行されたか否かを判断する。この例の場合、デコードの過程で9個のコードワードに対して誤り訂正処理が実行されていれば、制御部20は、S16でYESと判断し、S18に進む。一方、デコードの過程で8個以下のコードワードに対してしか誤り訂正処理が実行されていなければ、制御部20は、S16でNOと判断し、S24に進む。S16では、制御部20は上記のような判断を行う。他の例では、S16において、制御部20は、訂正可能なコードワードの最大数よりも少ない数のコードワードに対して誤り訂正処理が実行されたか否かを判断する場合もある。なお、変形例では、S16において、制御部20は、デコードの過程で、最大誤り許容率の90%以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断してもよいし、最大誤り許容率の85%以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断してもよい。
(コード検証処理;図4のS18、図5、図6)
S18では、制御部20は、コード検証処理(図5参照)を実行する。コード検証処理は、読み取られた二次元コード100から、既に取得済みの第1のデコード結果とは異なる第2のデコード結果が取得されるか否か(即ち二次元コード100が特殊二次元コードであるか否か)を判断するための処理である。以下、図5を参照して、コード検証処理について説明する。
S18では、制御部20は、コード検証処理(図5参照)を実行する。コード検証処理は、読み取られた二次元コード100から、既に取得済みの第1のデコード結果とは異なる第2のデコード結果が取得されるか否か(即ち二次元コード100が特殊二次元コードであるか否か)を判断するための処理である。以下、図5を参照して、コード検証処理について説明する。
S40では、制御部20は、第1のデコード結果がデコードされた際に二次元コード100に基づいて抽出された複数個のコードワードであって、誤り訂正処理が行われる前の複数個のコードワード(以下では「訂正前コードワード」と呼ぶ場合がある)の中から、第1のデコード結果が取得された際に誤り訂正処理が実行された1個以上の訂正対象コードワードと、それ以外のコードワードである1個以上の特定可能コードワードと、を特定する。特定可能コードワードは、訂正前コードワードのうち、第1のデコード結果が取得された際に訂正処理が実行されなかった1個以上のコードワード、と言い換えてもよい。例えば、図6の(a)に示す例では、第1のデコード結果が取得された時点の44個の訂正前コードワードが示されている。このうち、下線が付された9個のコードワードが「訂正対象コードワード」に対応し、下線が付されていない残りの35個のコードワードが「特定可能コードワード」に対応する。
続くS42では、制御部20は、一度に特定する特定のコードワードの数であるN(Nは1以上の整数)の値を特定する。ここで、制御部20が特定するNの値は「あとN個のコードワードが誤っていた場合、デコード結果の出力に失敗する値」である。Nの値は、読み取られた二次元コード100における最大誤り訂正率に対応する最大訂正可能コードワード数(即ち、デコード結果を出力し得る最大の(限界の)誤りコードワード数)と、訂正対象コードワード(即ち、実際に誤り訂正処理が行われたワードコード)の数と、を用いて特定される。例えば、読み取られた二次元コード100の最大訂正可能コードワード数が9個であり、実際の訂正対象コードワードの数も9個であった場合、S42では、制御部20はNの値として「1」を特定する。また、例えば、読み取られた二次元コード100の最大訂正可能コードワード数が9個であり、実際の訂正対象コードワードの数が8個であった場合、S42では、制御部20はNの値として「2」を特定する。なお、この時点では、第1デコード結果のデコードの過程で、既に最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されているため(図4のS16でYES)、S42で特定されるNの値は、多くの場合、「1」若しくは「2」である。
続くS44では、制御部20は、特定可能コードワードのうちから、N個の特定のコードワードを特定する。S42で特定されたNの値が「1」であった場合、S44では、制御部20は、特定可能コードワードのうちから1個の特定のコードワードを特定する。同様に、Nの値が「2」であった場合、S44では、制御部20は、特定可能コードワードのうちから2個の特定のコードワードを特定する。
続くS46では、制御部20は、S44で特定されたN個の特定のコードワードの値を変更する。初回のS46では、S44で特定されたN個の特定のコードワードの値を「00」に特定する。2回目以降のS46では、制御部20は、N個の特定のコードワードの値を、16進数に従って「01」「02」・・・「FF」の順に特定する。例えば、図6の(b)に示す例では、左上の1個のコードワード(即ち特定のコードワード)の値が「00」に変更されている様子が示されている。このうち、下線が付された9個のコードワードが「訂正対象コードワード」に対応し、下線が付されていない残りの35個のコードワードが「特定可能コードワード」に対応する。
S48では、制御部20は、値を変更された変更済みの特定のコードワードを含む訂正前コードワードに基づいて、デコードを試行する。この際、制御部20は、必要に応じて誤り訂正処理も行う。
S50では、制御部20は、S48で試行されたデコードの結果、第1のデコード結果とは異なる第2のデコード結果が取得されたか否かを判断する。値を変更された変更済みの特定のコードワードを含む訂正前コードワードに基づいてデコードが行われる場合(S48)、以下の三通りの結果のうちのいずれかが得られる。
第1の結果は、デコード失敗(即ち、デコード結果が得られないこと)である。即ち、第1の結果が得られる場合とは、特定のコードワードの値を変更したことで、誤ったセルブロックの数(即ち正しい値を示さないコードワードの数)が最大誤り訂正許容率の限界値を超え、その結果、誤り訂正処理を行ったとしてもデコード結果の取得に失敗する場合である(図6の(b)も参照)。この場合、制御部20は、S50でNOと判断し、S52に進む。
第2の結果は、既に取得済みの第1のデコード結果が得られることである。即ち、第2の結果が得られる場合とは、特定のコードワードの値を値に変更したが、誤ったセルブロックの数(即ち正しい値を示さないコードワードの数)が最大誤り訂正許容率の限界値以下であるため、誤り訂正処理が行われることで、誤ったセルブロックに対応するコードワードの値が訂正され、第1のデコード結果が得られる場合である。この場合も、制御部20は、S50でNOと判断し、S52に進む。
第3の結果は、第1のデコード結果とは異なる第2のデコード結果が得られることである。即ち、この第3の結果が得られる場合とは、特定のコードワードの値を変更したことで、第1のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われ、その結果、第1のデコード結果とは異なる第2のデコード結果が得られる場合である。第3の結果が得られる場合とは、特定のコードワードの値を変更したことにより、訂正前コードワードのうちの訂正対象コードワードが変化し、その結果として第2のデコード結果が得られる場合と言い換えてもよい(図6の(c)(d)参照)。この場合、制御部20は、S50でYESと判断し、図5のコード検証処理をこの時点で終了する。
S52では、制御部20は、この時点で、現在特定されているN個の特定のコードワードについて、可能性のある全ての値(及び組合せ)を用いてデコードを試行(S48)したか否かを判断する。即ち、S52では、制御部20は、特定のコードワードの値を「00」から「FF」までの全ての値に変更した上でデコードを行ったか否かを判断する。また、2個の特定のコードワードが特定されている場合には、S52では、制御部20は、2個の特定のコードワードの値を「00」から「FF」まで変化させた上で、全ての組合せについてデコードを行ったか否かを判断する。この時点で、現在特定されているN個の特定のコードワードについて、可能性のある全ての値(S42で特定されたNの値が2以上の場合は可能性のある全ての値の組合せ)を用いてデコードを試行(S48)済みである場合、制御部20は、S52でYESと判断し、S54に進む。一方、この時点で、現在特定されているN個の特定のコードワードについて、まだ変更されていない値(又は組合せ)が存在する場合、制御部20は、S52でNOと判断し、S46に戻る。戻った先のS46では、制御部20は、N個の特定のコードワードの値を別の値(又は別の組合せ)に変更し、再びS48、S50の処理を実行する。
S54では、制御部20は、この時点で、すべての特定可能コードワード(S42で特定されたNの値が2以上の場合は可能性のある全ての組合せ)を、特定のコードワードとして特定済みであるか否かを判断する。この時点で、すべての特定可能コードワード(又は組合せ)を、特定のコードワードとして特定済みであれば、制御部20は、S54でYESと判断し、図5のコード検証処理を終了する。一方、特定可能コードワードの中に、特定のコードワードとして未特定のコードワード(又は組合せ)が存在する場合、制御部20は、S54でNOと判断し、S44に戻る。戻った先のS44では、制御部20は、異なるN個の特定のコードワードを新たに特定し、S46以降の各処理を再び実行する。
(具体例;図6)
以上、図5のコード検証処理について説明した。続いて、図6を参照して、コード検証処理が実行される過程で、第2のデコード結果が取得される場合の具体例を説明する。図6の(a)では、第1のデコード結果が取得された時点の44個の訂正前コードワードが示されている。図6の(a)で示される44個の訂正前コードワードは、図3の(a)に示す訂正前コードワードと同じものである。即ち、図6の例で示される44個の訂正前コードワードは、図2の二次元コード100を読み取る過程で抽出されるコードワードである。上記の通り、図5のS40においては、制御部20は、下線が付された9個のコードワード、下線が付されていない残りの35個のコードワードを、それぞれ、「訂正対象コードワード」、「特定可能コードワード」として特定する。また、図6の(a)で示される44個の訂正前コードワードに基づいてデコードが実行された結果、すでに、第1のデコード結果「http://srv.prof.net/~lob」が取得されている(図4のS14でYES)。
以上、図5のコード検証処理について説明した。続いて、図6を参照して、コード検証処理が実行される過程で、第2のデコード結果が取得される場合の具体例を説明する。図6の(a)では、第1のデコード結果が取得された時点の44個の訂正前コードワードが示されている。図6の(a)で示される44個の訂正前コードワードは、図3の(a)に示す訂正前コードワードと同じものである。即ち、図6の例で示される44個の訂正前コードワードは、図2の二次元コード100を読み取る過程で抽出されるコードワードである。上記の通り、図5のS40においては、制御部20は、下線が付された9個のコードワード、下線が付されていない残りの35個のコードワードを、それぞれ、「訂正対象コードワード」、「特定可能コードワード」として特定する。また、図6の(a)で示される44個の訂正前コードワードに基づいてデコードが実行された結果、すでに、第1のデコード結果「http://srv.prof.net/~lob」が取得されている(図4のS14でYES)。
そして、図6の(a)の例では、第1のデコード結果が取得された際に9個のコードワードに対して誤り訂正処理が行われている。この訂正対象コードワードの数「9個」は、最大誤り訂正許容率に相当する数である。そのため、この例では、図5のS42において、制御部20はNの値「1」を特定する。
図6の(b)では、制御部20が、35個の特定可能コードワードのうちから、左上の1個のコードワード(太線部分参照)を特定のコードワードとして特定した様子が示されている(図5のS44)。そして、制御部20は、特定のコードワードの値を「00」に変化させている(S46)。そして、制御部20は、特定のコードワードの値を「00」に変化させた訂正前コードワードに基づいてデコードを実行する(S48)。しかしながら、この時点では、デコードは失敗するか、又は第1のデコード結果が出力されるに過ぎず、第2のデコード結果は得られない(S50でNO)。その後、制御部20は、特定のコードワードの値を「FF」まで順に変更しながらデコードを実行するが、まだ第2のデコード結果は得られない(S50でNO、S52でYES、S54でNO)。次に、制御部20は、別のコードワードを特定し、同様の処理を繰り返す。
その後、図6の(c)に示すように、制御部20が、特定のコードワード(太線部分参照)の値を「16」に変更した上でデコードを実行した場合、図6の(d)に示すように、第1のデコード結果が得られた場合とは異なるコードワードに対して誤り訂正処理が行われる(図6(d)の下線部参照)。なお、この際、特殊セル50を含むセルブロックに対応するコードワード(斜線ハッチング表示参照)も、誤り訂正処理によって「F1」に値が変更されている。この結果、制御部20は、第1のデコード結果とは異なる第2のデコード結果「http://srv.prof.net/~lab」を取得する(S50でYES)。
(コード読取処理の続き;図4のS20以降)
図5のコード検証処理を終了すると、図4のS20において、制御部20は、コード検証処理の結果、第2のデコード結果が取得されたか否かを判断する。第2のデコード結果が取得されている場合、制御部20は、S20でYESと判断し、S22に進む。
図5のコード検証処理を終了すると、図4のS20において、制御部20は、コード検証処理の結果、第2のデコード結果が取得されたか否かを判断する。第2のデコード結果が取得されている場合、制御部20は、S20でYESと判断し、S22に進む。
S22では、制御部20は、第1のデコード結果と、第2のデコード結果と、強調コード画像と、を出力する。例えば、S22では、制御部20は、表示部14に第1のデコード結果と、第2のデコード結果と、強調コード画像とを表示させる。ここで、強調コード画像とは、二次元コード100のうち、第1のデコード結果及び第2のデコード結果が取得される要因となった特定のセルブロック(例えば、特殊セル50を含むセルブロック)を強調した画像である。S22を終えると、制御部20は、図4のコード読取処理を終了する。
図7を参照して、S22における出力内容の一例を説明する。図7の例では、強調コード画像ECと、第1のデコード結果「http://srv.prof.net/~lob」と、第2のデコード結果「http://srv.prof.net/~lab」と、が出力されている。強調コード画像ECは、基本的には、二次元コード100の撮像画像であるコード画像C(図2の(a)参照)と同様であるが、特殊セル50を含む特定のセルブロックを強調するための枠70が表示されている点が異なる。特定のセルブロックの強調方法はこれには限られず、特定のセルブロックの表示色を変更する、強調のための矢印等を付加する、等してもよい。また、図7の例では、二次元コード100に基づいて2種類のデコード結果が取得されたこと、及び、利用者に、二次元コード100をよく確認するように注意を喚起するためのメッセージも併せて出力されている。
一方、S24では、制御部20は、この時点で取得されている第1のデコード結果のみを出力する。S24を終えると、制御部20は、図4のコード読取処理を終了する。
以上、本実施例の二次元コード読取システム2について説明した。上記の通り、本実施例では、二次元コード読取端末10の制御部20は、二次元コードを表わすコード画像に基づいてデコードを行うことで第1のデコード結果が取得される場合(図4のS14でYES)に、デコードの過程で、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断する(S16)。そして、制御部20は、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断する場合(S16でYES)に、図5のコード検証処理を実行する。コード検証処理では、制御部20は、第2のデコード結果が取得されるか(S50でYES)、全ての特定可能コードワードを特定のコードワードとして特定し、全てのコードワードの値についてデコードを試行し終える(S54でYES)まで、S44〜S54の処理を繰り返し実行する。S44〜S54の処理を繰り返し行う過程では、上記の三通り(即ち第1〜第3の結果)の結果のいずれかが得られる。
読み取られた二次元コード100が通常の二次元コードであった場合、図5のS54でYESと判断されるまで、S44〜S54の処理を繰り返し実行した場合であっても、上記の第1の結果(即ちデコード失敗)と第2の結果(即ち第1のデコード結果の再取得)のいずれかが得られるに過ぎない。一方、読み取られた二次元コード100が、上記の特殊二次元コードである場合、S44〜S54の処理を繰り返し実行する過程で、二通りのデコード結果(第1のデコード結果及び第2のデコード結果)が得られ得る。即ち、S44〜S54の処理を繰り返し実行したことで、上記の第3の結果(即ち第2のデコード結果の取得)が得られた場合、読み取られた二次元コード100が特殊二次元コードであると言うことができる。
従って、本実施例によると、二次元コード読取端末10は、S44〜S54の処理を実行することによって、読み取られた二次元コード100が、読み取りの際の条件に応じて二通りの異なるデコード結果が出力され得る特殊二次元コードであるか否かを判別することができる。
上記の通り、本実施例では、制御部20は、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断する場合(S16でYES)に、図5のコード検証処理を実行する。上記の通り、読み取られた二次元コード100が特殊二次元コードである場合には、第1のデコード結果が取得される過程で誤り訂正処理が行われている。即ち、第1のデコード結果が取得される過程で誤り訂正処理が行われていない場合、読み取られた二次元コード100が特殊二次元コードである可能性は極めて低い。従って、本実施例では、二次元コード100が特殊二次元コードである可能性が極めて低い場合に図5のコード検証処理を実行させないことにより、どのような場合もコード検証処理を実行させる場合に比べて、制御部20の処理負荷を軽減することができる。
本実施例では、図5のS44において、制御部20は、訂正前コードワードのうち、1個以上の訂正対象コードワードを除いた1個以上の特定可能コードワードのうちから、N個の特定のコードワードを特定する。訂正前コードワードのうち、訂正対象コードワードの値を他の値に変えても、デコードの際にその値の誤り訂正処理が行われることで、同じ第1のデコード結果が出力されるように訂正されるに過ぎない。即ち、訂正対象コードワードの値を特定のコードワードとして特定し、値を変更したとしても、変わらず第1のデコード結果が出力されるに過ぎない。そのため、二次元コード読取端末10は、訂正対象コードワードを特定のコードワードとして特定しないようにすることで、図5のS44〜S54の処理の実行回数(繰り返し回数)を減少させ、制御部20の処理負荷を少なくすることができる。
本実施例では、図5のS42において、Nの値として「1」が特定される場合、S44では、制御部20は1個の特定のコードワードを特定し、以降のS46〜S54の各処理を行う。1個の特定のコードワードが特定される場合、複数個の特定のコードワードが特定される場合に比べて各特定のコードワードの変更後の値の組合せが少なくなり、制御部20の処理負荷を小さくすることができる。
本実施例では、制御部20は、コード検証処理の結果として第2のデコード結果が取得されている場合(図4のS20でYES)、S22において、第1のデコード結果と、第2のデコード結果と、強調コード画像(図7参照)とを出力する。そのため、本実施例では、二次元コード読取端末10の利用者は、出力された内容に基づいて、読み取られた二次元コード100が特殊二次元コードであることを把握することができるとともに、二次元コード100からデコードされた第1のデコード結果と第2のデコード結果とを確認することができる。また、強調コード画像が出力されることで、利用者は、特定のセルブロックが要因となって第1のデコード結果及び第2のデコード結果が取得されたことを把握することができる。特に、特定のセルブロック内に特殊セル50が視認可能な態様で存在する場合、利用者が特殊セルを直接見て確認することができる。
また、本実施例では、制御部20は、第2のデコード結果が取得された場合に(図5のS50でYES)、コード検証処理を終了する。即ち、制御部20は、特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての値に変更し、変更されたすべての値のそれぞれについてデコードを行う場合に比べて、S44〜S54の処理の実行回数を少なくすることができる。そのため、二次元コード読取端末10の全体としての処理速度を向上させ得る。
また、上記の通り、本実施例では、制御部20は、第1のデコード結果が取得される場合(図4のS14でYES)に、デコードの過程で、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたと判断される場合(S16でYES)に、図5のコード検証処理を実行する。第1のデコード結果が取得される場合に、最大誤り訂正許容率の95%以上の数のコードワードに対して、既に誤り訂正処理が行われていれば、制御部20は、図5のS44において、残りの5%以下のコードワードに対応する数のコードワードを特定のコードワードとして特定した上で、S46以降の各処理を実行すればよい。そのため、最大誤り訂正許容率の95%以上のコードワードに対して既に誤り訂正処理が行われていれば、S44〜S54の処理の実行回数を比較的少なくし得る。そのため、二次元コード読取端末10の全体としての処理速度を向上させることができる。
本実施例と請求項の対応関係を説明しておく。二次元コード読取端末10が「二次元コード読取装置」の一例である。図4のS12が「デコード部」によって実行される処理の一例である。S16が「第1の判断部」によって実行される処理の一例である。S16でYESと判断される場合が「第1の場合」の一例である。図5のS44〜S54が「検査処理」の一例である。このうち、S44、S46、S48、S50が、それぞれ、「特定ステップ」、「変更ステップ」、「デコードステップ」、「判断ステップ」の一例である。訂正前コードワードが「複数個のコードワード」の一例である。メモリ22に記憶された読取アプリケーションプログラムが「コンピュータプログラム」の一例である。図4のS22が「デコード結果出力部」及び「強調コード画像出力部」が実行する処理の一例である。
(第2実施例)
第2実施例の二次元コード読取システム2について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理をサーバ6の制御部に実行させる点が第1実施例とは異なる。
第2実施例の二次元コード読取システム2について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理をサーバ6の制御部に実行させる点が第1実施例とは異なる。
本実施例では、二次元コード読取端末10の制御部20は、図4のS16でYESと判断すると、通信I/F18(図1)を介して、コード画像C、第1のデコード結果を含むデコード関係情報をサーバ6に送信する。サーバ6の制御部は、二次元コード読取端末10からデコード関係情報を受信すると、受信されたデコード関係情報に基づいて、図5のコード検証処理を実行する。コード検証処理の内容自体は第1実施例と共通する。サーバ6の制御部は、コード検証処理が終了すると、コード検証処理の結果(即ち、第2のデコード結果が取得できたか否か等)を含む結果情報を二次元コード読取端末10に送信する。
二次元コード読取端末10の制御部20は、サーバ6から、通信I/F18(図1)を介して、結果情報を受信すると、結果情報に基づいて、第2のデコード結果を取得済みか否かの判断(図4のS20の判断)を実行する。その後のS22、S24の処理の内容も第1実施例と共通するため詳しい説明は省略する。
以上の通り、本実施例では、制御部20は、図4のS16でYESと判断すると、通信I/F18(図1)を介して、コード画像C、第1のデコード結果を含むデコード関係情報をサーバ6に送信する。サーバ6の制御部は、二次元コード読取端末10からデコード関係情報を受信すると、受信されたデコード関係情報に基づいて、図5のコード検証処理を実行する。図5のコード検証処理の処理負荷は、図4のS10〜S16、S20〜S24の各処理の処理負荷の合計よりも大きい場合がある。本実施例によると、二次元コード読取端末10よりも処理能力の高いサーバ6を予め準備しておくことで、二次元コード読取端末10が全ての処理を実行する場合に比べ、二次元コード読取システム2の全体としての処理速度を向上させ得る。本実施例では、二次元コード読取システム2が「二次元コード読取装置」の一例である。
(第3実施例)
続いて、第3実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理の内容の一部が第1実施例とは異なる。本実施例では、制御部20は、第2のデコード結果が取得されたか否かに関わらず、特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての値に変更し、変更されたすべての値のそれぞれについてデコードを行う点が第1実施例とは異なる。即ち、本実施例では、図5のS48でデコードが試行された後、S50の判断を行わず(即ちS50を省略して)、第2のデコード結果が取得されたか否かに関わらず、S52の判断に進む。
続いて、第3実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理の内容の一部が第1実施例とは異なる。本実施例では、制御部20は、第2のデコード結果が取得されたか否かに関わらず、特定可能コードワードをすべて特定し、さらに、特定されたすべての特定のコードワードについて、特定のコードワードの値を変更可能なすべての値に変更し、変更されたすべての値のそれぞれについてデコードを行う点が第1実施例とは異なる。即ち、本実施例では、図5のS48でデコードが試行された後、S50の判断を行わず(即ちS50を省略して)、第2のデコード結果が取得されたか否かに関わらず、S52の判断に進む。
即ち、本実施例では、二次元コード読取端末10の制御部20は、特定可能コードワードと特定の値とのすべての組合せについてデコードを試行する(図5のS48)。そのため、二次元コード読取端末10は、二次元コード100に基づいて行われ得るすべてのデコードの結果を把握することができる。
(第4実施例)
続いて、第4実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例でも、図5のコード検証処理の内容の一部が第1実施例とは異なる。本実施例では、図5のS44において、制御部20がN個の特定のコードワードを特定する際に、特定可能コードワードのうち、誤り訂正符号に対応する1個以上のコードワード(例えば、図3中のE1〜E16に対応するコードワードに含まれる特定可能コードワード)のうちから優先的に前記特定のコードワードを特定する点において、第1実施例とは異なる。
続いて、第4実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例でも、図5のコード検証処理の内容の一部が第1実施例とは異なる。本実施例では、図5のS44において、制御部20がN個の特定のコードワードを特定する際に、特定可能コードワードのうち、誤り訂正符号に対応する1個以上のコードワード(例えば、図3中のE1〜E16に対応するコードワードに含まれる特定可能コードワード)のうちから優先的に前記特定のコードワードを特定する点において、第1実施例とは異なる。
上記の通り、1つの二次元コード100における複数個のコードワード(即ち複数個のセルブロック)は、データキャラクタに対応する1個以上のコードワード(図3中のD1〜D28に対応するコードワード)と、誤り訂正符号に対応する1個以上のコードワード(図3中のE1〜E16に対応するコードワード)と、を含んでいる。そして、本明細書で説明する「特殊二次元コード」は、その特性上、データキャラクタに対応するコードワードよりも、誤り訂正符号に対応するコードワードのほうに、誤りがより多く含まれる傾向がある。データキャラクタに対応するコードワードは、その値がデコード結果(URL等の文字列の内容)に直結するため、誤り訂正を前提とするコードワードを多く含ませられないという技術的な事情もある。そのため、図5のS44〜S54の処理の実行の際に、誤り訂正符号に対応する1個以上のコードワードのうちから優先的に特定のコードワードを特定することで、第2のデコード結果が比較的早期に取得され得る。S44〜S54の処理の実行回数を少なくし得るため、二次元コード読取端末10の全体としての処理速度を向上させ得る。
(第5実施例)
続いて、第5実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理のS46において、制御部20が特定のコードワードの値を変更する際の手法が第1実施例とは異なる。本実施例では、S46において、制御部20は、二次元コード100のうち、N個の特定のコードワードに対応するN個の特定のセルブロックに含まれる8個のセルのうち、特定のセルの明暗を反転させた場合における特定のコードワードの値を特定することにより、特定のコードワードの値を変更する。
続いて、第5実施例について、第1実施例と異なる点を中心に説明する。本実施例の二次元コード読取システム2も、その基本的な構成は第1実施例と共通する。ただし、本実施例では、図5のコード検証処理のS46において、制御部20が特定のコードワードの値を変更する際の手法が第1実施例とは異なる。本実施例では、S46において、制御部20は、二次元コード100のうち、N個の特定のコードワードに対応するN個の特定のセルブロックに含まれる8個のセルのうち、特定のセルの明暗を反転させた場合における特定のコードワードの値を特定することにより、特定のコードワードの値を変更する。
即ち、1個のコードワードは、二次元コード100に含まれる1個のセルブロック(即ち、8個のセルによって構成されるセル群)のデコード結果を2桁の16進数の英数字で表した文字列である。そして、コードワードの値は、当該コードワードに対応するセルブロック内の8個のセルの明色/暗色の組合せに対応している。即ち、1個のコードワードの値と、対応するセルブロック内の8個のセルの明暗の組合せとは、一対一に対応している。本実施例では、このことを利用して、制御部20は特定のコードワードの値を変更する。
図8を参照して、このことを具体的に説明する。図8は、1個の特定コードワードに対応する1個の特定のセルブロックSCBを示している。図8の特定のセルブロックSCBは、撮像部16に撮像されたコード画像Cに含まれる1個の特定のセルブロックである。特定のセルブロックSCBは、8個のセルCe1〜Ce8を含む。第1のデコード結果が取得された際のデコードにおいて、セルCe1、Ce3、Ce7は暗色セルとして読み取られ、セルCe2、Ce4、Ce5、Ce6、Ce8は明色セルとして読み取られている。第1のデコード結果が取得された際のデコードでは、この特定のセルブロックSCBに基づいて、特定のコードワード「XX」(即ち2桁の16進数の文字列)が抽出されている。
そして、S46において、制御部20は、特定のコードワードの値を「XX」から「YY」に変更する。特定のコードワード「YY」は、特定のセルブロックSCBにおいて、セルCe1を暗色セルではなく明色セルとして読み取った場合に抽出される値である。
このように、本実施例では、S46では、制御部20は、特定のコードワードの値を変更させる際、特定のセルブロックSCB内の特定のセルの明暗を反転させた場合に対応する特定のコードワードの値に変更する。
そのため、例えば、二度目以降のS46では、制御部20は、特定のコードワードの値を「XX」から「ZZ」に変更する(図示省略)。その際の特定のコードワードの値「ZZ」は、図8に示す特定のセルブロックSCBにおいて、セルCe2を明色セルではなく暗色セルとして読み取った場合に抽出される値である。
このように、制御部20は、特定のコードワードの値を変更する際、セルCe1からセルCe8までの明暗を順に反転させた場合に対応する特定のコードワードの値に順に変更する。セルCe1からセルCe8までの明暗を順に反転させる場合、8通り(即ち、8C1)の特定のコードワードの値が得られる。制御部20は、8通りの特定のコードワードの値を用いてデコードを試行(S48)することができる。
8通りの特定のコードワードの値を用いてデコードを試行(S48)した結果、第2のデコード結果が取得できなかった場合、次回以降のS46では、制御部20は、セルCe1からセルCe8のうちの2個のセルの明暗を反転させた場合に対応する特定のコードワードの値に順に変更する。この場合、28通り(即ち、8C2)の特定のコードワードの値が得られる。
このように、本実施例の特定のコードワードの値の変更手法によると、制御部20は、特定のコードワードの値を変更する際、特定のコードワードに対応する特定のセルブロック8個のセルのうちの少なくとも1つの明暗を反転させた場合に対応する特定のコードワードの値を特定する。これにより、特定のコードワードに対応する特定のセルブロック8個のセルの明暗のすべての組合せに対応する値を1つずつ特定する場合に比べ、特定のコードワードの値のバリエーションが少なく済む。具体的に言うと、例えば、制御部20は、特定のセルブロック8個のセルがすべて暗色セルである場合や、すべて明色セルである場合のような現実的でない場合等に対応するコードワードの値に基づいてデコード(S48)が行われることを抑制することができる。その結果、S44〜S54の処理の実行回数を少なくし得るため、二次元コード読取端末10の全体としての処理速度を向上させ得る。
(第6実施例)
第6実施例は、上記の第1〜第5実施例の変形例である。上記の第1〜第5実施例では、読み取り対象であった特殊二次元コードは、(例えば図2の二次元コード100)は、明色と暗色の中間色で表示したり、意図的に明色部と暗色部とに分割して表示したりした1個の特殊セル50を含む。これに対し、図9に示すように、本実施例で開示する特別な二次元コード300は、上記のような特殊セルを含まない特定のセルブロックを有している。
第6実施例は、上記の第1〜第5実施例の変形例である。上記の第1〜第5実施例では、読み取り対象であった特殊二次元コードは、(例えば図2の二次元コード100)は、明色と暗色の中間色で表示したり、意図的に明色部と暗色部とに分割して表示したりした1個の特殊セル50を含む。これに対し、図9に示すように、本実施例で開示する特別な二次元コード300は、上記のような特殊セルを含まない特定のセルブロックを有している。
本実施例の特別な二次元コード300は、デコードの際に、特定のセルブロックSCBに対応する特定のコードワードの値として「F1」が抽出される場合には、第1のデコード結果「http://srv.prof.net/~lob」が取得され、特定のコードワードの値を変更する等して、特定のコードワードの値として「71」が抽出される場合には、第2のデコード結果「http://srv.prof.net/~lab」が取得される。本実施例でも、特定のコードワードの値として「F1」が抽出される場合に誤り訂正の対象となるコードワードと、特定のコードワードの値として「71」が抽出される場合に誤り訂正の対象となるコードワードと、は異なる。即ち、本実施例の特別な二次元コード300は、特定のセルブロックSCBに対応する特定のコードワードの値に応じて異なるコードワードに対して誤り訂正処理が行われることにより、第1のデコード結果と、第1のデコード結果とは異なる第2のデコード結果と、の二通りのデコード結果を出力させることができる二次元コードである。
本実施例の二次元コード300を読み取って、第1のデコード結果と第2のデコード結果を両方とも出力するためには、上記の第1〜第5実施例で説明した二次元コード読取システム2を用いてコード読取処理(図4参照)を実行すればよい。
本実施例によると、特別な二次元コード300からは、特定のコードワードの値が第1の値である場合には、第1のデコード結果が出力され、特定のコードワードの値が第2の値に変更された場合には、第2のデコード結果が出力される。そのため、本実施例の特別な二次元コード300では、例えば、第1のデコード結果を、汎用の二次元コード読取装置によってデコード可能な汎用情報として記録させ、第2のデコード結果を、特定のコードワードの値を第2の値に変更してデコードを行ない得る構成を有する二次元コード読取装置によってのみデコード可能な光セキュリティ情報として記録させておくこともできる。従って、本実施例の特別な二次元コード300によると、外見上、上記の特殊セルに相当するセル等を含まない構成を有していても、特定のコードワードの値が第1の値であるか第2の値であるかに応じて二通りのデコード結果を出力することができる。
以上、本発明の各実施例について詳細に説明したが、これらは例示に過ぎず、特許請求の範囲を限定するものではない。特許請求の範囲に記載の技術には、以上に例示した具体例を様々に変形、変更したものが含まれる。例えば、以下の変形例を採用してもよい。
(変形例1)上記の各実施例では、図4のコード読取処理のS16では、制御部20は、デコードの過程で、最大誤り許容率の95%以上に相当する数のコードワードに対して誤り訂正処理が実行されたか否かを判断し、S16でYESと判断される場合に、図5のコード検証処理を実行している(又はサーバ6に実行させている)。これに限られず、S16において、制御部20は、デコードの過程で、訂正対象コードワードの数に関わらず、誤り訂正処理が実行されたか否かを判断してもよい。制御部20は、訂正対象コードワードの数に関わらず、誤り訂正処理が実行されていれば、S16でYESと判断し、図5のコード検証処理を実行する(又はサーバ6に実行させる)ようにしてもよい。
(変形例2)他の変形例では、図4のS16の処理が省略されてもよい。即ち、制御部20は、第1のデコード結果が取得された場合、誤り訂正処理が実行されたか否かに関わらず、図5のコード検証処理を実行する(又はサーバ6に実行させる)ようにしてもよい。
(変形例3)図4のS22における出力内容は、第1のデコード結果の一部(例えばURLの一部等)及び第2のデコード結果の一部(例えばURLの一部等)を含むようにしてもよい。また、図4のS22における出力内容が、強調コード画像を含んでいなくてもよい。
(変形例4)上記の第1〜第5実施例における特殊二次元コード、及び、第6実施例における特別な二次元コード300は、読み取りの際の条件によって二通りのデコード結果が出力され得るコードとして説明されている。これに限られず、特殊二次元コード及び特別な二次元コードは、読み取りの際の条件によって三通り以上のデコード結果が出力され得るコードであってもよい。また、特殊二次元コードは、そのような複数個のデコード結果の出力を可能にするために、2個以上の特殊セルを含んでいてもよい。同様に、特別な二次元コードは、そのような複数個のデコード結果の出力を可能にするために、2個以上の特定のセルブロックを含んでいてもよい。
本明細書または図面に説明した技術要素は、単独であるいは各種の組み合わせによって技術的有用性を発揮するものであり、出願時請求項記載の組み合わせに限定されるものではない。また、本明細書または図面に例示した技術は複数目的を同時に達成するものであり、そのうちの一つの目的を達成すること自体で技術的有用性を持つものである。
2:二次元コード読取システム
6:サーバ
10:二次元コード読取端末
12:操作部
14:表示部
16:撮像部
18:通信I/F
20:制御部
22:メモリ
40:ファインダパターン
42:アライメントパターン
44:データセル領域
50:特殊セル
70:枠
100:二次元コード
300:特別な二次元コード
C:コード画像
CB:セルブロック
EC:強調コード画像
SCB:特定のセルブロック
Ce1〜Ce8:セル
D1〜D26:データキャラクタに対応するセルブロック
E1〜E16:誤り訂正符号に対応するセルブロック
6:サーバ
10:二次元コード読取端末
12:操作部
14:表示部
16:撮像部
18:通信I/F
20:制御部
22:メモリ
40:ファインダパターン
42:アライメントパターン
44:データセル領域
50:特殊セル
70:枠
100:二次元コード
300:特別な二次元コード
C:コード画像
CB:セルブロック
EC:強調コード画像
SCB:特定のセルブロック
Ce1〜Ce8:セル
D1〜D26:データキャラクタに対応するセルブロック
E1〜E16:誤り訂正符号に対応するセルブロック
Claims (14)
- 複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、
前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、
前記デコード部が前記デコードを行ったことによって第1のデコード結果が取得される第1の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、
(a)前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、
(b)前記特定のコードワードの値を特定の値に変更する変更ステップと、
(c)前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、
(d)前記デコードステップにより、前記第1のデコード結果とは異なる第2のデコード結果が取得されるか否かを判断する判断ステップと、を含む、
前記検査処理実行部と、を備える、
二次元コード読取装置。 - 前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得された後、前記デコードの過程で誤り訂正処理が行われたか否かを判断する、第1の判断部をさらに備え、
前記検査処理実行部は、前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得され、かつ、前記第1の判断部が、前記誤り訂正処理が行われたと判断した前記第1の場合に、前記検査処理を繰り返し実行し、
前記特定ステップでは、前記コード画像に基づいて抽出され、前記誤り訂正処理が行われる前の前記複数個のコードワードのうちから、前記特定のコードワードが特定される、請求項1に記載の二次元コード読取装置。 - 前記特定ステップでは、前記複数個のコードワードのうち、前記第1のデコード結果が取得された際に前記誤り訂正処理が実行された1個以上の訂正対象コードワードを除いた1個以上の特定可能コードワードのうちから、前記特定のコードワードが特定される、請求項2に記載の二次元コード読取装置。
- 前記第1の判断部は、前記デコード部が前記デコードを行ったことによって前記第1のデコード結果が取得される場合に、前記デコードの過程で、前記二次元コードに設定されている最大誤り訂正許容率の90%以上のコードワードに対して、前記誤り訂正処理が行われたか否かを判断し、
前記検査処理実行部は、前記第1の判断部が、前記二次元コードに設定されている前記最大誤り訂正許容率の90%以上のコードワードに対して前記誤り訂正処理が行われたと判断した前記第1の場合に、前記検査処理を繰り返し実行する、請求項2又は3に記載の二次元コード読取装置。 - 前記特定ステップでは、1個の前記特定のコードワードが特定される、請求項1から4のいずれか一項に記載の二次元コード読取装置。
- 端末装置と、前記端末装置と通信可能なサーバと、をさらに備え、
前記端末装置には、
前記撮像部と、
前記デコード部と、
前記第1の場合に、前記コード画像を前記サーバに送信する送信部と、が搭載され、
前記サーバには、前記検査処理実行部が搭載される、請求項1から5のいずれか一項に記載の二次元コード読取装置。 - 前記検査処理実行部が前記検査処理を実行することによって前記第2のデコード結果が取得される場合に、前記第1のデコード結果の少なくとも一部、及び、前記第2のデコード結果の少なくとも一部を出力する、デコード結果出力部をさらに備える、請求項1から6のいずれか一項に記載の二次元コード読取装置。
- 前記検査処理実行部が前記検査処理を実行することによって前記第2のデコード結果が取得される第2の場合に、前記コード画像に基づいて、前記二次元コードのうち、前記第1のデコード結果及び前記第2のデコード結果が取得される要因となった特定のセルブロックを強調した画像である強調コード画像を出力する、強調コード画像出力部をさらに備える、請求項1から7のいずれか一項に記載の二次元コード読取装置。
- 前記検査処理実行部は、前記検査処理を実行する場合に、
前記判断ステップにおいて、前記第2のデコード結果が取得されたと判断された場合に、前記検査処理を終了する、請求項1から8のいずれか一項に記載の二次元コード読取装置。 - 前記検査処理実行部は、前記検査処理を実行する場合に、
前記特定ステップにおいて、前記複数個のコードワードのうち、誤り訂正符号に対応する1個以上のコードワードのうちから優先的に前記特定のコードワードを特定する、請求項9に記載の二次元コード読取装置。 - 前記検査処理実行部は、前記検査処理を実行する場合に、
前記判断ステップにおける判断結果に関わらず、前記複数個のコードワードのうち、前記特定のコードワードとして特定可能な特定可能コードワードをすべて特定し、特定されたすべての前記特定のコードワードについて、前記特定のコードワードの値を変更可能なすべての前記特定の値に変更し、変更されたすべての前記特定の値のそれぞれについて前記デコードステップを行う、請求項1から8のいずれか一項に記載の二次元コード読取装置。 - 前記変更ステップでは、前記特定のコードワードの値に基づいて、前記二次元コードのうち、前記特定のコードワードに対応する特定のセルブロックに含まれる8個のセルのうち、特定のセルの明暗を反転させた場合における前記特定のコードワードの値を特定することにより、前記特定のコードワードの値を前記特定の値に変更する、請求項1から11のいずれか一項に記載の二次元コード読取装置。
- 二次元コード読取装置のためのコンピュータプログラムであって、
前記二次元コード読取装置は、
複数個の明色セルと複数個の暗色セルとを二次元のマトリックス上に配置して構成される二次元コードを撮像する撮像部と、
コンピュータと、を備え、
前記コンピュータプログラムは、前記コンピュータを、以下の各部、即ち、
前記撮像部によって撮像された前記二次元コードを表わすコード画像に基づいて、前記二次元コードに記録された情報のデコードを行うデコード部と、
前記デコード部が前記デコードを行ったことによって第1のデコード結果が取得される第1の場合に、以下の検査処理を繰り返し実行する検査処理実行部であって、前記検査処理は、
(a)前記コード画像に基づいて抽出される複数個のコードワードのうちから、特定のコードワードを特定する特定ステップと、
(b)前記特定のコードワードの値を特定の値に変更する変更ステップと、
(c)前記特定の値に変更された変更済みの前記特定のコードワードを含む前記複数個のコードワードを用いて前記デコードを行うデコードステップと、
(d)前記デコードステップにより、前記第1のデコード結果とは異なる第2のデコード結果が取得されるか否かを判断する判断ステップと、を含む、
前記検査処理実行部、
として機能させる、コンピュータプログラム。 - 複数個の明色セルと複数個の暗色セルとを含む複数個のセルを二次元のマトリックス上に配置して構成される二次元コードであって、
二次元コード読取装置によってデコードが行われる場合に、
前記二次元コードを表わすコード画像に基づいて抽出される複数個のコードワードのうちの特定のコードワードの値が第1の値である場合には、第1のデコード結果が出力され、
前記特定のコードワードの値が前記第1の値とは異なる第2の値に変更された場合には、前記第1のデコード結果とは異なる第2のデコード結果が出力される、
二次元コード。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019061458A JP2020160961A (ja) | 2019-03-27 | 2019-03-27 | 二次元コード読取装置、コンピュータプログラム、及び、二次元コード |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2019061458A JP2020160961A (ja) | 2019-03-27 | 2019-03-27 | 二次元コード読取装置、コンピュータプログラム、及び、二次元コード |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2020160961A true JP2020160961A (ja) | 2020-10-01 |
Family
ID=72639499
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2019061458A Pending JP2020160961A (ja) | 2019-03-27 | 2019-03-27 | 二次元コード読取装置、コンピュータプログラム、及び、二次元コード |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2020160961A (ja) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102527390B1 (ko) * | 2022-10-26 | 2023-04-28 | 주식회사 버넥트 | 2차원 코드 정보 인식 방법 |
JP7415671B2 (ja) | 2020-03-05 | 2024-01-17 | 富士通株式会社 | 情報処理プログラム、情報処理装置および情報処理方法 |
-
2019
- 2019-03-27 JP JP2019061458A patent/JP2020160961A/ja active Pending
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP7415671B2 (ja) | 2020-03-05 | 2024-01-17 | 富士通株式会社 | 情報処理プログラム、情報処理装置および情報処理方法 |
KR102527390B1 (ko) * | 2022-10-26 | 2023-04-28 | 주식회사 버넥트 | 2차원 코드 정보 인식 방법 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11238255B2 (en) | Method, device, and system for generating, repairing, and identifying an incomplete QR code | |
TWI693551B (zh) | 二維碼的產生方法、解碼方法以及裝置 | |
US11507766B2 (en) | Method and apparatus for processing encoded pattern, storage medium, and electronic apparatus | |
CN108665041B (zh) | 二维码生成及识别方法、装置、计算机设备及存储介质 | |
JP6590335B2 (ja) | 二次元コード、及び該二次元コードの読取方法 | |
JP6061075B2 (ja) | 二次元コード、二次元コードの生成方法、及び二次元コードの読取方法 | |
CN103377390A (zh) | 二维码的生成、识别方法和装置 | |
JP2020160961A (ja) | 二次元コード読取装置、コンピュータプログラム、及び、二次元コード | |
Zhang et al. | Aesthetic QR codes based on two-stage image blending | |
US20160078333A1 (en) | Encoding an information object | |
US20170180605A1 (en) | Image forming apparatus, and method for image processing thereof | |
US20120091205A1 (en) | Apparatus and method for decoding matrix code symbol | |
WO2016114294A1 (ja) | 情報コード読取システムおよび情報コード読取装置 | |
JP2013080448A (ja) | 二次元コードを出力する計算機及び当該計算機に実行されるプログラム | |
JP4874706B2 (ja) | Qrコード読取装置 | |
JP7200793B2 (ja) | 二次元コード読取装置 | |
JP2007310675A (ja) | Qrコード認識装置、qrコード認識装置の制御方法、qrコード認識装置制御プログラムおよびそれを記録したコンピュータ読み取り可能な記録媒体 | |
CN101833645A (zh) | 一种基于码字组合的条码解码方法 | |
US20150213322A1 (en) | Image processing apparatus | |
JP2008021009A (ja) | バーコード認識装置、方法及びプログラム | |
JP2009295108A (ja) | 情報コード読取装置及び情報コード読取方法 | |
JP6437749B2 (ja) | カラーコードの作成方法 | |
JP5522104B2 (ja) | 情報コード読取装置 | |
JP2007328672A (ja) | 2次元コード復号装置、2次元コード復号方法及びプログラム | |
US7920737B2 (en) | Code image processing method and code image processing apparatus |