(実施形態1)
本発明にかかる実施形態を、以下図面を参照して説明する。本実施形態では、図1に示すように、商品のパッケージや外装、および、商品を運搬する際の梱包材など(以下、「物品GD」とする)に付されているコードシンボルCSを読取装置(ハンディターミナル100)で読み取ることで商品管理をおこなう場合を例に以下説明する。
本実施形態では、コードシンボルCSとして、図2(a)に示すような「1次元バーコード」と、図2(b)に示すような「2次元コード」とが用いられているものとする。「1次元バーコード」は、図2(a)に示すように、所定の寸法比で配置された複数のバー(「黒」)とスペース(「白」)から構成されたコードシンボルであり、1次元方向に所定のコードデータを含むものである。「2次元コード」は、図2(b)に示すように、縦横の2次元方向に配置された黒と白のブロックパターンによってコードデータを示すコードシンボルである。すなわち「コードシンボル」とは、白と黒の2値階調で所定の情報(コードデータ)を不可視的に示すことができる視覚的情報(画像情報)である。
「1次元バーコード」は、従来より商品コードや梱包形態、あるいは、製造者などを示すコードとして種々の物品に付与されているが、1次元方向にのみ情報を含むので、情報量が少ないという欠点がある。一方「2次元コード」は、2次元方向のパターンによって情報を示すので、1次元バーコードよりも多くの情報量を含むことができる。さらに、「2次元コード」は2次元方向に情報を集積させることができるので、通常、1次元バーコードよりも小さなサイズとすることができる。一般的な1次元バーコードと2次元コードとでは、例えば、図2(c)に示すようなサイズ比となる。
ここで、流通分野などにおいては、従来より用いられている1次元バーコードが伝統的に用いられている一方、商品の多様化などに伴う情報量の増大に対応するために2次元コードの利用も拡大しつつある。このような状況では、同一の物品GDについて、例えば、商品コードや梱包形態などといった基本情報を示す1次元バーコードと、商品毎のロット番号や有効期限その他の付帯情報を示す2次元コードとが付与されることがある一方、物品GDによっては、付与されているコードシンボルCSが1次元バーコードのみ、あるいは、2次元コードのみという場合もある。したがって、コードシンボルCSの読み取りをおこなう現場では、異なる種類のコードシンボルCSを効率的に取り扱わなければならない。すなわち、このような現場で用いられる読取装置は、サイズの異なるコードシンボルを適切に読み取る必要がある。
本実施形態の「コードシンボルCS」はこのような2種類(1次元バーコードと2次元コード)のコードシンボルを含むものであり、本実施形態では、物品GDに付与されているコードシンボルCSをハンディターミナル100で読み取ることにより商品管理等をおこなうものとする。
このようなコードシンボルCSの読み取りに用いられるハンディターミナル100の構成を図3、図4を参照して説明する。図3は本実施形態にかかるハンディターミナル100のシステム構成(内部構成)を示すブロック図であり、図4はハンディターミナル100の外観例を示す図(図4(a)は正面図、図4(b)は背面図)である。
図示するように、本実施形態にかかるハンディターミナル100は、制御部110と、撮像部120と、入力部130、出力部140と、プログラム格納部150と、記憶部160と、通信部170と、を備える。
制御部110は、例えば、CPU(Central Processing Unit:中央演算処理装置)などから構成され、ハンディターミナル100の各部を制御する。ここで、制御部110は、プログラム格納部150に格納された動作プログラムを実行することで後述する各処理が実現される。なお、制御部110は、動作時に必要なデータや動作プログラムなどを展開(ロード)するための記憶領域を備えているものとする。この記憶領域(以下「ワークエリア」とする)は、例えば、レジスタやキャッシュメモリ、および、RAM(Random Access Memory)などから構成される。
撮像部120は、制御部110の制御によって撮像動作をおこなうものであり、本実施形態では、コードシンボルを読み取るための、いわゆるエリアセンサとして機能する。撮像部120は、図3に示すように、光源121、レンズユニット122、撮像素子123、などを備える。
光源121は、例えば、LED(Light Emitting Diode:発光ダイオード)やレーザ照射装置などの発光部材や反射鏡などの付帯部材から構成され、読取対象となるコードシンボルCSに光線を照射する。コードシンボルCSに照射された光線は反射してレンズユニット122に入射する。したがって、反射光がレンズユニット122に適切に入射するよう、光源121では、レンズユニット122や撮像素子123に応じた適切な光源、および、照射角や発光強度などが採用・設定される。なお、レンズユニット122や撮像素子123の性能などにより、コードシンボルCDの読み取りに光源を必要としない場合は、光源121の構成は省略されてもよい。
レンズユニット122は、所定のレンズ群などから構成され、読取対象のコードシンボルCSからの反射光を入射光として受光し、撮像素子123上に結像させる。本実施形態では、構造が簡単で経済性・堅牢性に優れる単焦点式のレンズをレンズユニット122に採用するものとする。すなわち、本実施形態にかかる撮像部120は、単焦点式のエリアセンサにより構成されることとなる。また、レンズユニット122には、通常の読み取り作業において物品GDに付されている2次元コードを読み取るのに適した焦点距離が設定されているものとする。
撮像素子123は、例えば、CMOSイメージセンサ(CMOS: Complementary Metal Oxide Semiconductor「相補型金属酸化物半導体」)などから構成され、レンズユニット122によって結像される入射光の強弱に応じて光電変換することで、コードシンボルからの反射光の強弱を示すアナログ信号を生成する。撮像素子123は、所定のAD変換回路を備えるものとし、生成されたアナログ信号をデジタルデータに変換する。ここでは、コードシンボルの黒色部分と白色部分を示す2値データに変換する。
入力部130は、ユーザによって操作される部材から構成され、ユーザからの指示を受け付ける。入力部130は、操作に応じた所定の信号を制御部110に送出することで、ユーザの指示を制御部110に入力する。入力部130は、例えば、所定の操作ボタンやカーソルキーなどから構成され、ユーザによって操作される。入力されるユーザの指示は、例えば、コードシンボルCSの読取動作の開始・終了や読取対象とするコードシンボルCSの種別指定、あるいは、取得された情報の転送指示などである。
出力部140は、種々の情報を出力するものであり、例えば、液晶表示装置などの表示装置から構成された表示部141などを有する。表示部141は、撮像部120が撮像した画像やコードシンボルの読取結果、その他ユーザによる設定や操作のためのメニュー画面などを表示する。なお、表示部141がタッチパネルなどから構成される場合には、入力部130と同等の入力装置として機能させてもよい。また、出力部140は、必要に応じて、所定の音声を出力するスピーカや、LEDなどの発光部材によるインジケータなどを備えていてもよい。
プログラム格納部150は、例えば、フラッシュメモリなどの記憶装置から構成され、制御部110が実行する動作プログラムを記憶する。本実施形態では、ハンディターミナル100の基本的な動作を司るプログラム(基本プログラム:OS(Operating System))の他、後述する各処理を実現するためのプログラムが記憶される。本実施形態では、以下のようなプログラムが格納される。
(P1)「撮像プログラム」:撮像部120を駆動し、読取対象のコードシンボルを撮像するためのプログラム
(P2)「画像認識プログラム」:撮像部120が撮像した画像を画像認識し、撮像されたコードシンボルを認識するためのプログラム
(P3)「寸法比検出プログラム」:バーコードを撮像した場合に、バー部分とスペース部分の寸法比を検出するためのプログラム
(P4)「撮像範囲判別プログラム」:読取対象のコードシンボルの全範囲が撮像されているか否かを判別するためのプログラム
(P5)「撮像制御プログラム」:読取対象コードシンボルの全範囲が撮像されるよう制御するためのプログラム
(P6)「重複検出プログラム」:一のコードシンボルについて複数回撮像された画像に示されているコードシンボルの重複部分を検出するためのプログラム
(P7)「合成プログラム」:一のコードシンボルについて複数回撮像された画像に示されているコードシンボルまたは当該コードシンボルで示されるコードデータを合成するためのプログラム
(P8)「デコードプログラム」:撮像画像に示されるコードシンボルをデコードし、当該コードシンボルが示すコードデータを取得するためのプログラム
(P9)「出力プログラム」:取得されたコードデータに基づく情報を出力するためのプログラム
このようなプログラムを実行することなどにより、制御部110は以下のような機能を実現する。
(F1)「撮像機能」:撮像部120を動作させ、レンズユニット122から入光した入射光に基づく画像データを取得する機能
(F2)「撮像範囲判別機能」:取得した画像データに読取対象コードシンボルの全範囲が撮像されているか否かを判別する機能
(F3)「撮像制御機能」:読取対象コードシンボルの全範囲が撮像されるよう制御する機能
(F4)「合成機能」:一のコードシンボルについて複数回撮像された画像に示されているコードシンボルまたは当該コードシンボルで示されるコードデータを合成するためのプログラム
(F5)「コードシンボル認識機能」:取得された一または複数の画像データから読取対象のコードシンボルを認識する機能
(F6)「コード認識機能」:認識されたコードシンボルをデコードして、当該コードシンボルが示すコードデータを認識する機能
(F7)「出力機能」:撮像されたコードシンボルから取得したコードデータに基づく情報を出力する機能
なお、本実施形態では、制御部110がプログラムを実行することによるソフトウェア処理で上記各機能を実現するが、例えば、これらの各機能をそれぞれ専門的に処理する回路等(いわゆる「ASIC」(Application Specific Integrated Circuit))をハンディターミナル100に構成することにより、ハードウェア処理によって上記各機能が実現されてもよい。
記憶部160は、例えば、フラッシュメモリなどの記憶装置から構成され、制御部110が後述する処理の実行に用いるデータや処理結果を示すデータ(以下、「処理データ」とする)を記憶する。「処理データ」として、例えば、図5に示すような「特徴テーブル」が記憶される。「特徴テーブル」には、ハンディターミナル100が読取可能なコードシンボルの特徴を示す情報が記録される。
本実施形態では、ハンディターミナル100によって「1次元バーコード」および「2次元コード」が読取可能であるものとし、各コード形態の複数種類のコードシンボルについての特徴を示す情報が記録される。1次元バーコードの特徴として、種別毎に定められているコード桁数やモジュール(バーコードのバー部分とスペース部分の組み合わせ)の数、および、コードの始点・終点を示す既定のコード(「スタートコード」、「ストップコード」)、などが記録される。また、2次元コードについては、各種別毎に定められている、2次元コードの範囲を規定しているパターン(「認識パターン」)などが記録される。
上記「特徴テーブル」の他、読み取られたコードシンボルをデコードして取得されるコードデータ、および、取得されたコードデータに応じて設定されている各種情報などが記憶部160に記憶される。
通信部170は、例えば、IEEE802.3、IEEE802.11、Bluetooth、IrDA (Infrared Data Association)、USB (Universal Serial Bus)、などといった所定のデータ転送規格に基づく通信装置から構成され、所定のコンピュータ装置(不図示)などに制御部110の処理結果などを転送する。すなわち、通信部170は、ハンディターミナル100が読み取ったコードシンボルから得られるコードデータもしくは当該コードデータに基づく情報を、商品管理に関する電算処理をおこなうサーバなどのコンピュータに転送するための通信インタフェースとして機能する。
なお、上記の各構成は、本発明の実施に必要な要部であり、ハンディターミナル100には、これらの他に、ハンディターミナルとして必要な構成や機能、および、その他の付加的な構成や機能が、必要に応じて備えられているものとする。
次に、上記のように構成されたハンディターミナル100の動作を図面を参照して以下説明する。後述する各処理は、プログラム格納部150に格納されている動作プログラムを制御部110が実行することで実現される。本実施形態では、ハンディターミナル100を用いて物品GDに付されているコードシンボルCSを読み取って商品管理をおこなう場合を例に以下説明する。
本発明の実施形態1にかかる「読取処理(1)」を図6に示すフローチャートを参照して説明する。この「読取処理(1)」は、ハンディターミナル100に電源が投入され、入力部130から読取開始の指示が入力されることを契機に開始される。ここで、読取開始の指示が入力されると撮像部120が駆動され、レンズユニット122への入射光に基づく画像が表示部141に表示される。また、読取対象とするコードシンボルの種別を指定するための画像(種別指定部142)が表示部141に表示される。
ユーザは、読取対象とするコードシンボルCSの種別を種別指定部142から指定する。この場合、ユーザが入力部130を操作することで、種別指定部142に表示されている種別から所望のものを選択し、入力する。なお、表示部141がタッチパネルから構成されている場合には、ペン型の入力装置などを用いて表示部141上の種別指定部142を直接指示することで指定してもよい。このような操作により、読取対象のコードシンボルCSの種別を示す情報(以下、「コード種情報」とする)が制御部110に入力される(ステップS101)。
ユーザは、表示部141に表示されている画像をもとに、ハンディターミナル100の位置を調整し、読取対象のコードシンボルCSが表示部141に表示されるようにする。本実施形態では、図7(a)に示すように、表示部141上に撮像部120が取得する画像を表示するための領域(以下、「ファインダ領域FR」とする)が規定されるものとし、このファインダ領域FRに読取対象のコードシンボルCSが表示される。ここで、上述したように、レンズユニット122の焦点距離を2次元コードにあわせて設定しているので、読取対象が2次元コードである場合には、図7(a)に示すように、撮像範囲内(ファインダ領域FR内)に2次元コードの全範囲を収めることができる。
一方、読取対象が1次元バーコードである場合、2次元コードよりもサイズが大きいため、全範囲が収まらない場合がある(図7(b))。本実施形態では、このような場合、当該1次元バーコードの一部分が含まれるようにハンディターミナル100を位置調整して読取動作を開始するものとする。この場合、1次元バーコードには、左端から右端方向にコードが記録されているので、コードの始点を示す左端部が収まる位置に調整して読取動作を開始するものとする。
ユーザは、読取対象とするコードシンボルCSを画像上で捉えると、入力部130を操作し、位置が決定された旨を示す指示を入力する。すなわち、位置決定指示を示す信号(以下、「位置決定信号」とする)が入力部130から制御部110に入力され、これにより制御部110は撮像位置が決定されたと判別する(ステップS102)。
撮像位置が決定されると(ステップS102:Yes)、制御部110は、入力時点で撮像素子123に結像されている入射光に基づく画像データを取得し、撮像画像としてワークエリアに保持する(ステップS103)。すなわち、読取対象としているコードシンボルCSの黒色部分と白色部分を示す2値データを取得する。
ここで、ステップS101で入力されたコード種情報が2次元コードを示している場合(ステップS104:No)、制御部110はステップS103で取得した画像データに示されるコードシンボルCSをデコードしてコードデータを取得し、記憶部160に格納する(ステップS107)。制御部110は、取得したコードデータもしくは当該コードデータから得られる情報(例えば、商品コードや製造者などを示す情報。以下、「商品情報」とする)を生成し、表示部141もしくは通信部170を介して外部装置に出力して(ステップS108)、処理を終了する。
一方、ステップS101で入力されたコード種情報が1次元バーコードを示している場合(ステップS104:Yes)、制御部110はステップS103で取得した画像データに示されるコードシンボルCSを画像認識し、1次元バーコードを構成するバー部分とスペース部分の寸法比を検出し、検出した寸法比を示す情報(以下、「寸法比情報」とする)をワークエリアに保持する(ステップS105)。
ここでは、取得された2値画像を、図8(a)に示すような1次元方向に走査し、2値データの分布を検出することで寸法比を求める。すなわち、黒色部分と白色部分を示す2値データ上では、例えば、黒色部分の階調を「0」、白色部分の階調を「1」で示すので、撮像画像の1次元方向上のデータ中、「0」が連続する部分を「バー」、「1」が連続する部分を「スペース」と認識する。この場合、連続する「0」または「1」の範囲を検出することでバー部分の幅とスペース部分の幅を検出する。ここで、撮像部120により取得される画像はラスタ画像であるので、画像を構成するピクセルの数によって範囲を検出することができる。すなわち、走査した1次元方向上で、データ値が「0」となっているピクセルが連続している部分のピクセル数をバーの幅とすることができる。同様に、データ値が「1」となっているピクセルが連続している部分のピクセル数をスペースの幅とすることができる。
制御部110は、このように検出されたデータ値が「0」のピクセル数と、データ値が「1」のピクセル数を、1次元バーコードのバーとスペースの寸法比とする。例えば、図8(b)に示すようなバーコードの場合において、例えば、バーB1を示すピクセルの数が「10」であり、以下、スペースS1のピクセル数が「5」、バーB2のピクセル数が「3」、スペースS2のピクセル数が「3」、バーB3のピクセル数が「2」…、であるとすると、制御部110は、「10,5,3,3,2,…」という情報を「寸法比情報」として生成する。なお、バーコードの始まりがバーであるかスペースであるかは各種別毎に定められているので、読取対象として指定された種別にしたがって寸法比情報を生成するものとする。
制御部110は、撮像された画像に示されている1次元バーコードについて、バー部分とスペース部分の寸法比を求めると、ステップS101で指定されたコードシンボルの種別に基づいて、当該1次元バーコードの全範囲が撮像されているか否かを判別する(ステップS106)。ここでは、ステップS105で寸法比を算出するために1次元バーコードのバー部分とスペース部分を検出しているので、撮像画像中のモジュール数を検出することができる。したがって、制御部110は、記憶部160の「特徴テーブル」(図5)を参照し、検出したモジュール数と、指定されている種別の1次元バーコードに規定されているモジュール数(以下、「規定モジュール数」とする)とを比較することで、当該1次元バーコードの全範囲が撮像されているか否かを判別する。
ここで、読取対象としている1次元バーコードの全範囲が撮像されている場合(ステップS106:Yes)、制御部110は、当該1次元バーコードをデコードしてコードデータを取得して、記憶部160に格納する(ステップS107)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成して、表示部141もしくは通信部170を介して外部装置に出力して(ステップS108)、処理を終了する。
一方、1次元バーコードの全範囲が撮像されていない場合(ステップS106:No)、制御部110は、複数回の撮像によって全範囲の画像を取得するための「全範囲撮像処理(1)」を実行する(ステップS150)。この「全範囲撮像処理(1)」を図9に示すフローチャートを参照して説明する。
まず制御部110は、読取対象の1次元バーコードの全範囲が撮像できない旨を示すメッセージを表示部141に表示する(ステップS151)。このメッセージには、ステップS103での撮像(以下、「第1回目撮像」とする)で収まらなかった部分の撮像を促すメッセージなどが含まれる。
ユーザは、表示されたメッセージにしたがって、第1回目撮像で撮像されなかった部分がファインダ領域FR内に収まるようにハンディターミナル100の位置を調整する。ハンディターミナル100の位置を決定すると、ユーザは入力部130を操作して位置決定指示を入力する。すなわち、入力部130から位置決定信号が制御部110に入力されることで、制御部110は撮像位置が決定されたと判別する(ステップS152)。すなわち、第1回目撮像に続く撮像(以下、「第2回目撮像」とする)についての撮像範囲が指定される。
ここでは、図10(a)に示す範囲CR1が第1回目撮像で取得された範囲であるとすると、図10(b)に示す範囲RRに対応するバーコード部分が撮像されるようにハンディターミナル100の位置を調整して位置決定指示をおこなう。位置決定指示は、ハンディターミナル100がユーザに保持された状態で手動によっておこなわれるため、分断部分を正確に合わせることは困難であり、第1回目撮像画像と第2回目撮像画像との間にはズレが生じる。この場合、第1回目撮像画像と第2回目撮像画像のいずれにも示されない部分があると正確な読取・認識ができないため、図10(c)に示すように、第1回目撮像での撮像範囲CR1の右端付近と第2回目撮像での撮像範囲CR2の左端付近が重複するようにハンディターミナル100の位置調整をおこなうものとする。
撮像位置が決定されると(ステップS152:Yes)、制御部110は、入力時点で撮像素子123に結像されている入射光に基づく画像データを取得し、「第2の撮像画像」としてワークエリアに保持する(ステップS153)。
制御部110は、上記ステップS105と同様の処理により、ステップS153で取得した第2の撮像画像に示される1次元バーコードのバー部分とスペース部分の寸法比を検出して寸法比情報を生成する(ステップS154)。生成された寸法比情報をワークエリアに保持する。すなわち、制御部110は、第2の撮像画像に示されるバー部分とスペース部分を認識し、これらの寸法比を検出する。
制御部110は、第1回目撮像で得られた寸法比情報(以下、「寸法比情報(1)」とする)と第2回目撮像で得られた寸法比情報(以下、「寸法比情報(2)」とする)とを比較し、寸法比が重複する部分を特定し(ステップS155)、当該重複部分を一方から除外して、寸法比情報(1)と寸法比情報(2)を合成する(ステップS156)。すなわち、例えば、寸法比情報(1)が「10,5,3,3,5」であり、寸法比情報(2)が「3,5,5,10,5」である場合、「3,5」の部分が重複する。したがって、寸法比情報(1)または寸法比情報(2)のいずれかから「3,5」の部分を除外して合成することで、「10,5,3,3,5,5,10,5」という寸法比情報(以下、「寸法比情報T1」とする)を得ることができる。
制御部110は、このようにして得られた寸法比情報T1に基づいて、第1回目撮像画像に示されるバー部分とスペース部分、および、第2回目撮像画像に示されるバー部分とスペース部分を特定することができる。よって、特定されたバー部分とスペース部分に基づいて、第1回目撮像と第2回目撮像で得られたバーコード画像に示されるモジュール数を特定することができる。したがって、制御部110は、特定されたモジュール数と規定モジュール数とを比較することで、第1回目撮像と第2回目撮像によって、読取対象の1次元バーコードの全範囲が撮像できたか否かを判別する(ステップS157)。
ここで、まだ全範囲が撮像されない場合(ステップS157:No)、制御部110はステップS151〜S156までの処理を繰り返し、1次元バーコードの全範囲が撮像されるまで複数の撮像画像を取得する。この場合、撮像回数に応じて、以下、第3回目撮像、第4回目撮像、…、第n回目撮像とし、各撮像毎に合成される寸法比情報を寸法比情報T2、寸法比情報T3、…、寸法比情報Tn-1とする。ここで、寸法比情報T1〜Tn-1のいずれかを寸法情報Txとする。
一方、全範囲が撮像された場合(ステップS157:Yes)、ステップS156での合成により得られた寸法比情報Txに基づいて、読取対象としている1次元バーコードを認識して(ステップS158)、「読取処理(1)」(図6)のフローに戻る。すなわち、寸法比情報Txは、1次元バーコードの全範囲におけるバー部分とスペース部分の寸法比を示しているので、この寸法比情報Txにより、読取対象としている1次元バーコードの全範囲を認識することができる。
「読取処理(1)」では、ステップS158での認識結果に基づいてデコード処理をおこなってコードデータを取得して記憶部160に格納する(ステップS107)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成し、表示部141もしくは通信部170を介して外部装置に出力して(ステップS108)、処理を終了する。
上記「読取処理(1)」によれば、1次元バーコードなどサイズの大きいコードシンボルCSを読み取る場合において、1次元バーコードのバー部分とスペース部分の寸法比に基づいて、撮像範囲内に1次元バーコードの全範囲が収まっているか否かを判別し、収まらない場合は、ユーザに複数回撮像させることで当該1次元バーコードの全範囲を撮像する。したがって、ユーザがハンディターミナル100を物品GDから遠ざけたり近づけるすることなくコードシンボルCSを撮像して認識することができる。この結果、コードシンボルCSの読取作業時に、ユーザが移動する必要がない。また、複数回の撮像によって生じる重複部分を考慮してデコードするので、ユーザの手動操作による撮像であっても正確にデコードすることができる。
(実施形態2)
上記実施形態1では、複数回の撮像で得られた撮像画像のそれぞれに示されている1次元バーコードのバー部分とスペース部分との寸法比に基づいて、撮像された1次元バーコードの範囲や重複部分を特定したが、各撮像画像に示されている範囲のバーコードをデコードして得られるコードデータに基づいて、撮像された1次元バーコードの範囲や重複部分を特定してもよい。この場合のハンディターミナル100の処理(「読取処理(2)」)を図11に示すフローチャートを参照して以下説明する。なお、ハンディターミナル100の構成や「読取処理(2)」の開始条件、その他用語の定義などは実施形態1と同様である。
ユーザは、読取対象とするコードシンボルCSの種別を種別指定部142から指定する。すなわち、コード種情報が制御部110に入力される(ステップS201)。
ユーザは、表示部141に表示されている画像をもとに、ハンディターミナル100の位置を調整し、読取対象のコードシンボルCSが表示部141のファインダ領域FRに表示されるようにする。
ユーザは、読取対象とするコードシンボルCSを画像上で捉えると、入力部130を操作し、位置が決定された旨を示す指示を入力する。すなわち、位置決定信号が入力部130から制御部110に入力され、これにより制御部110は撮像位置が決定されたと判別する(ステップS202)。
撮像位置が決定されると(ステップS202:Yes)、制御部110は、入力時点で撮像素子123に結像されている入射光に基づく画像データを取得し、撮像画像としてワークエリアに保持する(ステップS203)。すなわち、読取対象としているコードシンボルCSの黒色部分と白色部分を示す2値データを取得する。
制御部110はステップS203で取得した画像データに示されるコードシンボルCSをデコードしてコードデータを取得する(ステップS204)。取得されたコードはワークエリアに保持される。
ここで、ステップS201で指定されたコード種が2次元コードを示す場合(ステップS205:No)、制御部110は、ステップS204で取得したコードデータを記憶部160に格納する(ステップS207)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成して、表示部141もしくは通信部170を介して外部装置に出力して(ステップS208)、処理を終了する。
一方、指定されたコード種が1次元バーコードである場合(ステップS205:Yes)、制御部110は、記憶部160の「特徴テーブル」(図5)を参照し、ステップS201で指定されたコード種に対応する桁数を特定し、ステップS204で取得されたコードの桁数と比較することで、読取対象としている1次元バーコードの全範囲が撮像されているか否かを判別する(ステップS206)。
すなわち、デーコードで取得したコードの桁数と「特徴テーブル」に設定されている桁数(以下、「規定桁数」とする)と一致する場合、制御部110は、当該1次元バーコードの全範囲が撮像されていると判別する。一方、デコードで取得したコードの桁数が規定桁数より少ない場合、制御部110は、当該1次元バーコードの全範囲が撮像されていないと判別する。
1次元バーコードの全範囲が撮像されている場合(ステップS206:Yes)、制御部110は、ステップS205で取得したコードデータを記憶部160に格納する(ステップS207)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成して、表示部141もしくは通信部170を介して外部装置に出力して(ステップS208)、処理を終了する。
一方、1次元バーコードの全範囲が撮像されていない場合(ステップS206:No)、制御部110は、複数回の撮像によって全範囲の画像を取得するための「全範囲撮像処理(2)」を実行する(ステップS250)。この「全範囲撮像処理(2)」を図12に示すフローチャートを参照して説明する。
まず制御部110は、読取対象の1次元バーコードの全範囲が撮像できない旨を示すメッセージを表示部141に表示する(ステップS251)。このメッセージには、ステップS203での第1回目撮像で収まらなかった部分の撮像を促すメッセージなどが含まれる。
ユーザは、表示されたメッセージにしたがって、第1回目撮像で撮像されなかった部分が収まるようにハンディターミナル100の位置を調整して位置を決定すると、入力部130を操作して位置決定指示を入力する。すなわち、入力部130から位置決定信号が制御部110に入力されることで、制御部110は撮像位置が決定されたと判別する(ステップS252)。すなわち、第1回目撮像に続く第2回目撮像についての撮像範囲が指定される。
ここでは、実施形態1の場合と同様に、図10(a)に示す範囲CR1が第1回目撮像で取得された範囲であるとすると、図10(b)に示す範囲RRに対応するバーコード部分が撮像されるようにハンディターミナル100の位置を調整して位置決定指示をおこなう。この場合、図10(c)に示すように、第1回目撮像での撮像範囲CR1の右端付近と第2回目撮像での撮像領域CR2の左端付近が重複するようにハンディターミナル100の位置調整をおこなうものとする。
撮像位置が決定されると(ステップS252:Yes)、制御部110は、入力時点で撮像素子123に結像されている入射光に基づく画像データを取得し、「第2の撮像画像」としてワークエリアに保持する(ステップS253)。
制御部110は、第2の撮像画像に示されている1次元バーコードをデコードしてコードデータを取得する(ステップS254)。
制御部110は、「読取処理(2)」(図11)のステップS205で取得している、第1回目撮像で撮像された1次元バーコードから取得されたコードデータと、ステップS254で取得されたコードデータとの間で重複するコードデータを特定する(ステップS255)。例えば、ステップS205で取得されたコードデータが「12345」で、ステップS254で取得されたコードデータが「45678」である場合、「45」を重複部分として特定する。
制御部110は、ステップS205で取得されたコードデータ、あるいは、ステップS254で取得されたコードデータの一方から、ステップS255で特定した重複部分を除外した上で、両コードデータを合成する(ステップS256)。例えば、ステップS205で取得されたコードデータが「12345」で、ステップS254で取得されたコードデータが「45678」である場合、一方から重複コードデータである「45」を除外して合成することで「12345678」を得る。
制御部110は、ステップS256で合成したコードの桁数と、当該1次元バーコードの規定桁数とを比較することで、当該1次元バーコードの全範囲が撮像されたか否かを判別する(ステップS257)。すなわち、合成後のコードの桁数が規定桁数と一致する場合、制御部110は、当該1次元バーコードの全範囲が撮像されていると判別する。一方、合成後のコードの桁数が規定桁数より少ない場合、制御部110は、当該1次元バーコードの全範囲が撮像されていないと判別する。
1次元バーコードの全範囲が撮像されていない場合(ステップS257:No)、制御部110は、ステップS251〜S256までの処理を繰り返し、1次元バーコードの全範囲が撮像されるまで複数の撮像画像を取得する。
一方、1次元バーコードの全範囲が撮像されている場合(ステップS257:Yes)、「読取処理(2)」(図11)のフローに戻る。
「読取処理(2)」では、ステップS256で合成されたコードが記憶部160に格納される(ステップS207)。制御部110は、合成したコードデータもしくは当該コードデータに基づく商品情報を生成して、表示部141もしくは通信部170を介して外部装置に出力して(ステップS208)、処理を終了する。
上記「読取処理(2)」によれば、1次元バーコードなどサイズの大きいコードシンボルCSを読み取る場合において、1次元バーコードをデコードして得られるコードの桁数に基づいて、撮像範囲内に1次元バーコードの全範囲が収まっているか否かを判別し、収まらない場合は、ユーザに複数回撮像させることで当該1次元バーコードの全範囲を撮像する。したがって、ユーザがハンディターミナル100を物品GDから遠ざけたり近づけるすることなくコードシンボルCSを撮像して認識することができる。この結果、コードシンボルCSの読取作業時に、ユーザが移動する必要がない。また、複数回の撮像によって生じる重複部分を考慮してコードデータを取得する、ユーザの手動操作による撮像であっても正確にコードデータを取得することができる。
上記実施形態1では、1次元バーコードのバー部分とスペース部分の寸法比を用い、上記実施形態2では、1次元バーコードをデコードして得られるコードの桁数を用いたが、この双方を用いて、撮像されている範囲や重複部分を特定してもよい。この場合、より高い判別精度を実現することができる。
また、上記各実施形態では、ユーザがコード種を指定したが、撮像される画像に基づいて、ハンディターミナル100がコード種を自動的に判別するようにしてもよい。この場合のハンディターミナル100の処理(「読取処理(3)」を図13に示すフローチャートを参照して説明する。なお、ハンディターミナル100の構成や「読取処理(3)」の開始条件、その他用語の定義などは上記各実施形態と同様である。
ユーザは、読取対象とするコードシンボルCSを画像上で捉えると、入力部130を操作し、位置が決定された旨を示す指示を入力する。すなわち、位置決定信号が入力部130から制御部110に入力されることで、制御部110は、撮像位置が決定されたと判別する(ステップS301)。
撮像位置が決定されると(ステップS301:Yes)、制御部110は、入力時点で撮像素子123に結像されている入射光に基づく画像データを取得し、撮像画像としてワークエリアに保持する(ステップS302)。すなわち、読取対象としているコードシンボルCSの黒色部分と白色部分を示す2値データを取得する。
制御部110は、ステップS302で取得した撮像画像を画像認識し、2次元コードに規定されている「認識パターン」を含んでいるか否かを判別する(ステップS303)。すなわち、2次元コードには、コードの範囲やコード種別を示すための所定のパターンが含まれており、例えば、2次元コードの一種である「QR Code」には、図14(a)に示すような「切り出しシンボル」が認識パターンとして規定されており、「Data Matrix」には、図14(b)に示すような「L型ガイドセル」が認識パターンとして規定されている。本実施形態では、このような認識パターンの特徴が「特徴テーブル」(図5)に記録されているので、画像認識によりいずれかの認識パターンが検出されれば、制御部110は、撮像されたコードシンボルCSが2次元コードであるか否かを判別することができる。
撮像画像に2次元コードの認識パターンが含まれている場合(ステップS303:Yes)、制御部110は、当該コードシンボルCSが2次元コードであると認識する。この場合、制御部110は当該2次元コードをデコードしてコードデータを取得し、記憶部160に格納する(ステップS304)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成し、表示部141もしくは通信部170を介して外部装置に出力して(ステップS305)、処理を終了する。
一方、撮像画像に2次元コードの認識パターンが含まれていない場合(ステップS303:No)、制御部110は、当該コードシンボルCSが1次元バーコードであると認識する。この場合、制御部110は、1次元バーコードを読み取るための「バーコード読取処理」を実行する(ステップS350)。この「バーコード読取処理」を図15に示すフローチャートを参照して説明する。
まず、制御部110は、ステップS302で取得された撮像画像に示される1次元バーコードの種別を特定する(ステップS351)。ここでは、例えば、撮像されている1次元バーコードのバー部分とスペース部分の認識(実施形態1参照)、あるいは、撮像されている1次元バーコードをデコードすることによるコードの取得(実施形態2参照)により、制御部110が、撮像されている1次元バーコードのスタートコードを認識する。制御部110は、記憶部160の「特徴テーブル」(図5)を参照し、認識されたスタートコードを特徴としている1次元バーコードの種別を特定する。なお、スタートコードの特徴では、一の種別に定められない場合は、該当する複数の種別を候補として特定する。
撮像されている1次元バーコードの種別もしくはその候補が特定されると、制御部110は、撮像されている部分のモジュール数もしくはデコードによって得られたコードの桁数に基づいて、読取対象としている1次元バーコードの全範囲が撮像されているか否かを判別する(ステップS352)。
すなわち、上記実施形態1の手法により、撮像されている1次元バーコードのバー部分とスペース部分を認識した場合は、制御部110が撮像されている部分のモジュール数を検出する。そして、記憶部160の「特徴テーブル」(図5)を参照し、ステップS351で特定した種別(もしくはその候補)についての規定モジュール数と比較することで、当該1次元バーコードの全範囲が撮像されているか否かを判別する。あるいは、上記実施形態2の手法により、撮像されている1次元バーコードをデコードしてコードデータを取得した場合は、制御部110が取得されたコードの桁数を特定する。そして、特定した桁数と、ステップS351で特定した種別(もしくはその候補)についての規定桁数とを比較することで、当該1次元バーコードの全範囲が撮像されているか否かを判別する。
1次元バーコードの全範囲が撮像されている場合(ステップS352:Yes)、「読取処理(3)」(図13)のフローに戻る。「読取処理(3)」では、ステップS352の判別で取得したコードデータ、あるいは、撮像されている1次元バーコードをデコードして取得したコードデータを記憶部160に格納する(ステップS304)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成し、表示部141もしくは通信部170を介して外部装置に出力して(ステップS305)、処理を終了する。
一方、1次元バーコードの全範囲が撮像されていない場合(ステップS352:No)、制御部110は、上記実施形態1の「全範囲撮像処理(1)」(ステップS150)あるいは上記実施形態2の「全範囲撮像処理(2)」(ステップS250)と同様の処理を実行することにより(ステップS353)、読取対象としている1次元バーコードを複数回撮像し、当該1次元バーコードの全範囲を撮像した複数の撮像画像を取得する。また、取得された複数の撮像画像から寸法比情報もしくはコードの重複部分を特定し、寸法比情報もしくはコードの合成をおこなう。
読取対象としている1次元バーコードの全範囲が撮像されると、制御部110は、「読取処理(3)」(図13)のフローに戻る。「読取処理(3)」では、ステップS353で合成されたコード、もしくは、ステップS353で合成された寸法比情報に基づくデコードにより取得されるコードデータを記憶部160に格納する(ステップS304)。制御部110は、取得したコードデータもしくは当該コードデータに基づく商品情報を生成し、表示部141もしくは通信部170を介して外部装置に出力して(ステップS305)、処理を終了する。
上記「読取処理(3)」によれば、撮像されたコードシンボルCSの種別をハンディターミナル100が自動的に判別し、種別に応じた処理を実行するので、ユーザがコード種別を指定する必要がない。このため、より効率的にコードシンボルCSの読取作業を実施することができる。
以上説明したように、本発明にかかる実施形態によれば、読取対象としているコードシンボルCSが撮像範囲内に収まらない場合、これを自動的に検知してユーザに複数回撮像させることができる。この場合、バーコードの寸法比やデコードされたコードデータに基づいて複数の撮像画像上での重複部分を特定するので、ユーザによる手動撮像であっても、全体のコードデータを正確に取得することができる。したがって、撮像部が単焦点式である場合でも、サイズの異なる複数種類のコードシンボルを、1つの装置で効率的に取り扱うことができる。
なお、上記実施形態では、コードシンボルCSの読取装置としてハンディターミナル100を採用した場合を例示したが、コードシンボルを読み取るための装置であれば、ハンディターミナルでなくてもよく、例えば、POSシステム(POS: Point Of Sales)などで用いられるバーコードリーダなどに本発明を適用してもよい。
上記実施形態では、撮像範囲内にコードシンボルCSが収まらない場合に複数回撮像するようにしたが、この場合に、前回の撮像画像を表示部141に残像的に表示させることで、ユーザが次回撮像のための位置決めを容易におこなえるようにしてもよい。この場合、例えば、制御部110が、前回の撮像で取得した画像について、2値データ画像以外の多値データ画像を取得する。そして、制御部110が、取得した多値データ画像の透過度を制御することで、ファインダ領域FR内に前回撮像画像を透過的に表示させる。
上記実施形態では、1次元バーコードや2次元コードなどのコードシンボルを読取対象としたが、例えば、OCRフォントなどで構成される文字情報をハンディターミナル100で読み取るようにしてもよい。この場合、プログラム格納部150に所定の文字認識プログラムを格納し、制御部110がこれを実行することで、撮像部120で撮像された文字情報を認識することができる。ここで、OCRフォントは1次元バーコードに付帯して当該コード等を示す文字情報として利用されることがある。したがって、1次元バーコードが撮像範囲に収まらない場合と同様に、OCRフォントで構成された文字列も撮像範囲に収まらないことがある。このような場合には、上記実施形態における各「全範囲撮像処理」と同様の処理を実行することにより、OCRフォントで構成された文字列の全範囲を撮像して、正確に認識することができる。この場合、例えば、文字部分と文字間(スペース)の寸法比から撮像範囲の判別や重複部分の特定などができる他、各撮像毎に文字認識をおこない、認識された文字の文字数(桁数)によって撮像範囲の判別や重複部分の特定などをおこなうことができる。
上記実施形態では、撮像素子123としてCMOSイメージセンサを例示したが、例えば、CCD(Charge Coupled Device:電荷結合素子)を利用した撮像素子などを採用してもよい。すなわち、入射光を光電変換して画像データを得ることができるのであれば、任意の撮像素子(撮像装置)を採用することができる。
また、動作プログラムの更新により機能の拡張を図ることができるハンディターミナルなどの読取装置に上述した各処理を実現するプログラムを適用することで、既存のハンディターミナル等を上記実施形態にかかる読取装置(ハンディターミナル100)として機能させることができる。あるいは、撮像機能を有する汎用PDA(Personal Data Assistance:携帯情報端末)や携帯電話などの移動体通信端末などに同様のプログラムを適用することで、汎用PDAなどを上記実施形態にかかる読取装置(ハンディターミナル100)として機能させることができる。この場合、上記実施形態にかかる動作プログラムおよび処理データをこれらの装置にインストールし、当該装置の制御部が実行する。これにより、これらの装置が上記実施形態における読取装置(ハンディターミナル100)と同等の装置として機能する。
このような動作プログラムを配布する方法は任意であり、例えば、CD−ROMやメモリカードなどの記録媒体に格納して配布可能であることはもとより、インターネットなどの通信媒体を介して配布することもできる。
また、上記実施形態では、コードシンボルCSを読み取ることにより商品管理をおこなう場面を例示したが、コードシンボルCSの読み取りが必要となるあらゆる場面に本発明を適用した読取装置を用いることができる。
以上説明したように、本発明を上記実施形態の如く適用することにより、単焦点式の読取装置で異なるサイズの複数種類のコードシンボルを効率的に読み取ることができる。
100…ハンディターミナル、110…制御部、120…撮像部、121…光源、122…レンズユニット、123…撮像素子、130…入力部、140…出力部、150…プログラム格納部、160…記憶部、170…通信部