[第1実施例]
図1(A)はこの発明の第1実施例の符号読取装置10の外観構成の一例を表面から見た図解図であり、図1(B)はこの符号読取装置10の外観構成の一例を裏面から見た図解図である。
読取装置10は、光学的に読取り可能であって予め定める形式でデータを表す符号を複数個一括して読取り、各符号の符号信号を検出し、検出した符号信号から符号が表す符号情報信号をそれぞれ再生する。たとえば、読取装置10は、手持ち型のバーコードリーダないしバーコードスキャナである。したがって、たとえば、読取り可能な符号はバーコードであり、符号信号はバーコードの形状を表す画像信号であり、符号情報信号は数値コード信号である。
図1(A)に示すように、符号読取装置(以下、単に「読取装置」という。)10は、正面から見た形状が縦長の長方形の筐体12を含み、筐体12の表面側には、表示装置14および入力装置16が設けられる。筐体12は、ユーザが片手で持つことができる大きさで形成される。なお、筐体12の形状および大きさは一例であり、限定されるべきでない。
表示装置14は、汎用のLCDであり、表示面が筐体12から露出するように配置される。ただし、表示装置14としては、有機ELを用いたディスプレイを設けることもできる。また、タッチパネルがLCDに一体的に設けられたタッチディスプレイを用いることもできる。
入力装置16は、ハードウェアキーであり、第1実施例では、スキャンキー16a、OK(決定)キー16b、カーソルキー16c、クリアキー16d、電源キー16eおよび数字キー(テンキー)16fを含む。
スキャンキー16aは、バーコードの読取指示(読取処理の実行指示)を入力するために用いられる。OKキー16bは、各種の設定および各種の処理(バーコードの読取処理を除く)の実行を決定するために用いられる。カーソルキー16cは、表示装置14に表示されるカーソルを移動させたり、表示装置14に表示されたアイコンなどのオブジェクトを選択したりするために用いられる。
クリアキー16dは、各種の設定をクリア(リセット)するために用いられる。電源キー16eは、読取装置10の主電源をオン/オフするために用いられる。数字キー16fは、数字を入力するために用いられ、この第1実施例では、主として、一度に(一括して)読み取るバーコードの数(以下、「読取数」という。)を入力するために用いられる。
図1(B)に示すように、筐体12の裏面側であり、表示装置14の反対側には、撮像装置18が設けられる。図示および詳細な説明は省略するが、撮像装置18は、撮像素子、照射装置および画像処理回路を含む。撮像素子は、CCDまたはCMOSである。照射装置は、レーザ光を照射する装置であって、撮影時に、撮影範囲を視認可能に指示するための四角枠のレーザ光を被写体に向けて照射する。図示は省略するが、撮像装置18の撮影面(レンズ)および照射装置の照射面(発光面)は筐体12から露出されるように配置される。たとえば、撮像装置18の撮影方向および照射装置の照射方向は、筐体12の平坦な裏面に対して所定角度(60°程度)傾いた方向に設定される。
なお、図示は省略するが、筐体12内にはバッテリが収納され、収納されたバッテリを覆うように筐体12の裏面に蓋が設けられている。
図2は図1に示した読取装置10の電気的な構成の一例を示すブロック図である。図2に示すように、読取装置10は、CPU20を含み、CPU20には、入力装置16、撮像装置18、ROM22、RAM24、電源制御回路26およびドライバ28が接続される。また、ドライバ28には、表示装置14が接続される。
CPU20は、読取装置10の全体的な制御を司る。ROM22は、読取装置10の制御プログラムおよび必要なデータを記憶する。ただし、ROM22に代えて、EEPROMまたはHDDのような不揮発性のメモリが設けられてもよい。RAM24は、CPU20のバッファ領域およびワーク領域として用いられる。電源制御回路26は、CPU20の指示の下、バッテリからの電源を各回路コンポーネトに供給および停止する。
入力装置16は、上述した各種キー(16a〜16f)であり、操作されたキーに対応する操作信号ないし操作データをCPU20に入力する。撮像装置18は、CPU20からの撮影指示に応じて、予め定められる撮影範囲内の被写体(バーコードが付された物品ないし商品を含む)の画像を撮影し、撮影した2次元画像(撮影画像)についての画像データ(撮影画像データ)を生成する。ただし、2次元画像は、白黒画像(濃淡画像)またはカラー画像である。
なお、撮影範囲は、撮像装置18の画角で決定され、たとえば、撮像装置18を被写体に近づければ、撮影範囲は狭くなり、撮像装置18を被写体から遠ざければ、撮影範囲は広くなる。ただし、ズーム機能によって撮影範囲が変化されてもよい。
撮像装置18は、撮影画像データをCPU20に与える。CPU20は、撮影画像データをRAM24に一旦記憶する。また、撮像装置18では、照射装置が、撮影時に、撮影範囲を指示するためのレーザ光を照射する。
ドライバ28は、表示制御回路であり、たとえば、GPUおよびVRAMを含み、CPU20からの指示に従って表示画像データを生成し、表示装置14に出力する。したがって、表示装置14には、表示画像データに対応する表示画像(画面)が表示される。また、ドライバ28は、CPU20からの指示に従って、RAM24に記憶された撮影画像に対応する画像データを表示装置14に出力する。したがって、表示装置14には、撮影画像が表示される。つまり、撮影画像がプレビュー表示される。
また、撮像装置18では、画像処理回路が、RAM24に記憶された撮影画像データに2値化処理を施し、2値画像の画像データ(2値画像データ)を生成する。たとえば、2値化処理では、撮影画像において、所定の明るさ(輝度)未満の画素が黒色の画素に変換され、所定の明るさ以上の画素が白色の画素に変換される。所定の明るさは、予め実験等によって経験的に決定される。
たとえば、2値画像データからバーコードを抽出する場合には、CPU20は、まず、2値画像データに平滑化フィルタをかけ、2値画像をぼやけた状態にする。次に、CPU20は、ぼやけた2値画像データから島状の塊(同じ色が集中している箇所)の位置を抽出する。CPU20は、抽出した島状の塊の位置およびその付近において、平滑化フィルタをかける前の2値画像データから直線が存在するかどうか判断し、直線が存在する場合には、その直線を検出する(エッジ抽出)。そして、CPU20は、検出した直線とこの直線に対して垂直に伸びる島状の塊の範囲を抽出することによって、2値画像データから矩形画像データを抽出する。2値画像データから抽出された矩形画像データは、バーコードに対応する画像データの候補として一時的にリストアップされる。
続いて、CPU20は、抽出した各矩形画像データがバーコードを示す画像データであるかどうかを、たとえば、パリティチェックを行うことにより判断する。パリティチェックでは、CPU20は、矩形画像データに含まれる直線(バー)に基づいて、矩形画像データをコード化し、コード化したコードのパターンがバーコードのパターンに合っているかどうかを判断する。
CPU20は、バーコードを示す画像データであることが判断された矩形画像データから、数値および文字の少なくとも一方で示されるバーコード情報に変換する。つまり、バーコードが復号される。ただし、バーコード情報は、さらに記号を含んでいてもよい。
CPU20は、変換したバーコード情報(復号結果)を出力する。一例として、バーコード情報は、表示装置14に表示される。ただし、バーコード情報は、読取装置10のホスト装置(図示せず)に送信されてもよい。図示は省略したが、CPU20は、インターフェイスを介して、ホスト装置にバーコード情報を送信する。したがって、バーコード情報は、ホスト装置における処理に用いられる。たとえば、店舗で販売される商品にバーコードが付されている場合には、バーコード情報は小売金額、商品名および商品種類を表し、ホスト装置は金銭登録機として機能する。ただし、バーコード情報は、無線でホスト装置に送信されてもよい。
このような構成の読取装置10では、上述したように、撮影画像に含まれる複数のバーコードを一括して読み取る(復号する)ことができる。たとえば、バーコードの復号に成功した場合には、当該バーコードの領域に対応して成功を示す情報(たとえば、復号結果)が記憶される。一方、バーコードの復号に失敗した場合には、当該バーコードの領域に対応して失敗を示す情報が記憶される。また、バーコードの復号に失敗した場合には、リトライ処理が実行され、新しい画像が撮像され、新しい撮影画像が取得され、前回復号に失敗したバーコードの領域におけるバーコードについて再度復号が実行される。
しかし、上記の場合には、バーコードの復号に失敗した場合には、当該バーコードの領域に対応して失敗を示す情報が記憶されるだけであり、ユーザは、どのバーコードが正しく撮影されていないか、また、どのバーコードが正しく復号されていないのかを知ることができない。このため、撮影処理をやり直す場合に、バーコードが復号できない商品の位置または/および向きを変えるなど、撮影状況ないし撮影環境を変えることができない。また、バーコードを復号できない商品の撮影のみを実行することもできない。
そこで、この第1実施例では、正しく撮影または復号できないバーコードが付された商品をユーザに視認可能に報知することにより、上記の問題を回避するようにしてある。簡単に説明すると、商品単位でバーコードの復号(読み取り)の成否を知ることができる情報(画像)が、撮影画像に重畳して表示される。
図3は撮像装置18で撮影された撮影画像の一例を示す図解図である。図4は撮影画像に2値化処理を施した2値画像から商品の形状を検出した状態の一例を示す図解図である。図5は撮影画像から検出した商品にラベルを付した場合の一例を示す図解図である。図6は撮影画像に2値化処理を施した2値画像からバーコードを検出した状態の一例を示す図解図である。図7は撮影画像から検出したバーコードにラベルを付した場合の一例を示す図解図である。図8(A)は作成時の商品テーブルの一例を示す図解図であり、図8(B)はバーコードテーブルの一例を示す図解図であり、図8(C)はバーコードテーブルをコピーした更新後の商品テーブルの一例を示す図解図である。図9は成否画像の一例を示す図解図である。図10は合成画像の一例を示す図解図である。
たとえば、読取装置10では、読取モードにおいて、ユーザがスキャンキー16aを操作すると、これに応じて、読取処理が開始される。
なお、詳細な説明は省略するが、読取モードは、読取装置10がバーコードを読み取り可能な状態であることを意味し、たとえば、読取装置10の主電源がオンされると、自動的に設定される。また、読取装置10が動作中である場合には、ユーザの操作に従って、読取モードが設定される。
バーコードの読取処理が開始されると、CPU20は、撮像装置18を制御して、撮影処理を実行する。撮像装置18は、CPU20からの撮影指示を受けて、レーザ光を発光することにより、撮影範囲を視認可能に表示し、オートフォーカス処理を実行し、焦点距離が合わされると、撮影処理を実行する。したがって、上述したように、撮影画像データがRAM24に記憶されるとともに、表示装置14に撮影画像が表示される。たとえば、図3に示すような撮影画像が取得され、表示装置14に表示される。
図3に示す撮影画像では、4つの商品のそれぞれに1つのバーコードが付されている。図3では、一例として、モノクロの撮影画像が示されるが、上述したように、撮影画像はカラーであってもよい。また、第1実施例では、4つのバーコードを含む被写体を撮影するようにしてあるが、これは単なる例示であり、限定されるべきでない。
撮像装置18は、さらに、RAM24に記憶された撮影画像データに2値化処理を施す。すると、図4に示すような2値画像が生成される。CPU20は、2値画像から商品の形状を抽出し、検出した商品の形状に相当する領域Qのそれぞれにラベルを付す。
商品の形状を検出する場合には、CPU20は、2値画像データに対応する2値画像に、n回膨張処理を施した後に、n回縮退(収縮)処理を施す。ただし、注目する画素の周辺に1画素でも白い画素があれば白に置き換える処理を膨張処理といい、逆に、注目する画素の周辺に1画素でも黒い画素があれば黒に置き換える処理を縮退(収縮)処理という。
上記のように、膨張処理および縮退処理が実行されると、2値画像の商品に相当する範囲において、黒の部分が少なくなる。つまり、商品に相当する部分が白い画像が生成される。したがって、2値化したときに、背景が黒くなるように撮影すれば、白い部分の塊を抽出することにより、商品の形状を検出することができる。一例として、商品を置く台の色を暗い色にしておけば容易に商品の形状を検出することができる。
なお、縮退処理および膨張処理を行う回数nは、実験等によって経験的に決定されるが、実際に使用して、物品の形状を抽出できる回数に設定するようにしてもよい。
また、図3(図10、図14、図16、図18も同じ)では、図面の都合上、撮影画像の背景の色を省略してあるが、たとえば、白色以外の暗い色である。
ただし、これは一例であり、たとえば、背景の色が明るく、2値化した場合に、撮影画像の背景の色が白になる場合には、上記の場合とは、逆に、2値化画像に、n回縮退(収縮)処理を施した後に、n回膨張処理を施して、商品に相当する部分が暗い画像を生成するようにすればよい。
また、商品の形状を検出する方法としては、撮影画像から物体の輪郭を抽出する他のアルゴリズムを採用することもできる。
一例として、背景の色が固定されている場合には、撮影画像から背景の色に対応する色を減算することにより、背景以外の物体(商品)の形状を抽出(検出)することができる。具体的な方法としては、商品を配置する前の背景のみの撮影画像を予め取得しておき、予め取得した撮影画像から生成した2値画像と、商品を含む撮影画像から生成した2値画像との差分から商品の形状を検出することもできる。
また、他の例では、撮影画像において、色が変化する部分(エッジ)を検出し、エッジよって形成される閉領域を商品の形状として抽出(検出)することもできる。
なお、商品の形状を検出する方法は、上記のいずれか1つを用いるようにしてもよく、使用する環境(たとえば、撮影環境)に応じて、選択的に用いるようにしてもよく、或る手法で商品の形状を検出できない場合に、他の手法で商品の形状を検出するようにしてもよい。
CPU20は、2値画像から商品の形状を検出すると、検出した商品の形状に対応する領域Qのそれぞれにラベルを付す。ただし、この第1実施例では、商品の形状に外接する四角形を商品の領域Qとして検出するようにしてある。
図5に示すように、ラベルは、検出した商品の形状に対応する領域Q(ここでは、4つの領域Q)のそれぞれに対応して付される。図5では、ラベルの文字(アルファベット)を各領域Q内に記載することにより、ラベルが付されていることを表現してある。実際には、2値画像における領域Qの位置を座標で特定し、特定した座標に対応してラベルが付加される。たとえば、縦長の2値画像に対して、横方向をX軸とし、縦方向をY軸とする2次元座標系が設定される。また、たとえば、2値画像の左上の頂点が2次元座標系の原点Oに設定される。このような2次元座標系において、各領域Qの位置が特定される。ただし、座標のX成分およびY成分は2値画像(撮影画像)の画素数で表現される。また、領域Rの位置は、対角の2つの座標で特定される。このようなラベル付けは、後述するバーコードの場合についても同様である。
なお、商品の形状を四角形のような図形で近似しない場合には、商品であることが検出された範囲に含まれるすべての画素に対応してラベルが付される。
このように商品が検出され、各商品に対応する領域Qにラベルが付されると、図8(A)に示すような商品テーブルが作成される。図8(A)に示すように、商品テーブルは、商品の識別情報(ラベル)の欄に対応して、バーコードの識別情報および復号結果の欄が設けられる。作成時には、商品テーブルには、商品の識別情報の欄に、商品毎に付されたラベルが記述される。このとき、バーコード識別情報および復号結果の欄は空欄である。
また、上述したように、2値画像からバーコードが検出され、検出されたバーコードの領域Rのそれぞれにラベルが付される。図7に示すように、ラベルは、検出したバーコードの領域R(ここでは、4つの領域R)のそれぞれに対応して付される。図7では、ラベルの数値を各領域R内に記載することにより、ラベルが付されていることを表現してある。実際には、2値画像における領域Rの位置を座標で特定し、特定した座標に対応してラベルが付加される。2次元座標系の設定および座標で特定することについては、商品の場合と同じであるため、重複した説明は省略する。
さらに、検出されたバーコードが復号され、図8(B)に示すようなバーコードテーブルが作成される。図8(B)に示すように、バーコードテーブルは、バーコードの識別情報に対応して、復号結果の欄が設けられる。バーコードの識別情報の欄には、バーコード毎に付されたラベルが記述される。復号結果の欄には、復号されたバーコードに付されたラベルに対応して、当該バーコードの復号結果(図8(B)では、10桁の数字)が記述される。ただし、図8(B)(図8(C)も同じ)のバーコードテーブルでは、バーコードを復号できなかった場合の復号結果を横棒で示してある。
各領域Rにラベルが付されると、検出されたバーコードの数(検出数)が検出した商品(領域Q)の数(検出数)と一致するかどうかを判断する。バーコードの検出数が商品の検出数と一致しない場合には、撮影処理からやり直される。一方、バーコードの検出数が商品の検出数と一致する場合には、商品およびバーコードを正しく撮影できていると判断し、バーコードテーブルを商品テーブルにコピー(統合)する。つまり、図8(C)に示すように、商品テーブルが更新される。ただし、商品テーブルでは、商品の識別情報に対応するバーコードの識別情報の欄には、商品に付されたバーコードの識別情報が記述され、復号結果の欄には、当該バーコードの識別情報に対応する復号結果が記述される。
ただし、商品に付されたバーコードは、当該商品の領域Qに含まれる領域Rに対応するバーコードである。
商品テーブルが更新されると、更新後の商品テーブルに用いて、図9に示すような成否画像が生成される。成否画像は、2値画像(撮影画像)と同じ大きさの画像であり、商品に対応する領域Qと同じ位置および同じ大きさの領域に、当該商品に付されたバーコードの復号の成否に応じた色を付した画像である。たとえば、バーコードの復号に成功した場合には、当該バーコードが付された商品に対応する領域Qと同じ位置および同じ大きさの領域に半透明の緑色が付される。一方、バーコードの復号に失敗した場合には、当該バーコードが付された商品に対応する領域Qと同じ位置および同じ大きさの領域に半透明の赤色が付される。
ただし、図9(図10も同様)では、広い間隔を有する斜線を付すことにより、半透明の緑色が付されていることを示し、狭い間隔を有する斜線を付すことにより、半透明の赤色が付されていることを示す。
また、成否画像においては、商品に対応する領域Qと同じ位置および同じ大きさの領域に、参照符号“Q”を付すとともに、各領域Qに付されたラベルのアルファベットを記載することにより、各商品を強調するために付される(重ねられる)色の対応関係を示してある。
さらに、成否画像のうち、緑色または赤色で塗り潰した領域以外の領域は透明にされる。したがって、図9では、成否画像の大きさおよび形状を示すために外形線を記載してあるが、実際には、外形線も透明である。
生成された成否画像は、たとえば、撮影画像の前面に重畳(合成)される。したがって、図10に示すような合成画像が生成される。この合成画像が表示装置14に表示される。上述したように、成否画像において、領域Qに付した緑色および赤色は半透明であるため、合成画像では、緑色および赤色の背面に表示される商品を視認することができる。つまり、成否画像を重畳することにより、各商品の全体が色で強調される。したがって、ユーザは、バーコードを復号できた商品と、バーコードを復号できていない商品とを一目で理解することができる。つまり、バーコードの復号結果についての視認性を向上させることができる。
詳細な説明は省略するが、たとえば、復号できないバーコードが有る場合には、読取装置10は、バーコードを復号できない商品のみの読取処理を実行したり、すべての商品についての読取処理を最初からやり直したりする。たとえば、これらの処理は、ユーザが選択的に実行可能である。
図11は図2に示したRAM24のメモリマップ70の一例を示す図解図である。図11に示すように、RAM24は、プログラム記憶領域72およびデータ記憶領域74を含む。プログラム記憶領域72には、バーコード(符号)の読取プログラムを含む制御プログラムを記憶し、この制御プログラムは、メイン処理プログラム72a、画像表示プログラム72b、操作検出プログラム72c、撮影処理プログラム72d、商品検出プログラム72e、符号検出プログラム72fおよび復号プログラム72gなどを含む。
メイン処理プログラム72aは、読取装置10のメインルーチンを処理するためのプログラムである。画像表示プログラム72bは、表示装置14に表示する各種の表示画像に対応する表示画像データを生成および出力するためのプログラムである。また、画像表示プログラム72bは、撮影画像に対応する撮影画像データを表示装置14に出力するためのプログラムでもある。さらに、画像表示プログラム72bは、成否画像に対応する成否画像データを生成するとともに、撮影画像に成否画像を合成した合成画像に対応する合成画像データを表示装置14に出力するためのプログラムでもある。
操作検出プログラム72cは、入力装置16(キー16a〜16f)から入力される操作データを検出し、検出した操作データを操作データバッファ74aに記憶するためのプログラムである。
なお、表示装置14がタッチパネルディスプレイで構成される場合には、操作検出プログラム72cに従って、タッチパネルから入力される座標データが検出され、検出された座標データが操作データバッファ74aに記憶される。
撮影処理プログラム72dは、バーコードの読取処理が実行されたときに、撮像装置18を制御して、被写体を撮像するとともに、撮影画像から2値画像を生成するためのプログラムである。
商品検出プログラム72eは、2値画像から商品の形状を検出して商品テーブルを作成および更新するためのプログラムである。符号検出プログラム72fは、2値画像からバーコードを検出するためのプログラムである。復号プログラム72gは、バーコードを読み取ってバーコード情報に復号し、バーコードテーブルを作成するためのプログラムである。
図示は省略するが、プログラム記憶領域72には、読取装置10の制御に必要な他のプログラムも記憶される。
データ記憶領域74には、操作データバッファ74aが設けられる。また、データ記憶領域74には、画像生成データ74b、撮影画像データ74c、2値画像データ74d、商品ラベルデータ74e、バーコードラベルデータ74f、商品テーブルデータ74gおよびバーコードテーブルデータ74hが記憶される。
操作データバッファ74aは、検出された操作データを時系列に従って記憶するためのバッファである。操作データバッファ74aに記憶された操作データは、CPU20の処理に使用された後に消去される。ただし、上述したように、タッチパネルから入力された座標データが記憶される場合もある。
画像生成データ74bは、表示装置14に表示する表示画像に対応する表示画像データを生成するためのポリゴンデータおよびテクスチャデータなどを含むデータである。撮影画像データ74cは、撮像装置18で撮影された撮影画像についての画像データである。2値画像データ74dは、撮影画像に2値化処理を施して生成した2値画像についての画像データである。
商品ラベルデータ74eは、2値画像から検出された商品の形状に対応する領域Qの位置(範囲)にラベルを付したデータである。バーコードラベルデータ74fは、2値画像から検出されたバーコードに対応する領域Rの位置(範囲)にラベルを付したデータである。ただし、商品ラベルデータ74eおよびバーコードラベルデータ74fの各々が生成される場合には、2値画像データ74dがワーク領域にコピーされ、コピーされた2値画像データ74dが使用される。
商品テーブルデータ74gは、図8(A)および(C)に示したような商品テーブルのデータである。商品テーブルの作成時には、図8(A)に示すような商品テーブルに対応する商品テーブルデータ74gがRAM24に記憶され、商品テーブルが更新されると、図8(C)に示すように、バーコードテーブルデータ74hに対応するバーコードテーブルの内容が記述された商品テーブルに対応する商品テーブルデータ74gがRAM24に記憶(上書き)される。
バーコードテーブルデータ74hは、図8(B)に示したようなバーコードテーブルについてのデータである。撮影画像に含まれるバーコードが復号されると、図8(B)に示したようなバーコードテーブルが作成され、対応するバーコードテーブルデータ74hがRAM24に記憶される。
図示は省略するが、データ記憶領域74には、読取装置10の制御に必要な他のデータが記憶され、読取装置10の制御に必要なフラグまたはカウンタ(タイマ)が設けられる。
図12および図13は図2に示したCPU20のバーコードの読取処理を示すフロー図である。読取モードにおいて、スキャンキー16aが操作されると、CPU20は読取処理を開始し、ステップS1で、撮影処理を実行する。ここでは、CPU20は、撮像装置18に撮影指示を与える。これに応じて、撮像装置18は、撮影処理を実行し、撮影画像を取得し、さらに、撮影画像から2値画像を生成する。取得された撮影画像に対応する撮影画像データ74cおよび生成された2値画像に対応する2値画像データ74dはRAM24に記憶される。
次のステップS3では、2値画像から商品の形状を検出し、ステップS5で、商品にラベル付けを行う。つまり、CPU20は、商品の形状を検出すると、検出した商品の形状に対応する各領域Qにラベルを付す。したがって、商品ラベルデータ74eがデータ記憶領域74に記憶される。そして、ステップS7で、図8(A)に示したような作成時の商品テーブルを作成する。続いて、ステップS9では、2値画像からバーコードを検出し、ステップS11で、バーコードにラベル付けを行う。つまり、CPU20は、バーコードを検出すると、検出したバーコードに対応する各領域Rにラベルを付す。したがって、バーコードラベルデータ74fがデータ記憶領域74に記憶される。
続くステップS13では、検出したバーコードを復号する。ここでは、検出されたすべてのバーコードの各々に対して復号処理が実行される。次のステップS15では、図8(B)に示したように、各バーコードの識別情報(ラベル)に対応して復号結果を記述したバーコードテーブルを作成する。
そして、ステップS17では、各領域Qに対応するバーコードが有るかどうかを判断する。つまり、CPU20は、商品テーブルの識別情報の個数すなわち商品の検出数と、バーコードテーブルの識別情報の個数すなわちバーコードの検出数が一致するかどうかを判断する。
ステップS17で“NO”であれば、つまり、いずれか1つの領域Qでも対応するバーコードが無い場合には、ステップS19で、エラーを報知してステップS1に戻る。たとえば、ステップS19では、撮影処理をやり直すことを示すメッセージが表示装置14に表示される。ただし、読取装置10がスピーカを備える場合には、撮影処理をやり直すことを示す警告音(メロディー音)またはそのことを示すメッセージの合成音声をスピーカから出力するようにしてもよい。また、図示は省略するが、撮影処理が所定回数(3回)やり直された場合または撮影処理を繰り返し行っている時間が所定時間(たとえば、数分)を経過した場合には、バーコードが正しく撮影されないことを示すメッセージを表示装置14に表示して読取処理を強制的に終了するようにしてもよい。
一方、ステップS17で“YES”であれば、つまり、各領域Qに対応するバーコードが有れば、図13に示すステップS21で、バーコードテーブルを商品テーブルにコピーする。ステップS21では、商品に付されたバーコードの識別情報および復号結果が、当該商品の識別情報に対応して記述される。ただし、商品に付されたバーコードは、バーコードラベルデータ74fに記述された各領域Rのうち、商品ラベルデータ74eに記述された当該商品に対応する領域Qに含まれる領域Rに対応するバーコードである。
続いて、ステップS23では、コピー終了かどうかを判断する。ステップS23で“NO”であれば、つまり、コピー終了でなければ、ステップS21に戻る。一方、ステップS23で“YES”であれば、つまり、コピー終了であれば、ステップS25で、変数iを初期化する(i=1)。変数iは、バーコードを個別に識別するための変数であり、この第1実施例では、バーコードに付されたラベル(識別情報)の数字に相当する。
次のステップS27では、i番目のバーコードすなわち「i」のラベル(識別情報)が付されたバーコードが復号成功かどうかを判断する。ここでは、CPU20は、商品テーブルデータ74gを参照して、「i」のラベルが付されたバーコードの復号結果として、10桁の数字が記述されているかどうかを判断する。
ステップS27で“YES”であれば、つまり、i番目のバーコードが復号成功であれば、ステップS29で、生成する成否画像において、i番目のバーコードを含む領域Qに対応する領域を半透明の緑色で塗り潰して、ステップS33に進む。ただし、ステップS29では、CPU20は、i番目のバーコードを含む領域Qに対応する領域は商品テーブルを参照することにより、領域Qのラベルを取得し、当該ラベルが付された領域Qの座標を商品ラベルデータ74eから取得して、塗り潰す範囲すなわち領域Qと同じ位置および同じ大きさの領域を決定する。このことは、後述するステップS31についても同じである。
一方、ステップS27で“NO”であれば、つまり、i番目のバーコードが復号失敗であれば、ステップS31で、生成する成否画像において、i番目のバーコードを含む領域Qに対応する領域を半透明の赤色で塗り潰して、ステップS33に進む。
ただし、ステップS29およびステップS31については、CPU20の指示に従って、ドライバ28が実行し、成否画像に対応する成否画像データは、ドライバ28に設けられるVRAM上に生成される。ただし、成否画像データは、VRAM上に展開された撮影画像データとは異なる領域で生成される。
ステップS33では、変数iが最大値以上であるかどうかを判断する。つまり、CPU20は、すべての領域Qを緑色または赤色で塗り潰して、成否画像を生成したかどうかを判断する。
ステップS33で“NO”であれば、つまり、変数iが最大値に満たない場合には、ステップS35で、変数iを1加算して(i=i+1)、ステップS27に戻る。一方、ステップS33で“YES”であれば、つまり、変数iが最大値以上である場合には、ステップS37で、撮影画像に成否画像を合成する。ここでは、ドライバ28は、CPU20の指示の下、撮影画像の前面に成否画像を合成し、合成画像の画像データを表示装置14に出力する。したがって、合成画像が表示装置14に表示される。
そして、ステップS39で、読取終了かどうかを判断する。ここでは、CPU20は、読取終了の指示が入力されたかどうかを判断する。ステップS39で“NO”であれば、つまり、読取終了でなければ、図12のステップS1に戻る。つまり、次の読取処理が開始される。一方、ステップS39で“YES”であれば、つまり、読取終了であれば、読取処理を終了する。
なお、図示は省略するが、バーコードの復号に失敗している場合には、上述したように、ユーザの操作に従って、バーコードを復号できない商品のみの読取処理が実行されたり、すべての商品についての読取処理が最初からやり直されたりする。
また、図示は書略するが、すべてのバーコードの復号に成功した場合には、上述したように、復号結果は、ホスト装置に送信(出力)されてもよいし、不揮発性のメモリ(図示せず)に保存されてもよい。さらに、復号結果の表示、送信および保存のいずれか2つ以上が実行されてもよい。
第1実施例によれば、撮影画像にバーコードの復号の成否を示す成否画像を重ねて表示するので、バーコードの復号の成否の視認性を向上させることができる。
なお、第1実施例では、成否画像においては、領域Qに対応する領域を半透明の緑色または赤色で塗り潰すようにしたが、領域の外形線のみを描画し、この外形線の色を緑色または赤色にしても、商品の全体を強調することができる。
また、第1実施例では、合成画像のみを表示装置14に表示するようにしてあるが、復号結果も表示するようにしてもよい。この場合、合成画像の前面に復号結果の一覧を表示するようにしてもよいし、各商品(バーコード)の近傍に各々の復号結果を表示するようにしてもよい。または、合成画像と復号結果を一定時間毎に切り替えて表示してもよい。
さらにまた、この第1実施例では、1次元のバーコードを読み取る場合について説明したが、QRコード(登録商標)のような2次元コードを読み取るようにしてもよい。かかる場合には、2値画像から正方形の領域が2次元コードに対応する領域Rとして検出される。さらに、1次元のバーコードと2次元コードが混在してもよい。かかる場合には、検出したコードの種類に応じて、異なる復号処理が実行される。
[第2実施例]
第2実施例の読取装置10は、バーコードの復号の成否を示す成否画像を変更した以外は、第1実施例と同じであるため、異なる内容についてのみ説明し、重複した内容については、説明を省略する、または、簡単に説明することにする。
図14は、第2実施例の合成画像の一例を示す図解図である。図14に示すように、バーコードの復号に成功した場合には、当該バーコードの領域Rに対応して緑色のリング画像が描画される。一方、バーコードの復号に失敗した場合には、当該バーコードの領域Rに対応して赤色のリング画像が描画される。たとえば、成否画像において、リング画像は、その中心が領域Rに対応する領域の中心と重なるように描画される。図示は省略するが、第2実施例においては、バーコードに重なるように描画されたリング画像を含む成否画像が生成される。このようにしても、バーコードが付された商品に対応して当該バーコードの復号の成否を示す情報を表示することができる。
なお、第2実施例においては、リング画像は半透明の緑色または赤色で塗り潰されるようにするが、リング画像を表示する場合には、商品の一部にリング画像が重なるだけであるため、背面側が見えない不透明の緑色または赤色でリング画像を塗り潰してもよい。
具体的なCPU20の読取処理は、第1実施例に示した読取処理と一部が異なる以外は同じであるため、異なる部分についてのみ説明する。図15は、第2実施例の読取処理の他の一部であって、図12に後続するフロー図である。
図15に示すように、第2実施例では、ステップS29に代えてステップS29aが実行され、ステップS31に代えてステップS31aが実行される。
したがって、ステップS27で“YES”であれば、ステップS29aで、生成する成否画像において、i番目のバーコードの領域Rに対応する領域上に緑色のリング画像を描画する。一方、ステップS27で“NO”であれば、ステップS31aで、生成する成否画像において、i番目のバーコードの領域Rに対応する領域上に赤色のリング画像を描画する。
ただし、ステップS29aおよびステップS31aでは、CPU20は、バーコードラベルデータ74fからi番目のバーコードに対応する領域Rの座標を取得し、CPU20の指示の下、ドライバ28が、成否画像において、当該領域Rと同じ位置および同じ大きさの領域に重なるようにリング画像を描画する。
第2実施例によれば、成否画像においてバーコードに対応して当該バーコードの復号の成否を示すリング画像を表示するので、第1実施例と同様に、バーコードの成否についての視認性を向上させることができる。
また、第2実施例によれば、成否画像においてバーコードに対応して当該バーコードの復号の成否を示すリング画像を表示するので、一つの商品に複数のバーコードが付されている場合であっても、バーコード毎に復号の成否を示すリング画像を表示することができる。
なお、第2実施例では、成否画像においてバーコードに対応して当該バーコードの復号の成否を示すリング画像を表示するので、商品の形状を検出する必要はない。また、商品テーブルを作成する必要もない。したがって、読取処理において、ステップS3、S5、S7の処理を省略することができる。
また、第2実施例では、成否画像においてバーコードに対応して当該バーコードの復号の成否を示すリング画像を表示するようにしてあるが、リング画像に代えて、成否を示す文字を表示するようにしてもよい。たとえば、バーコードの復号に成功した場合には、当該バーコードの近傍に「成功」の文字を表示し、バーコードの復号に失敗した場合には、当該バーコードの近傍に「失敗」の文字を表示してもよい。また、リング画像に以外の図形または記号を表示するようにしてもよい。たとえば、バーコードの復号に成功した場合には、上記のように、緑色のリング画像を表示し、バーコードの復号に失敗した場合には、リング画像に代えて赤色の×印の画像を表示してもよい。
さらに、第2実施例では、成否画像においてバーコードに対応して当該バーコードの復号の成否を示すリング画像を表示するようにしてあるが、当該バーコードが付された商品に対応してリング画像を表示するようにしてもよい。かかる場合には、たとえば、リング画像は、その中心が領域Qの中心と一致するように描画される。
[第3実施例]
第3実施例の読取装置10は、復号できないバーコードが付された商品に対応する領域Qのみを半透明の赤色で塗り潰した成否画像を生成するようにした以外は、第1実施例と同じであるため、異なる内容についてのみ説明し、重複した内容については、説明を省略する、または、簡単に説明することにする。
図16は、第3実施例の合成画像の一例を示す図解図である。図16に示すように、バーコードの復号に成功した場合には、当該バーコードを含む領域Qは塗り潰されない。一方、バーコードの復号に失敗した場合には、当該バーコードを含む領域Qを半透明の赤色で塗り潰す。
具体的なCPU20の読取処理は、第1実施例に示した読取処理と一部が異なる以外は同じであるため、異なる部分についてのみ説明する。図17は、第3実施例の読取処理の他の一部であって、図12に後続するフロー図である。
図17に示すように、第3実施例では、ステップS29の処理が省略される。したがって、ステップS27で“YES”であれば、ステップS33に進む。一方、ステップS27で“NO”であれば、ステップS31で、成否画像において、i番目のバーコードを含む領域Qに対応する領域を半透明の赤色で塗り潰して、ステップS33に進む。
第3実施例によれば、復号できないバーコードが付された商品に対応する領域Qのみを半透明の赤色で塗り潰した成否画像を撮影画像に重畳するようにしても、バーコードの復号の成否の視認性を向上させることができる。
[第4実施例]
第4実施例の読取装置10は、復号できたバーコードが付された商品に対応する領域Qのみを半透明の緑色で塗り潰した成否画像を生成するようにした以外は、第1実施例と同じであるため、異なる内容についてのみ説明し、重複した内容については、説明を省略する、または、簡単に説明することにする。
図18は、第4実施例の合成画像の一例を示す図解図である。図18に示すように、バーコードの復号に成功した場合には、当該バーコードを含む領域Qを半透明の緑色で塗り潰す。一方、バーコードの復号に失敗した場合には、当該バーコードを含む領域Qは塗り潰されない。
具体的なCPU20の読取処理は、第1実施例に示した読取処理と一部が異なる以外は同じであるため、異なる部分についてのみ説明する。図19は、第4実施例の読取処理の他の一部であって、図12に後続するフロー図である。
図19に示すように、第4実施例では、ステップS31の処理が省略される。したがって、ステップS27で“YES”であれば、ステップS29で、成否画像において、i番目のバーコードを含む領域Qに対応する領域を半透明の緑色で塗り潰して、ステップS33に進む。一方、ステップS27で“NO”であれば、ステップS33に進む。
第4実施例によれば、復号できたバーコードが付された商品に対応する領域Qのみを半透明の緑色で塗り潰した成否画像を撮影画像に重畳するようにしても、バーコードの復号の成否の視認性を向上させることができる。
なお、上述の各実施例では、成否画像を生成し、撮影画像の前面に合成するようにしたが、これに限定される必要はない。たとえば、撮影画像において、領域Qに対応する領域に、バーコードの復号の成否に応じた色を合成するようにしてもよい。また、第2実施例に示したように、リング画像を描画する場合には、バーコードの復号の成否に応じた色を付したリング画像を撮影画像の前面に直接的に描画するようにしてもよい。
また、上述の各実施例では、読取装置10が手持ち型のバーコードリーダないしバーコードスキャナである場合について説明したが、据置型のバーコードリーダないしバーコードスキャナであってもよい。かかる場合には、読取装置10は、机などの所定の台の上に設置され、所定の台の所定の範囲に載置された複数の商品のそれぞれに付された複数のバーコードを読み取る。
さらに、上述の各実施例で示した具体的な数値および画面等は単なる例示であり、限定されるべきでなく、実際の製品に応じて適宜変更される。
さらにまた、上述の各実施例で示した読取処理のフロー図では、同じ結果が得られる場合には、ステップの順番は入れ替え可能である。