シンボル読取装置及びプログラム
【課題】シンボルの読み取りにおける操作性を高めるとともに、シンボルの画像解析の処理負担を低減することである。
【解決手段】ハンディターミナル1は、一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたバーコード5Bを撮影して画像データを取得するイメージセンサと、重力方向に対する自装置の傾きを検出する傾きセンサと、傾きセンサにより検出された自装置の傾きに基づいて、バーコード5Bの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備える。
【解決手段】ハンディターミナル1は、一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたバーコード5Bを撮影して画像データを取得するイメージセンサと、重力方向に対する自装置の傾きを検出する傾きセンサと、傾きセンサにより検出された自装置の傾きに基づいて、バーコード5Bの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備える。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シンボル読取装置及びプログラムに関する。
【背景技術】
【0002】
従来、商品等に付されたシンボル(バーコード)を読み取るシンボル読取装置(バーコード読取装置(スキャナ))が知られている。バーコード読取装置を含む機器としては、スーパーマーケット、コンビニエンスストア、個人商店、倉庫等において使用され、バーコード読取機能を有するハンディターミナル等の機器が知られている。
【0003】
バーコード読取装置は、レーザスキャナと、イメージセンサを用いたスキャナと、がある。レーザスキャナは、バーコード(一次元バーコード)に向けて各バーを横切るようにレーザ光を照射し、そのレーザ光の反射光を受光して光電変換し、得られた電気信号をデコードエンジン(デコーダ)で解析することにより、バーコードに含まれるバーコード情報を取得する。また、イメージセンサを用いたスキャナは、CCD(Charge-Coupled Device)やCMOS(Complementary Metal-Oxide Semiconductor)等のイメージセンサを備える。イメージセンサを用いたスキャナ(CCD/CMOSスキャナ)は、イメージセンサで一次元バーコード又は二次元コードを撮影し、撮影画像データを画像解析することにより、バーコード情報を取得する。
【0004】
レーザスキャナや、一次元CCD/CMOSスキャナでは、レーザ光の受光センサ又はイメージセンサの画像データから得られる解析対象のデータが一次元データである。このため、レーザスキャナ又は一次元CCD/CMOSスキャナは、解析対象のデータの情報量が少なく、CPU(Central Processing Unit)等の装置のスペックが低くても、高速にデコード処理等の処理を行うことができるというメリットがあった。
【0005】
二次元CCD/CMOSスキャナ(イメージスキャナ)は、イメージセンサから得られる解析対象のデータが二次元データ(画像データ)である。イメージスキャナは、読み取り方向を二次元コードの向きに合せなくてもよいというメリットがあった。
【0006】
また、レーザ光による読取部とジャイロセンサとを備え、当該ジャイロセンサにより検出された移動状態に基づいて、読取部から得られたバーコードイメージデータを、基準位置からのバーコードイメージデータに補正し、補正されたバーコードイメージデータを合成してデコードするレーザスキャナが知られている(例えば、特許文献1参照)。
【0007】
また、レーザ光による読取部とジャイロセンサとを備え、当該ジャイロセンサにより検出された移動状態に基づいて、読取部の移動量を算出し、当該読取部の移動の前後のバーコードデータを合成してデコードするレーザスキャナが知られている(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2008−242828号公報
【特許文献2】特開2008−242829号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかし、従来のレーザスキャナ又は一次元CCD/CMOSスキャナでは、読み取り方向を一次元バーコードの向きに合せなくてはならなかった。多くのレーザスキャナ又は一次元CCD/CMOSスキャナからは、レーザ光やエイマー光が照射される。操作者は、これらの光が一次元バーコードの端から端までを含むように、装置を持つ方向を調整せねばならなかった。このため、装置の操作性を高める要請があった。
【0010】
また、従来のイメージスキャナでは、一次元バーコードを読み取る場合に、二次元の画像データから一次元バーコードのイメージを抽出し、読み取り方向等の判定を行っていた。このため、実用的な読み取りスピードを確保するために、イメージスキャナを搭載する機器に、高いスペックのCPUやメモリを搭載しなければならなかった。また、低スペックな機器に搭載可能なスキャナとして、デコードエンジンを専用のハードウェアに組み込んだイメージスキャナも登場しているが、非常に高価であった。
【0011】
本発明の課題は、シンボルの読み取りにおける操作性を高めるとともに、シンボルの画像解析の処理負担を低減することである。
【課題を解決するための手段】
【0012】
上記課題を解決するために、請求項1に記載の発明のシンボル読取装置は、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサと、
前記重力方向に対する自装置の傾きを検出する傾きセンサと、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備える。
【0013】
請求項2に記載の発明は、請求項1に記載のシンボル読取装置において、
前記制御部は、最初の走査において前記画像の中心を通る走査開始位置及び走査方向を算出する。
【0014】
請求項3に記載の発明は、請求項1又は2に記載のシンボル読取装置において、
前記制御部は、前記取得された画像データの画像に対して、前記算出した走査開始位置から前記走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行う。
【0015】
請求項4に記載の発明は、請求項1又は2に記載のシンボル読取装置において、
前記シンボルは、複数の一次元バーパターンを有するスタック型二次元コードであり、
前記制御部は、前記算出した走査開始位置を前記スタック型二次元コードの一次元バーパターンの検出開始位置に設定し、前記取得された画像データの画像に対して、前記算出した検出開始位置から前記走査方向へ走査してデコードを行うとともに、当該検出開始位置を前記スタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、前記スタック型二次元コードの全一次元バーパターンについて行う。
【0016】
請求項5に記載の発明は、請求項1から4のいずれか一項に記載のシンボル読取装置において、
表示部を備え、
前記制御部は、前記シンボルのデコードの結果を前記表示部に表示する。
【0017】
請求項6に記載の発明のプログラムは、
コンピュータを、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサ、
前記重力方向に対する自装置の傾きを検出する傾きセンサ、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部、
として機能させる。
【発明の効果】
【0018】
本発明によれば、シンボルの読み取りにおける操作性を高めることができるとともに、シンボルの画像解析の処理負担を低減できる。
【図面の簡単な説明】
【0019】
【図1】本発明に係る第1の実施の形態のハンディターミナルの外観構成を示す斜視図である。
【図2】ハンディターミナルによる一次元バーコードの読み取りを示す図である。
【図3】ハンディターミナルの機能構成を示すブロック図である。
【図4】傾きセンサが検出する傾きを示す図である。
【図5】イメージセンサが撮影した画像データの画像を示す。
【図6】シンボルスキャン処理を示すフローチャートである。
【図7】シンボルスキャン処理における走査方向・走査開始位置決定処理を示すフローチャートである。
【図8】シンボルスキャン処理における第1のデコード処理を示すフローチャートである。
【図9】|R|≦arctan(H/W)の場合の画像データの画像を示す図である。
【図10】arctan(H/W)<R<(180度−arctan(H/W))の場合の画像データの画像を示す図である。
【図11】−(180度−arctan(H/W))<R<−arctan(H/W)場合の画像データの画像を示す図である。
【図12】|R|≧arctan(H/W)の場合の画像データの画像を示す図である。
【図13】一次元バーコードを撮影した画像データの画像における走査開始位置の移動の一例を示す図である。
【図14】スタック型二次元コードの例を示す図である。
【図15】バーパターンテーブルの構成を示す図である。
【図16】第2のデコード処理を示すフローチャートである。
【図17】第2のデコード処理におけるスタック型コードデコード処理を示すフローチャートである。
【図18】第2のデコード処理におけるスタック型コードデコード処理を示すフローチャートである。
【図19】スタック型二次元コードを撮影した画像データの画像における走査開始位置の移動の一例を示す図である。
【図20】スタック型二次元コードにおける検出開始位置の移動の一例を示す図である。
【発明を実施するための形態】
【0020】
以下、添付図面を参照して本発明に係る第1、第2の実施の形態を順に詳細に説明する。なお、本発明は、図示例に限定されるものではない。
【0021】
(第1の実施の形態)
図1〜図13を参照して、本発明に係る第1の実施の形態を説明する。本実施の形態は、シンボルとして、1つの一次元バーパターンからなる一次元バーコードを読み取る構成である。先ず、図1〜図3を参照して、本実施の形態の装置構成を説明する。図1に、本実施の形態のハンディターミナル1の外観構成を示す。図2に、ハンディターミナル1によるバーコード5Bの読み取りを示す。
【0022】
本実施の形態のハンディターミナル1は、コンビニエンスストア、スーパーマーケット等の小売業の店舗等において使用され、商品等に付されたバーコードを読み取る機能を有する携帯端末である。
【0023】
図1に示すように、本実施の形態のハンディターミナル1は、ケース2と、トリガキー12Aと、各種キー12Bと、表示部14と、イメージセンサ16と、を備える。
【0024】
ケース2は、ハンディターミナル1の本体ケースであり、(略)直方体の形状を有する。ケース2の正面の長方形を正面2Aとする。正面2Aの長方形の短手方向に平行な所定の軸を(横)軸aとし、同じく長手方向に平行な所定の軸を(縦)軸bとする。
【0025】
トリガキー12Aは、ケース2の正面2Aに設けられ、イメージセンサ16によるバーコードのスキャン実行のためのトリガキーである。各種キー12Bは、ケース2の正面2Aに設けられ、文字、数字等の入力キーや、各種機能キー等を含む。表示部14は、各種表示情報を表示する。
【0026】
イメージセンサ16は、ケース2の縦軸b方向の先端側の側面に設けられ、バーコードを撮影して画像データ(イメージデータ)を取得するセンサである。イメージセンサ16の画像撮影の方向は、縦軸bの正方向であるものとする。
【0027】
図2に示すように、商品棚3に商品4A,4Bが陳列されている店舗においてハンディターミナル1を使用する例を説明する。一次元バーコードであるバーコード5A,5Bは、それぞれ、商品4A,4Bに対応する。商品棚3には、商品4A,4Bが陳列されている場所に対応して、バーコード5A,5Bが貼り付けられている。そして、バーコード5A,5Bは、一次元バーパターンの長手方向(延在方向、一次元バーパターンの各バーを横切る方向)が重力方向に対して垂直な方向(水平面上の一方向)になるよう配置されて、商品棚3に貼り付けられている。
【0028】
ハンディターミナル1によりバーコード5Bを読み取る場合に、ハンディターミナル1は、横軸aがバーコード5Bの平面に平行にされ、縦軸bがバーコード5Bの平面に垂直にされた姿勢にされる。この姿勢で、トリガキー12Aがユーザにより押下されることで、イメージセンサ16によりバーコード5Bが撮影される。
【0029】
次いで、図3を参照して、ハンディターミナル1の内部の機能構成を説明する。図3に、ハンディターミナル1の機能構成を示す。
【0030】
ハンディターミナル1は、制御部としてのCPU11と、操作部12と、RAM(Random Access Memory)13と、表示部14と、ROM(Read Only Memory)15と、イメージセンサ16と、フラッシュメモリ17と、傾きセンサ18と、I/F(InterFace)部19と、電源部20と、を備え、各部がバス21を介して接続されている。
【0031】
CPU11は、ハンディターミナル1の各部を制御する。CPU11は、ROM15に記憶されているシステムプログラム及びアプリケーションプログラムのうち、指定されたプログラムを読み出してRAM13に展開し、RAM13に展開されたプログラムとの協働で、各種処理を実行する。
【0032】
CPU11は、シンボルスキャンプログラム151に従い、イメージセンサ16により、一次元バーパターンを有するシンボルとしての一次元バーコードを撮影して画像データを取得する。そして、CPU11は、傾きセンサ18により検出されたハンディターミナル1の傾きデータに基づいて、一次元バーコードの走査方向及び走査開始位置を算出する。そして、CPU11は、イメージセンサ16により取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られたバーパターンをデコードする。
【0033】
操作部12は、トリガキー12A、各種キー12Bを含むキーパッドを備える。操作部12は、キーパッドの各キーの操作入力を受け付け、操作入力に応じた操作情報をCPU11に出力する。
【0034】
RAM13は、情報を一時的に記憶する揮発性のメモリである。RAM13は、各種データ及びプログラムを格納するワークエリアを有する。RAM13には、イメージセンサ16から入力された画像データが格納される。
【0035】
表示部14は、LCD(Liquid Crystal Display)、ELD(Electro-Luminescent Display)等により構成される。表示部14は、CPU11から入力される表示情報に応じて各種表示を行う。
【0036】
ROM15は、読み出し専用の情報を記憶しているメモリである。ROM15には、シンボルスキャンプログラム151が記憶されている。
【0037】
イメージセンサ16は、シンボルを読み取るスキャナ部として、CCD、CMOS等の撮像素子で構成されている。イメージセンサ16は、CPU11の制御に従い、被写体としてのシンボルを撮影して画像データ(二次元データ)を生成し、その画像データをRAM13に出力する。
【0038】
また、イメージセンサ16は、エイマー光出射部を備える。イメージセンサ16は、シンボル撮影の際に、エイマー光出射部からエイマー光を出射する。エイマー光は、ユーザに対して、シンボルの読み取り可能な範囲を示す照準光である。
【0039】
フラッシュメモリ17は、情報を読み書き自在に記憶する半導体メモリである。
【0040】
傾きセンサ18は、三次元加速度センサ等により構成される。傾きセンサ18は、重力方向を検出し、この重力方向に対するハンディターミナル1(ケース2)の傾きを検出し、検出した傾きの傾きデータをCPU11に出力する。
【0041】
I/F部19は、所定機器と接続可能であり、接続された機器との通信を仲介する接続部である。I/F部19は、例えば、ハンディターミナル1が載置されるクレードルに接続され、このクレードルを介して管理サーバ等の機器に通信接続される。
【0042】
電源部20は、ハンディターミナル1の各部に電源を供給する電源である。電源部20は、例えば、リチウム電池等の二次電池である。
【0043】
ここで、図4を参照して、傾きセンサ18の検出する傾きを説明する。図4に、傾きセンサ18が検出する傾きを示す。
【0044】
図4に示すように、傾きセンサ18は、重力方向に対するハンディターミナル1のケース2の傾きを検出する機能を有する。また、正面2Aを鉛直上方向に向けた状態におけるハンディターミナル1の姿勢を基本姿勢とする。傾きセンサ18が出力する基本姿勢の傾きデータは、横軸aを中心とした周方向に0度回転し、縦軸bを中心とした周方向に0度回転したデータとする。他の姿勢の傾きデータは、基本姿勢から横軸a,縦軸bをそれぞれ中心として回転した角度の差のデータとして表される。
【0045】
傾きデータの横軸aを中心とした周方向の角度の値の範囲は、−180度(正面2Aを重力方向に向けた姿勢(下回転))〜0度(基本姿勢)〜+180度(正面2Aを重力方向に向けた姿勢(上回転))である。但し、−180度は、+180度に含められる。縦軸bは、例えば、イメージセンサ16の撮影画像の中心点に対応する位置にとられる。
【0046】
傾きデータの縦軸bを中心とした周方向の角度の値の範囲は、−180度(正面2Aを重力方向に向けた姿勢(右回転))〜0度(基本姿勢)〜+180度(正面2Aを重力方向に向けた姿勢(左回転))である。但し、縦軸bを中心とした周方向の角度を回転角度R[度](R:変数)とすると、−180[度]<R≦180[度]である。
【0047】
ハンディターミナル1は、ユーザにより、横軸aを中心として回転されず、縦軸bの正方向が常にシンボル(一次元バーコード)の平面を向き、縦軸bを中心とした周方向に回転されるものとする。このため、傾きセンサ18が出力する傾きデータのうち、傾きデータの横軸aを中心とした周方向の角度の値のみが、一次元バーコードの読み取りに使用される。
【0048】
また、図5を参照して、イメージセンサ16の撮影する画像データを説明する。図5に、イメージセンサ16が撮影した画像データの画像F0を示す。
【0049】
図5に示すように、イメージセンサ16が撮影する画像データの画像F0は、横Wピクセル、縦Hピクセル(W,H;正の整数)のグレースケールビットマップデータとする。この画像F0は、例えば、W=640、H=480のVGA(Video Graphics Array)のサイズであるものとするが、このサイズに限定されるものではない。また、画像F0の横方向(Wピクセル)は、横軸aの方向に対応している。画像F0の縦方向(Hピクセル)は、横軸a及び縦軸bに垂直な方向に対応している。さらに、撮影対象の一次元バーコードは、その長手方向(延在方向)が重力方向に垂直な方向になるように、商品、商品棚等に付されているものとする。
【0050】
図5には、正面2Aの縦軸bの周方向の回転角度がR度となるように、ハンディターミナル1が傾けられた姿勢が示されている。このハンディターミナル1の姿勢において、イメージセンサ16により一次元バーコードが撮影され、画像F0の画像データが得られる。
【0051】
次に、図6〜図13を参照して、ハンディターミナル1の動作を説明する。図6に、シンボルスキャン処理を示す。図7に、シンボルスキャン処理における走査方向・走査開始位置決定処理を示す。図8に、シンボルスキャン処理における第1のデコード処理を示す。図9に、|R|≦arctan(H/W)の場合の画像データの画像F1を示す。図10に、arctan(H/W)<R<(180度−arctan(H/W))の場合の画像データの画像F2を示す。図11に、−(180度−arctan(H/W))<R<−arctan(H/W)の場合の画像データの画像F3を示す。図12に、|R|≧arctan(H/W)の場合の画像データの画像F4を示す。図13に、一次元バーコードを撮影した画像データの画像F5における走査開始位置の移動の一例を示す。
【0052】
先ず、図6を参照して、シンボルスキャン処理を説明する。シンボルスキャン処理は、ハンディターミナル1が、シンボルとしての一次元バーコードを撮影し、撮影時の傾きデータを用いて、撮影した画像データをデコードする処理である。
【0053】
予め、操作部12を介するユーザからの操作入力に応じて、ハンディターミナル1がシンボルスキャンモードに設定されているものとする。シンボルスキャンモードは、イメージセンサ16からエイマー光が出射され、トリガキー12Aの押下に応じてシンボル読み取りを開始するモードである。そして、読取対象のシンボルとしての一次元バーコードに照準が合せられるよう、ハンディターミナル1がユーザにより動かされているものとする。
【0054】
ハンディターミナル1において、例えば、ユーザからトリガキー12Aの押下入力がなされたことをトリガとして、ROM15から読み出されて適宜RAM13に展開されたシンボルスキャンプログラム151と、CPU11との協働により、シンボルスキャン処理が実行される。
【0055】
先ず、イメージセンサ16によりシンボルとしての一次元バーコードが撮影されて画像データが取得される(ステップS1)。そして、ステップS1で取得された画像データがRAM13に格納される(ステップS2)。そして、傾きセンサ18により、ハンディターミナル1の傾きが検出され、その検出されたデータが傾きデータとして取得される(ステップS3)。
【0056】
そして、走査方向・走査開始位置決定処理が実行される(ステップS4)。ステップS4の走査方向・走査開始位置決定処理は、一次元バーコードを走査するために必要な走査方向及び走査開始位置を決定する処理であり、詳細に後述される。そして、第1のデコード処理が実行される(ステップS5)。ステップS5の第1のデコード処理は、一次元バーコードの走査及びデコードをする処理であり、詳細に後述される。
【0057】
そして、ステップS5の第1のデコード処理のデコードが成功したか否かが判別される(ステップS6)。デコードが成功していない場合(ステップS6;NO)、ステップS1に移行される。デコードが成功した場合(ステップS6;YES)、ステップS5のデコード処理のデコード結果が表示部14に表示される(ステップS7)。そして、シンボルスキャン処理が終了する。デコード結果とは、デコード成功の旨と、デコードにより得られたバーコード情報と、である。
【0058】
ここで、図7、図9〜図12を参照して、ステップS4の走査方向・走査開始位置決定処理を説明する。図7に示すように、先ず、変数Wに、ステップS1で取得された画像データの横幅のピクセル数が代入され、変数Hに、ステップS1で取得された画像データの縦幅のピクセル数が代入される(ステップS41)。
【0059】
そして、ステップS3で取得された傾きデータに基づいて、変数Rに、ハンディターミナル1の縦軸bを中心とした横回転の角度の値[度]が代入される(ステップS42)。そして、変数Rについて、|R|≦arctan(H/W)を満たすか否かが判別される(ステップS43)。但し、0<arctan(H/W)<90度とする。
【0060】
変数Rが|R|≦arctan(H/W)を満たす場合(ステップS43;YES)、変数Xに0が代入され、変数Yに、H/2+W*(tan(−R))/2の値が代入される(ステップS44)。変数Rが|R|≦arctan(H/W)を満たさない場合(ステップS43;NO)、変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たすか否かが判別される(ステップS45)。
【0061】
変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たす場合(ステップS45;YES)、変数Xに、W/2+H/(2*tan(−R))の値が代入され、変数Yに0が代入される(ステップS46)。変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たさない場合(ステップS45;NO)、変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たすか否かが判別される(ステップS47)。
【0062】
変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たす場合(ステップS47;YES)、変数Xに、W/2+H/(2*tanR)の値が代入され、変数YにHの値が代入される(ステップS48)。変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たさない場合(ステップS47;NO)、変数Rが|R|≧(180度−arctan(H/W))を満たし、変数XにWの値が代入され、変数Xに、H/2+W*(tanR)/2の値が代入される(ステップS49)。
【0063】
そして、走査開始位置が、ステップS44、S46、S48又はS49で設定されたX,Yを用いた座標(X,Y)に設定され、走査方向が、−R度に設定される(ステップS50)。そして、走査方向・走査開始位置決定処理が終了する。
【0064】
走査開始位置の座標(X,Y)は、撮影された画像データの画像の左上の端点を原点(0,0)とした平面座標である。走査開始位置とは、画像中の最初のデコード対象のラインの走査開始位置である。走査方向とは、画像中のデコード対象のラインの走査方向である。
【0065】
図9に示すように、|R|≦arctan(H/W)を満たす回転角度Rで撮影された画像データの画像F1において、ステップS44に対応する走査開始位置の座標(X,Y)は、画像F1の左辺上の点となる。画像F1において、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F1の中心座標(W/2,H/2)を通る。
【0066】
図10に示すように、arctan(H/W)<R<(180度−arctan(H/W))を満たす回転角度Rで撮影された画像データの画像F2において、ステップS46に対応する走査開始位置の座標(X,Y)は、画像F2の上辺上の点となる。画像F2においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F2の中心座標(W/2,H/2)を通る。
【0067】
図11に示すように、−(180度−arctan(H/W))<R<−arctan(H/W)を満たす回転角度Rで撮影された画像データの画像F3において、ステップS48に対応する走査開始位置の座標(X,Y)が画像F3の上辺の一点となる。画像F3においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F3の中心座標(W/2,H/2)を通る。
【0068】
図12に示すように、|R|≧(180度−arctan(H/W))を満たす回転角度Rで撮影された画像データの画像F4において、ステップS49に対応する走査開始位置の座標(X,Y)が画像F4の上辺の一点となる。画像F4においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F4の中心座標(W/2,H/2)を通る。
【0069】
ここで、図8及び図13を参照して、ステップS5の第1のデコード処理を説明する。図8に示すように、先ず、変数xに、ステップS4で設定された走査開始位置Xが代入され、変数yに、ステップS4(ステップS50)で設定された走査開始位置Yが代入される(ステップS51)。変数x,yは、画像の二次元座標の変数である。
【0070】
そして、変数Nに0が代入される(ステップS52)。変数Nは、走査実行回数の変数である。そして、画像の座標(x,y)から、ステップS4(ステップS50)で設定された走査方向に走査され、一次元データ(一次元バーパターンのデータ)が取得される(ステップS53)。そして、ステップS53で走査された一次元データがデコードされる(ステップS54)。ステップS54のデコードは、一次元バーコードの一般的なデコードであり、その説明を省略する。
【0071】
そして、ステップS54のデコード結果から、一次元バーコードが検出されたか否かが判別される(ステップS55)。一次元バーコードが検出された場合(ステップS55;YES)、デコードが成功しており、第1のデコード処理が終了する。一次元バーコードが検出されていない場合(ステップS55;NO)、変数Nが1インクリメントされ、変数Dに、(−1)N*N*2が代入される(ステップS56)。変数Dは、走査開始位置の移動幅の変数である。
【0072】
そして、回転角度Rが|R|≦arctan(H/W)を満たすか否かが判別される(ステップS57)。回転角度Rが|R|≦arctan(H/W)を満たす場合(ステップS57;YES)、図9に対応し、変数yに、y+Dが代入される(ステップS58)。そして、変数y<0又はy>Hであるか否かが判別される(ステップS59)。変数y<0又はy>Hである場合(ステップS59;YES)、デコードが失敗しており、デコード処理が終了する。変数y<0又はy>Hでない場合(ステップS59;NO)、ステップS53に移行される。
【0073】
回転角度Rが|R|≦arctan(H/W)を満たさない場合(ステップS57;NO)、回転角度Rが|R|≧(180度−arctan(H/W))を満たすか否かが判別される(ステップS60)。回転角度Rが|R|≧(180度−arctan(H/W))を満たす場合(ステップS60;YES)、ステップS58に移行される。回転角度Rが|R|≧(180度−arctan(H/W))を満たさない場合(ステップS60;NO)、変数Rが、arctan(H/W)<R<(180度−arctan(H/W))、又は−(180度−arctan(H/W))<R<−arctan(H/W)を満たし、図10又は図11に対応し、変数xに、x+Dが代入される(ステップS61)。
【0074】
そして、変数x<0又はx>Wであるか否かが判別される(ステップS62)。変数x<0又はx>Wである場合(ステップS62;YES)、デコードが失敗しており、第1のデコード処理が終了する。変数x<0又はx>Wでない場合(ステップS62;NO)、ステップS53に移行される。
【0075】
ここで、図13を参照して、デコード処理における走査開始位置の移動の一例を説明する。図13に示すように、イメージセンサ16により撮影された画像データの画像F5(arctan(H/W)<R<(180度−arctan(H/W)))を考える。
【0076】
デコード処理において、ステップS51により最初の走査開始位置が点P1の座標(X,0)にとられて、走査方向に走査されデコードされる。この走査は、座標(W/2,H/2)を通る。
【0077】
そして、点P1に対応するデコードが失敗すると、ステップS61により走査開始位置が点P2の座標(X−2,0)にとられて、走査されデコードされる。点P2に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P2と反対側の点P3の座標(X+4,0)にとられて、走査されデコードされる。そして、点P3に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P3と反対側の点P4の座標(X−6,0)にとられて、走査されデコードされる。
【0078】
そして、点P4に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P4と反対側の点P5の座標(X+8,0)にとられて、走査されデコードされる。このように、走査毎に走査開始位置が移動され、デコードが成功するか、走査開始位置が画像から出るまで続けられる。
【0079】
以上、本実施の形態によれば、ハンディターミナル1のCPU11は、イメージセンサ16により重力方向に垂直な方向(水平方向)に配置された一次元バーコードを撮影して画像データを取得し、傾きセンサ18によりハンディターミナル1の傾きデータを検出して取得する。そして、CPU11は、傾きセンサ18により検出されたハンディターミナル1の傾きデータに基づいて、一次元バーコードの一次元バーパターンを横切る走査の走査方向及び走査開始位置を算出する。そして、CPU11は、撮影された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする。このため、ユーザが手首を回転してハンディターミナル1の角度を変更することなく一次元バーコードを読み取ることができるので、一次元バーコードの読み取り操作性を高めることができる。また、傾きデータから一次元バーコードの読み取りに必要な走査開始位置及び走査方向を算出するので、画像解析により走査開始位置及び走査方向を算出せずともよく、一次元バーコードの画像解析の処理負担を低減できる。
【0080】
また、CPU11は、最初の走査において、イメージセンサ16により撮影された画像データの画像の中心を通る走査開始位置及び走査方向を算出する。というのは、一次元バーコードは、画像の中心を含む位置に存在する確率が高いからである。このため、一次元バーコードのデコードが成功するまでの走査回数を低減できる。ここで、イメージセンサ16から出射されるエイマー光が、読み取り画像範囲の中心に照準を有するものとする。そうすれば、ユーザが意識して一次元バーコードに中心の照準を合わせる。このため、一次元バーコードに中心の照準が合うように一次元バーコードが撮影されるので、一次元バーコードのデコードが成功するまでの走査回数をさらに低減できる。
【0081】
また、CPU11は、イメージセンサ16により撮影された画像データの画像に対して、算出した走査開始位置から走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行うことを、デコードが成功するまで繰り返す。このため、走査開始位置を移動して一次元バーコードを適切に検出してデコードできる。
【0082】
また、CPU11は、一次元バーコードのデコードの結果を表示部14に表示する。このため、ユーザが一次元バーコードのデコードの結果を目視により容易に確認できる。
【0083】
(第2の実施の形態)
図14〜図20を参照して、本発明に係る第2の実施の形態を説明する。図14に、スタック型二次元コードの例を示す。
【0084】
第1の実施の形態では、ハンディターミナル1が、シンボルとして一次元バーコードを読み取った。本実施の形態では、ハンディターミナル1が、シンボルとして図14に示すようなスタック型二次元コードを読み取る。スタック型二次元コードは、一次元パーコードのような一次元パーパターンが多段に積み重ねられた構造を有する。このため、スタック型二次元コードについては、各一次元パーパターンを走査してデコードする必要がある。また、読取対象のスタック型二次元コードは、各一次元パーパターンの長手方向(延在方向、各一次元パーパターンのバーを横切る方向)が重力方向に対して垂直な方向(水平面上の一方向)になるよう配置されているものとする。
【0085】
本実施の形態の装置構成として、第1の実施の形態と同様のハンディターミナル1を用いる。このため、ハンディターミナル1について、第1の実施の形態と共通な部分の説明を省略し、異なる部分を主として説明する。
【0086】
ROM15には、第1のデコード処理に代えて、第2のデコード処理を実行するシンボルスキャンプログラム151が記憶されている。
【0087】
次に、図15を参照して、本実施の形態のシンボルスキャン処理においてRAM13に記憶される情報を説明する。図15に、バーパターンテーブル60の構成を示す。
【0088】
バーパターンテーブル60は、走査により検出したスタック型二次元コードの各一次元バーパターンを格納するテーブルである。バーパターンテーブル60は、係数E61と、バーパターン62と、の項目を有する。
【0089】
係数E61は、スタック型二次元コードの各一次元バーパターンに対応する係数Eである。係数Eとは、イメージセンサ16により撮影された画像データの画像の複数の走査において、各一次元バーパターンを検出するための検出開始位置を表すための数値である。係数Eは、例えば、最初の走査の検出開始位置に対応する値を0として、値が正の方向に大きくなるにつれて、画像中において検出開始位置が最初の検出開始位置から右側に離れていくものとする。同様に係数Eは、値が負の方向に大きくなるにつれて、画像中において検出開始位置が最初の検出開始位置から左側に離れていくものとする。
【0090】
バーパターン62は、係数E61に対応する走査における黒のバー及び白のバー(スペース)の幅の数値のパターンである。バーパターン62には、黒のバー及び白のスペースの幅の値が、黒1、白1、黒2、白2…の項目として格納される。黒1、白1等の項目自体の数値は、検出開始位置からの走査順に対応して昇順に付与されている。
【0091】
次に、図16〜図20を参照して、本実施の形態におけるハンディターミナル1の動作を示す。図16に、第2のデコード処理を示す。図17に、第2のデコード処理におけるスタック型コードデコード処理を示す。図18に、第2のデコード処理におけるスタック型コードデコード処理を示す。図19に、スタック型二次元コードを撮影した画像データの画像F6における走査開始位置の移動の一例を示す。図20に、スタック型二次元コードにおける検出開始位置の移動の一例を示す。
【0092】
ハンディターミナル1において、第1の実施の形態と同様に、ユーザからトリガキー12Aの押下入力がなされたことをトリガとして、ROM15から読み出されて適宜RAM13に展開されたシンボルスキャンプログラム151と、CPU11との協働により、シンボルスキャン処理が実行される。但し、本実施の形態のシンボルスキャン処理は、図6のステップS5として、第1のデコード処理に代えて第2のデコード処理を含む。このため、第2のデコード処理を説明する。
【0093】
図16に示すように、第2のデコード処理におけるステップS81〜S84、S88〜S94は、それぞれ順に、第1のデコード処理におけるステップS51〜S54、S56〜S62と同様の処理のステップである。
【0094】
ステップS84の実行後、ステップS84のデコード結果から、一次元バーパターンが検出されたか否かが判別される(ステップS85)。一次元バーパターンが検出されていない場合(ステップS85;NO)、ステップS88に移行される。
【0095】
一次元バーパターンが検出された場合(ステップS85;YES)、デコードが成功しており、検出開始位置の座標(SX,SY)に、座標(x,y)が代入される(ステップS86)。検出開始位置とは、二次元コードの多段の一次元バーパターンそれぞれ検出するための走査開始位置である。そして、スタック型コードデコード処理が実行される(ステップS87)。そして、第2のデコード処理が終了する。
【0096】
第2のデコードにおいて、図19に示すように、イメージセンサ16により撮影された画像データの画像F6(arctan(H/W)<R<(180度−arctan(H/W)))を考える。この場合、図13と同様にして、走査開始位置が、順に、点Q1:座標(X,0)、点Q2:座標(X−2,0)、点Q3:座標(X+4,0)、点Q4:座標(X−6,0)、点Q5:座標(X+8,0)と移動する。
【0097】
ここで、図17を参照して、ステップS87のスタック型コードデコード処理を説明する。先ず、各項目の値がクリアされているバーパターンテーブル60が作成されてRAM13に記憶され、又はRAM13に記憶されているバーパターンテーブル60の各数値がクリアされる(ステップS871)。そして、ステップS84,S85で検出された一次元バーパターンがRAM13内のバーパターンテーブル60のバーパターン62に格納される(ステップS872)。
【0098】
そして、係数Eに0が代入され、ステップS872で格納されたバーパターン62に対応して係数E61に係数E=0が格納される(ステップS873)。そして、係数Eに、(E+1)が代入される(ステップS874)。ステップS874は、検出開始位置を走査方向に垂直な一方の方向に移動することに対応する。そして、バーパターン走査処理が実行される(ステップS875)。バーパターン走査処理は、係数Eに対応して、検出開始位置から走査方向にスタック型二次元コードの走査を行う処理であり、詳細に後述される。
【0099】
そして、ステップS875における走査結果についてバーパターンが検出されたか否かが判別される(ステップS876)。バーパターンが検出された場合(ステップS876;YES)、ステップS874に移行される。バーパターンが検出されていない場合(ステップS876;NO)、検出開始位置がスタック型二次元コードの一方の端まで走査完了したものであり、係数Eに0が代入される(ステップS878)。
【0100】
そして、係数Eに、(E−1)が代入される(ステップS878)。ステップS878は、検出開始位置を走査方向に垂直なもう一方の方向(ステップS874の方向と反対方向)に移動することに対応する。そして、バーパターン走査処理が実行される(ステップS879)。そして、ステップS879における走査結果についてバーパターンが検出されたか否かが判別される(ステップS880)。バーパターンが検出された場合(ステップS880;YES)、ステップS878に移行される。
【0101】
バーパターンが検出されていない場合(ステップS880;NO)、検出開始位置がスタック型二次元コードのもう一方の端まで走査完了したものであり、RAM13に記憶されているバーパターンテーブル60を用いて、スタック型二次元コードのデコードが実行される(ステップS881)。そして、スタック型コードデコード処理が終了する。ステップS881のデコードは、スタック型二次元コードの一般的なデコードであり、その説明を省略する。
【0102】
次いで、図18を参照して、ステップS875のバーパターン走査処理を説明する。先ず、変数xに検出開始位置SX+(sinR)*Eが代入され、変数yに検出開始位置SY−(cosR)*Eが代入される(ステップS8751)。そして、画像の座標(x,y)から、ステップS4(ステップS48)で設定された走査方向に走査され、一次元データが取得される(ステップS8752)。
【0103】
そして、ステップS8752で取得された一次元データについて、バーパターンが検出され、バーパターンが検出されたか否かが判別される(ステップS8753)。バーパターンが検出されない場合(ステップS8753;NO)、バーパターンが未検出であるとして、バーパターン走査処理が終了する。
【0104】
バーパターンが検出された場合(ステップS8753;YES)、ステップS8753で検出されたバーパターンが、RAM13に記憶されているバーパターンテーブル60の全てのバーパターン62と照合される(ステップS8754)。そして、ステップS8754のバーパターン照合において、一致するバーパターンがあるか否かが判別される(ステップS8755)。
【0105】
一致するバーパターンがある場合(ステップS8755;YES)、ステップS8753で検出されたバーパターンが、前回以前に検出されたものであり、バーパターン走査処理が終了する。
【0106】
一致するバーパターンがない場合(ステップS8755;NO)、ステップS8754で新たなバーパターンが検出されたものであり、現在の係数Eと、ステップS8755で検出されたバーパターンとが、RAM13に記憶されているバーパターンテーブル60の係数E61とバーパターン62とのレコードとして追加される(ステップS8756)。そして、バーパターン走査処理が終了する。
【0107】
ここで、図20を参照して、スタック型コードデコード処理における検出開始位置の移動の一例を説明する。図20に示すように、イメージセンサ16により撮影された画像データの画像において、arctan(H/W)<R<(180度−arctan(H/W))である場合を考える。
【0108】
先ず、係数Eが0とされ、走査開始位置(X,Y)を検出開始位置(SX,SY)として、検出開始位置(SX,SY)から画像中のスタック型二次元コードが走査される。そして、係数Eが1インクリメントされて、検出開始位置が右方向に移動され走査されて一次元バーパターンが検出されることが、スタック型二次元コードの右端まで繰り返される。そして、係数Eが0に戻され、係数Eが1デクリメントされて、検出開始位置が右方向に移動され走査されて一次元バーパターンが検出されることが、スタック型二次元コードの左端まで繰り返される。
【0109】
以上、本実施の形態によれば、第1の実施の形態と同様に、スタック型二次元コードの読み取り操作性を高めることができるとともに、スタック型二次元コードの画像解析の処理負担を低減できる。また、走査開始位置を移動してスタック型二次元コードを適切に検出してデコードできる。また、スタック型二次元コードのデコードが成功するまでの走査回数を低減できる。また、ユーザがスタック型二次元コードのデコードの結果を目視により容易に確認できる。
【0110】
さらに、CPU11は、算出した走査開始位置をスタック型二次元コードの一次元バーパターンの検出開始位置に設定し、イメージセンサ16により撮影された画像データの画像に対してデコードを行う。そして、CPU11は、当該検出開始位置をスタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、スタック型二次元コードの全ての一次元バーパターンについて行う。このため、スタック型二次元コードの全ての一次元バーパターンの検出を適切に行うことができ、スタック型二次元コードを適切にデコードできる。
【0111】
以上の説明では、本発明に係るプログラムのコンピュータ読み取り可能な媒体としてROM15を使用した例を開示したが、この例に限定されない。
その他のコンピュータ読み取り可能な媒体として、フラッシュメモリ17等の不揮発性メモリ、CD−ROM等の可搬型記録媒体を適用することが可能である。
また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウエーブ(搬送波)も本発明に適用される。
【0112】
なお、上記実施の形態における記述は、本発明に係るシンボル読取装置及びプログラムの一例であり、これに限定されるものではない。
【0113】
例えば、上記第2の実施の形態では、バーパターン走査処理のステップS8754〜S8756において、検出したバーパターンとバーパターンテーブル60のバーパターンとを照合し、異なる新たなバーパターンのみをバーパターンテーブル60に追加登録する構成としたが、これに限定されるものではない。一般的に普及しているほとんどのスタック型二次元コードの読み取りについては、上記第2の実施の形態の方法で問題ない。しかし、一部の二次元コードにおいては、上記第2の実施の形態の方法では問題が生じる可能性がある。具体的には、例えば図14の最下段の二次元コードには、1個の二次元コード内に2個以上の同じ一次元バーパターンが含まれる可能性がある。そのような場合に、バーパターン走査処理において、検出されたバーパターンは、バーパターンテーブル60の全てのバーパターンと照合されるのではなく、直前のバーパターンのみと照合されればよい。
【0114】
また、上記各実施の形態では、ハンディターミナル1が、バーコードのデコードを失敗した場合に走査開始位置を画像の辺上で移動させていき、移動先が辺の一方の端を超えた場合に、デコードを終了する構成としたが、これに限定するものではない。例えば、ハンディターミナル1が、バーコードのデコードを失敗した場合に走査開始位置を画像の辺上で移動させていき、移動先が辺の一方の端を超えた場合に、引き続きもう一方の端の方向へ走査開始位置を移動させていき、移動先が辺のもう一方の端を超えた場合に、デコードを終了する構成としてもよい。
【0115】
また、上記各実施の形態では、ハンディターミナル1が、成功するまでデコードを繰り返し、デコードを成功した場合にデコードが成功した旨のデコード結果を表示部14に表示する構成としたが、これに限定されるものではない。例えば、ハンディターミナル1が、成功するまでデコードを所定回数繰り返し、デコードを成功した場合にデコードが成功した旨のデコード結果を表示部14に表示し、デコードを所定回数失敗した場合に、デコードが失敗した旨のデコード結果を表示部14に表示する構成としてもよい。
【0116】
また、上記各実施の形態では、一次元バーコード又はスタック型二次元コードは、一次元バーパターンの長手方向(一次元バーパターンの各バーを横切る方向)が重力方向に対して垂直な方向になるよう配置されているものとしたが、これに限定されるものではない。一次元バーコード又はスタック型二次元コードは、一次元バーパターンの長手方向が、重力方向に対して所定角度になるよう配置される構成としてもよい。この構成においても、走査方向は、一次元バーパターンのバーを横切る方向にとられる。
【0117】
また、上記各実施の形態では、シンボル読取装置としてハンディターミナルを用いる構成としたが、これに限定されるものではない。シンボル読取装置としては、携帯電話機、PHS(Personal Handyphone System)、PDA(Personal Digital Assistant)等、他のシンボル読取機能を有する装置を用いることとしてもよい。
【0118】
また、上記各実施の形態におけるハンディターミナル1の各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
【符号の説明】
【0119】
1 ハンディターミナル
11 CPU
12 操作部
13 RAM
14 表示部
15 ROM
16 イメージセンサ
17 フラッシュメモリ
18 傾きセンサ
19 I/F部
20 電源部
21 バス
【技術分野】
【0001】
本発明は、シンボル読取装置及びプログラムに関する。
【背景技術】
【0002】
従来、商品等に付されたシンボル(バーコード)を読み取るシンボル読取装置(バーコード読取装置(スキャナ))が知られている。バーコード読取装置を含む機器としては、スーパーマーケット、コンビニエンスストア、個人商店、倉庫等において使用され、バーコード読取機能を有するハンディターミナル等の機器が知られている。
【0003】
バーコード読取装置は、レーザスキャナと、イメージセンサを用いたスキャナと、がある。レーザスキャナは、バーコード(一次元バーコード)に向けて各バーを横切るようにレーザ光を照射し、そのレーザ光の反射光を受光して光電変換し、得られた電気信号をデコードエンジン(デコーダ)で解析することにより、バーコードに含まれるバーコード情報を取得する。また、イメージセンサを用いたスキャナは、CCD(Charge-Coupled Device)やCMOS(Complementary Metal-Oxide Semiconductor)等のイメージセンサを備える。イメージセンサを用いたスキャナ(CCD/CMOSスキャナ)は、イメージセンサで一次元バーコード又は二次元コードを撮影し、撮影画像データを画像解析することにより、バーコード情報を取得する。
【0004】
レーザスキャナや、一次元CCD/CMOSスキャナでは、レーザ光の受光センサ又はイメージセンサの画像データから得られる解析対象のデータが一次元データである。このため、レーザスキャナ又は一次元CCD/CMOSスキャナは、解析対象のデータの情報量が少なく、CPU(Central Processing Unit)等の装置のスペックが低くても、高速にデコード処理等の処理を行うことができるというメリットがあった。
【0005】
二次元CCD/CMOSスキャナ(イメージスキャナ)は、イメージセンサから得られる解析対象のデータが二次元データ(画像データ)である。イメージスキャナは、読み取り方向を二次元コードの向きに合せなくてもよいというメリットがあった。
【0006】
また、レーザ光による読取部とジャイロセンサとを備え、当該ジャイロセンサにより検出された移動状態に基づいて、読取部から得られたバーコードイメージデータを、基準位置からのバーコードイメージデータに補正し、補正されたバーコードイメージデータを合成してデコードするレーザスキャナが知られている(例えば、特許文献1参照)。
【0007】
また、レーザ光による読取部とジャイロセンサとを備え、当該ジャイロセンサにより検出された移動状態に基づいて、読取部の移動量を算出し、当該読取部の移動の前後のバーコードデータを合成してデコードするレーザスキャナが知られている(例えば、特許文献2参照)。
【先行技術文献】
【特許文献】
【0008】
【特許文献1】特開2008−242828号公報
【特許文献2】特開2008−242829号公報
【発明の概要】
【発明が解決しようとする課題】
【0009】
しかし、従来のレーザスキャナ又は一次元CCD/CMOSスキャナでは、読み取り方向を一次元バーコードの向きに合せなくてはならなかった。多くのレーザスキャナ又は一次元CCD/CMOSスキャナからは、レーザ光やエイマー光が照射される。操作者は、これらの光が一次元バーコードの端から端までを含むように、装置を持つ方向を調整せねばならなかった。このため、装置の操作性を高める要請があった。
【0010】
また、従来のイメージスキャナでは、一次元バーコードを読み取る場合に、二次元の画像データから一次元バーコードのイメージを抽出し、読み取り方向等の判定を行っていた。このため、実用的な読み取りスピードを確保するために、イメージスキャナを搭載する機器に、高いスペックのCPUやメモリを搭載しなければならなかった。また、低スペックな機器に搭載可能なスキャナとして、デコードエンジンを専用のハードウェアに組み込んだイメージスキャナも登場しているが、非常に高価であった。
【0011】
本発明の課題は、シンボルの読み取りにおける操作性を高めるとともに、シンボルの画像解析の処理負担を低減することである。
【課題を解決するための手段】
【0012】
上記課題を解決するために、請求項1に記載の発明のシンボル読取装置は、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサと、
前記重力方向に対する自装置の傾きを検出する傾きセンサと、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備える。
【0013】
請求項2に記載の発明は、請求項1に記載のシンボル読取装置において、
前記制御部は、最初の走査において前記画像の中心を通る走査開始位置及び走査方向を算出する。
【0014】
請求項3に記載の発明は、請求項1又は2に記載のシンボル読取装置において、
前記制御部は、前記取得された画像データの画像に対して、前記算出した走査開始位置から前記走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行う。
【0015】
請求項4に記載の発明は、請求項1又は2に記載のシンボル読取装置において、
前記シンボルは、複数の一次元バーパターンを有するスタック型二次元コードであり、
前記制御部は、前記算出した走査開始位置を前記スタック型二次元コードの一次元バーパターンの検出開始位置に設定し、前記取得された画像データの画像に対して、前記算出した検出開始位置から前記走査方向へ走査してデコードを行うとともに、当該検出開始位置を前記スタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、前記スタック型二次元コードの全一次元バーパターンについて行う。
【0016】
請求項5に記載の発明は、請求項1から4のいずれか一項に記載のシンボル読取装置において、
表示部を備え、
前記制御部は、前記シンボルのデコードの結果を前記表示部に表示する。
【0017】
請求項6に記載の発明のプログラムは、
コンピュータを、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサ、
前記重力方向に対する自装置の傾きを検出する傾きセンサ、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部、
として機能させる。
【発明の効果】
【0018】
本発明によれば、シンボルの読み取りにおける操作性を高めることができるとともに、シンボルの画像解析の処理負担を低減できる。
【図面の簡単な説明】
【0019】
【図1】本発明に係る第1の実施の形態のハンディターミナルの外観構成を示す斜視図である。
【図2】ハンディターミナルによる一次元バーコードの読み取りを示す図である。
【図3】ハンディターミナルの機能構成を示すブロック図である。
【図4】傾きセンサが検出する傾きを示す図である。
【図5】イメージセンサが撮影した画像データの画像を示す。
【図6】シンボルスキャン処理を示すフローチャートである。
【図7】シンボルスキャン処理における走査方向・走査開始位置決定処理を示すフローチャートである。
【図8】シンボルスキャン処理における第1のデコード処理を示すフローチャートである。
【図9】|R|≦arctan(H/W)の場合の画像データの画像を示す図である。
【図10】arctan(H/W)<R<(180度−arctan(H/W))の場合の画像データの画像を示す図である。
【図11】−(180度−arctan(H/W))<R<−arctan(H/W)場合の画像データの画像を示す図である。
【図12】|R|≧arctan(H/W)の場合の画像データの画像を示す図である。
【図13】一次元バーコードを撮影した画像データの画像における走査開始位置の移動の一例を示す図である。
【図14】スタック型二次元コードの例を示す図である。
【図15】バーパターンテーブルの構成を示す図である。
【図16】第2のデコード処理を示すフローチャートである。
【図17】第2のデコード処理におけるスタック型コードデコード処理を示すフローチャートである。
【図18】第2のデコード処理におけるスタック型コードデコード処理を示すフローチャートである。
【図19】スタック型二次元コードを撮影した画像データの画像における走査開始位置の移動の一例を示す図である。
【図20】スタック型二次元コードにおける検出開始位置の移動の一例を示す図である。
【発明を実施するための形態】
【0020】
以下、添付図面を参照して本発明に係る第1、第2の実施の形態を順に詳細に説明する。なお、本発明は、図示例に限定されるものではない。
【0021】
(第1の実施の形態)
図1〜図13を参照して、本発明に係る第1の実施の形態を説明する。本実施の形態は、シンボルとして、1つの一次元バーパターンからなる一次元バーコードを読み取る構成である。先ず、図1〜図3を参照して、本実施の形態の装置構成を説明する。図1に、本実施の形態のハンディターミナル1の外観構成を示す。図2に、ハンディターミナル1によるバーコード5Bの読み取りを示す。
【0022】
本実施の形態のハンディターミナル1は、コンビニエンスストア、スーパーマーケット等の小売業の店舗等において使用され、商品等に付されたバーコードを読み取る機能を有する携帯端末である。
【0023】
図1に示すように、本実施の形態のハンディターミナル1は、ケース2と、トリガキー12Aと、各種キー12Bと、表示部14と、イメージセンサ16と、を備える。
【0024】
ケース2は、ハンディターミナル1の本体ケースであり、(略)直方体の形状を有する。ケース2の正面の長方形を正面2Aとする。正面2Aの長方形の短手方向に平行な所定の軸を(横)軸aとし、同じく長手方向に平行な所定の軸を(縦)軸bとする。
【0025】
トリガキー12Aは、ケース2の正面2Aに設けられ、イメージセンサ16によるバーコードのスキャン実行のためのトリガキーである。各種キー12Bは、ケース2の正面2Aに設けられ、文字、数字等の入力キーや、各種機能キー等を含む。表示部14は、各種表示情報を表示する。
【0026】
イメージセンサ16は、ケース2の縦軸b方向の先端側の側面に設けられ、バーコードを撮影して画像データ(イメージデータ)を取得するセンサである。イメージセンサ16の画像撮影の方向は、縦軸bの正方向であるものとする。
【0027】
図2に示すように、商品棚3に商品4A,4Bが陳列されている店舗においてハンディターミナル1を使用する例を説明する。一次元バーコードであるバーコード5A,5Bは、それぞれ、商品4A,4Bに対応する。商品棚3には、商品4A,4Bが陳列されている場所に対応して、バーコード5A,5Bが貼り付けられている。そして、バーコード5A,5Bは、一次元バーパターンの長手方向(延在方向、一次元バーパターンの各バーを横切る方向)が重力方向に対して垂直な方向(水平面上の一方向)になるよう配置されて、商品棚3に貼り付けられている。
【0028】
ハンディターミナル1によりバーコード5Bを読み取る場合に、ハンディターミナル1は、横軸aがバーコード5Bの平面に平行にされ、縦軸bがバーコード5Bの平面に垂直にされた姿勢にされる。この姿勢で、トリガキー12Aがユーザにより押下されることで、イメージセンサ16によりバーコード5Bが撮影される。
【0029】
次いで、図3を参照して、ハンディターミナル1の内部の機能構成を説明する。図3に、ハンディターミナル1の機能構成を示す。
【0030】
ハンディターミナル1は、制御部としてのCPU11と、操作部12と、RAM(Random Access Memory)13と、表示部14と、ROM(Read Only Memory)15と、イメージセンサ16と、フラッシュメモリ17と、傾きセンサ18と、I/F(InterFace)部19と、電源部20と、を備え、各部がバス21を介して接続されている。
【0031】
CPU11は、ハンディターミナル1の各部を制御する。CPU11は、ROM15に記憶されているシステムプログラム及びアプリケーションプログラムのうち、指定されたプログラムを読み出してRAM13に展開し、RAM13に展開されたプログラムとの協働で、各種処理を実行する。
【0032】
CPU11は、シンボルスキャンプログラム151に従い、イメージセンサ16により、一次元バーパターンを有するシンボルとしての一次元バーコードを撮影して画像データを取得する。そして、CPU11は、傾きセンサ18により検出されたハンディターミナル1の傾きデータに基づいて、一次元バーコードの走査方向及び走査開始位置を算出する。そして、CPU11は、イメージセンサ16により取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られたバーパターンをデコードする。
【0033】
操作部12は、トリガキー12A、各種キー12Bを含むキーパッドを備える。操作部12は、キーパッドの各キーの操作入力を受け付け、操作入力に応じた操作情報をCPU11に出力する。
【0034】
RAM13は、情報を一時的に記憶する揮発性のメモリである。RAM13は、各種データ及びプログラムを格納するワークエリアを有する。RAM13には、イメージセンサ16から入力された画像データが格納される。
【0035】
表示部14は、LCD(Liquid Crystal Display)、ELD(Electro-Luminescent Display)等により構成される。表示部14は、CPU11から入力される表示情報に応じて各種表示を行う。
【0036】
ROM15は、読み出し専用の情報を記憶しているメモリである。ROM15には、シンボルスキャンプログラム151が記憶されている。
【0037】
イメージセンサ16は、シンボルを読み取るスキャナ部として、CCD、CMOS等の撮像素子で構成されている。イメージセンサ16は、CPU11の制御に従い、被写体としてのシンボルを撮影して画像データ(二次元データ)を生成し、その画像データをRAM13に出力する。
【0038】
また、イメージセンサ16は、エイマー光出射部を備える。イメージセンサ16は、シンボル撮影の際に、エイマー光出射部からエイマー光を出射する。エイマー光は、ユーザに対して、シンボルの読み取り可能な範囲を示す照準光である。
【0039】
フラッシュメモリ17は、情報を読み書き自在に記憶する半導体メモリである。
【0040】
傾きセンサ18は、三次元加速度センサ等により構成される。傾きセンサ18は、重力方向を検出し、この重力方向に対するハンディターミナル1(ケース2)の傾きを検出し、検出した傾きの傾きデータをCPU11に出力する。
【0041】
I/F部19は、所定機器と接続可能であり、接続された機器との通信を仲介する接続部である。I/F部19は、例えば、ハンディターミナル1が載置されるクレードルに接続され、このクレードルを介して管理サーバ等の機器に通信接続される。
【0042】
電源部20は、ハンディターミナル1の各部に電源を供給する電源である。電源部20は、例えば、リチウム電池等の二次電池である。
【0043】
ここで、図4を参照して、傾きセンサ18の検出する傾きを説明する。図4に、傾きセンサ18が検出する傾きを示す。
【0044】
図4に示すように、傾きセンサ18は、重力方向に対するハンディターミナル1のケース2の傾きを検出する機能を有する。また、正面2Aを鉛直上方向に向けた状態におけるハンディターミナル1の姿勢を基本姿勢とする。傾きセンサ18が出力する基本姿勢の傾きデータは、横軸aを中心とした周方向に0度回転し、縦軸bを中心とした周方向に0度回転したデータとする。他の姿勢の傾きデータは、基本姿勢から横軸a,縦軸bをそれぞれ中心として回転した角度の差のデータとして表される。
【0045】
傾きデータの横軸aを中心とした周方向の角度の値の範囲は、−180度(正面2Aを重力方向に向けた姿勢(下回転))〜0度(基本姿勢)〜+180度(正面2Aを重力方向に向けた姿勢(上回転))である。但し、−180度は、+180度に含められる。縦軸bは、例えば、イメージセンサ16の撮影画像の中心点に対応する位置にとられる。
【0046】
傾きデータの縦軸bを中心とした周方向の角度の値の範囲は、−180度(正面2Aを重力方向に向けた姿勢(右回転))〜0度(基本姿勢)〜+180度(正面2Aを重力方向に向けた姿勢(左回転))である。但し、縦軸bを中心とした周方向の角度を回転角度R[度](R:変数)とすると、−180[度]<R≦180[度]である。
【0047】
ハンディターミナル1は、ユーザにより、横軸aを中心として回転されず、縦軸bの正方向が常にシンボル(一次元バーコード)の平面を向き、縦軸bを中心とした周方向に回転されるものとする。このため、傾きセンサ18が出力する傾きデータのうち、傾きデータの横軸aを中心とした周方向の角度の値のみが、一次元バーコードの読み取りに使用される。
【0048】
また、図5を参照して、イメージセンサ16の撮影する画像データを説明する。図5に、イメージセンサ16が撮影した画像データの画像F0を示す。
【0049】
図5に示すように、イメージセンサ16が撮影する画像データの画像F0は、横Wピクセル、縦Hピクセル(W,H;正の整数)のグレースケールビットマップデータとする。この画像F0は、例えば、W=640、H=480のVGA(Video Graphics Array)のサイズであるものとするが、このサイズに限定されるものではない。また、画像F0の横方向(Wピクセル)は、横軸aの方向に対応している。画像F0の縦方向(Hピクセル)は、横軸a及び縦軸bに垂直な方向に対応している。さらに、撮影対象の一次元バーコードは、その長手方向(延在方向)が重力方向に垂直な方向になるように、商品、商品棚等に付されているものとする。
【0050】
図5には、正面2Aの縦軸bの周方向の回転角度がR度となるように、ハンディターミナル1が傾けられた姿勢が示されている。このハンディターミナル1の姿勢において、イメージセンサ16により一次元バーコードが撮影され、画像F0の画像データが得られる。
【0051】
次に、図6〜図13を参照して、ハンディターミナル1の動作を説明する。図6に、シンボルスキャン処理を示す。図7に、シンボルスキャン処理における走査方向・走査開始位置決定処理を示す。図8に、シンボルスキャン処理における第1のデコード処理を示す。図9に、|R|≦arctan(H/W)の場合の画像データの画像F1を示す。図10に、arctan(H/W)<R<(180度−arctan(H/W))の場合の画像データの画像F2を示す。図11に、−(180度−arctan(H/W))<R<−arctan(H/W)の場合の画像データの画像F3を示す。図12に、|R|≧arctan(H/W)の場合の画像データの画像F4を示す。図13に、一次元バーコードを撮影した画像データの画像F5における走査開始位置の移動の一例を示す。
【0052】
先ず、図6を参照して、シンボルスキャン処理を説明する。シンボルスキャン処理は、ハンディターミナル1が、シンボルとしての一次元バーコードを撮影し、撮影時の傾きデータを用いて、撮影した画像データをデコードする処理である。
【0053】
予め、操作部12を介するユーザからの操作入力に応じて、ハンディターミナル1がシンボルスキャンモードに設定されているものとする。シンボルスキャンモードは、イメージセンサ16からエイマー光が出射され、トリガキー12Aの押下に応じてシンボル読み取りを開始するモードである。そして、読取対象のシンボルとしての一次元バーコードに照準が合せられるよう、ハンディターミナル1がユーザにより動かされているものとする。
【0054】
ハンディターミナル1において、例えば、ユーザからトリガキー12Aの押下入力がなされたことをトリガとして、ROM15から読み出されて適宜RAM13に展開されたシンボルスキャンプログラム151と、CPU11との協働により、シンボルスキャン処理が実行される。
【0055】
先ず、イメージセンサ16によりシンボルとしての一次元バーコードが撮影されて画像データが取得される(ステップS1)。そして、ステップS1で取得された画像データがRAM13に格納される(ステップS2)。そして、傾きセンサ18により、ハンディターミナル1の傾きが検出され、その検出されたデータが傾きデータとして取得される(ステップS3)。
【0056】
そして、走査方向・走査開始位置決定処理が実行される(ステップS4)。ステップS4の走査方向・走査開始位置決定処理は、一次元バーコードを走査するために必要な走査方向及び走査開始位置を決定する処理であり、詳細に後述される。そして、第1のデコード処理が実行される(ステップS5)。ステップS5の第1のデコード処理は、一次元バーコードの走査及びデコードをする処理であり、詳細に後述される。
【0057】
そして、ステップS5の第1のデコード処理のデコードが成功したか否かが判別される(ステップS6)。デコードが成功していない場合(ステップS6;NO)、ステップS1に移行される。デコードが成功した場合(ステップS6;YES)、ステップS5のデコード処理のデコード結果が表示部14に表示される(ステップS7)。そして、シンボルスキャン処理が終了する。デコード結果とは、デコード成功の旨と、デコードにより得られたバーコード情報と、である。
【0058】
ここで、図7、図9〜図12を参照して、ステップS4の走査方向・走査開始位置決定処理を説明する。図7に示すように、先ず、変数Wに、ステップS1で取得された画像データの横幅のピクセル数が代入され、変数Hに、ステップS1で取得された画像データの縦幅のピクセル数が代入される(ステップS41)。
【0059】
そして、ステップS3で取得された傾きデータに基づいて、変数Rに、ハンディターミナル1の縦軸bを中心とした横回転の角度の値[度]が代入される(ステップS42)。そして、変数Rについて、|R|≦arctan(H/W)を満たすか否かが判別される(ステップS43)。但し、0<arctan(H/W)<90度とする。
【0060】
変数Rが|R|≦arctan(H/W)を満たす場合(ステップS43;YES)、変数Xに0が代入され、変数Yに、H/2+W*(tan(−R))/2の値が代入される(ステップS44)。変数Rが|R|≦arctan(H/W)を満たさない場合(ステップS43;NO)、変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たすか否かが判別される(ステップS45)。
【0061】
変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たす場合(ステップS45;YES)、変数Xに、W/2+H/(2*tan(−R))の値が代入され、変数Yに0が代入される(ステップS46)。変数Rがarctan(H/W)<R<(180度−arctan(H/W))を満たさない場合(ステップS45;NO)、変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たすか否かが判別される(ステップS47)。
【0062】
変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たす場合(ステップS47;YES)、変数Xに、W/2+H/(2*tanR)の値が代入され、変数YにHの値が代入される(ステップS48)。変数Rが−(180度−arctan(H/W))<R<−arctan(H/W)を満たさない場合(ステップS47;NO)、変数Rが|R|≧(180度−arctan(H/W))を満たし、変数XにWの値が代入され、変数Xに、H/2+W*(tanR)/2の値が代入される(ステップS49)。
【0063】
そして、走査開始位置が、ステップS44、S46、S48又はS49で設定されたX,Yを用いた座標(X,Y)に設定され、走査方向が、−R度に設定される(ステップS50)。そして、走査方向・走査開始位置決定処理が終了する。
【0064】
走査開始位置の座標(X,Y)は、撮影された画像データの画像の左上の端点を原点(0,0)とした平面座標である。走査開始位置とは、画像中の最初のデコード対象のラインの走査開始位置である。走査方向とは、画像中のデコード対象のラインの走査方向である。
【0065】
図9に示すように、|R|≦arctan(H/W)を満たす回転角度Rで撮影された画像データの画像F1において、ステップS44に対応する走査開始位置の座標(X,Y)は、画像F1の左辺上の点となる。画像F1において、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F1の中心座標(W/2,H/2)を通る。
【0066】
図10に示すように、arctan(H/W)<R<(180度−arctan(H/W))を満たす回転角度Rで撮影された画像データの画像F2において、ステップS46に対応する走査開始位置の座標(X,Y)は、画像F2の上辺上の点となる。画像F2においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F2の中心座標(W/2,H/2)を通る。
【0067】
図11に示すように、−(180度−arctan(H/W))<R<−arctan(H/W)を満たす回転角度Rで撮影された画像データの画像F3において、ステップS48に対応する走査開始位置の座標(X,Y)が画像F3の上辺の一点となる。画像F3においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F3の中心座標(W/2,H/2)を通る。
【0068】
図12に示すように、|R|≧(180度−arctan(H/W))を満たす回転角度Rで撮影された画像データの画像F4において、ステップS49に対応する走査開始位置の座標(X,Y)が画像F4の上辺の一点となる。画像F4においても、座標(X,Y)からステップS50における走査方向(−R)に走査すると、走査上の点が画像F4の中心座標(W/2,H/2)を通る。
【0069】
ここで、図8及び図13を参照して、ステップS5の第1のデコード処理を説明する。図8に示すように、先ず、変数xに、ステップS4で設定された走査開始位置Xが代入され、変数yに、ステップS4(ステップS50)で設定された走査開始位置Yが代入される(ステップS51)。変数x,yは、画像の二次元座標の変数である。
【0070】
そして、変数Nに0が代入される(ステップS52)。変数Nは、走査実行回数の変数である。そして、画像の座標(x,y)から、ステップS4(ステップS50)で設定された走査方向に走査され、一次元データ(一次元バーパターンのデータ)が取得される(ステップS53)。そして、ステップS53で走査された一次元データがデコードされる(ステップS54)。ステップS54のデコードは、一次元バーコードの一般的なデコードであり、その説明を省略する。
【0071】
そして、ステップS54のデコード結果から、一次元バーコードが検出されたか否かが判別される(ステップS55)。一次元バーコードが検出された場合(ステップS55;YES)、デコードが成功しており、第1のデコード処理が終了する。一次元バーコードが検出されていない場合(ステップS55;NO)、変数Nが1インクリメントされ、変数Dに、(−1)N*N*2が代入される(ステップS56)。変数Dは、走査開始位置の移動幅の変数である。
【0072】
そして、回転角度Rが|R|≦arctan(H/W)を満たすか否かが判別される(ステップS57)。回転角度Rが|R|≦arctan(H/W)を満たす場合(ステップS57;YES)、図9に対応し、変数yに、y+Dが代入される(ステップS58)。そして、変数y<0又はy>Hであるか否かが判別される(ステップS59)。変数y<0又はy>Hである場合(ステップS59;YES)、デコードが失敗しており、デコード処理が終了する。変数y<0又はy>Hでない場合(ステップS59;NO)、ステップS53に移行される。
【0073】
回転角度Rが|R|≦arctan(H/W)を満たさない場合(ステップS57;NO)、回転角度Rが|R|≧(180度−arctan(H/W))を満たすか否かが判別される(ステップS60)。回転角度Rが|R|≧(180度−arctan(H/W))を満たす場合(ステップS60;YES)、ステップS58に移行される。回転角度Rが|R|≧(180度−arctan(H/W))を満たさない場合(ステップS60;NO)、変数Rが、arctan(H/W)<R<(180度−arctan(H/W))、又は−(180度−arctan(H/W))<R<−arctan(H/W)を満たし、図10又は図11に対応し、変数xに、x+Dが代入される(ステップS61)。
【0074】
そして、変数x<0又はx>Wであるか否かが判別される(ステップS62)。変数x<0又はx>Wである場合(ステップS62;YES)、デコードが失敗しており、第1のデコード処理が終了する。変数x<0又はx>Wでない場合(ステップS62;NO)、ステップS53に移行される。
【0075】
ここで、図13を参照して、デコード処理における走査開始位置の移動の一例を説明する。図13に示すように、イメージセンサ16により撮影された画像データの画像F5(arctan(H/W)<R<(180度−arctan(H/W)))を考える。
【0076】
デコード処理において、ステップS51により最初の走査開始位置が点P1の座標(X,0)にとられて、走査方向に走査されデコードされる。この走査は、座標(W/2,H/2)を通る。
【0077】
そして、点P1に対応するデコードが失敗すると、ステップS61により走査開始位置が点P2の座標(X−2,0)にとられて、走査されデコードされる。点P2に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P2と反対側の点P3の座標(X+4,0)にとられて、走査されデコードされる。そして、点P3に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P3と反対側の点P4の座標(X−6,0)にとられて、走査されデコードされる。
【0078】
そして、点P4に対応するデコードが失敗すると、ステップS61により走査開始位置が、点P1を中心として点P4と反対側の点P5の座標(X+8,0)にとられて、走査されデコードされる。このように、走査毎に走査開始位置が移動され、デコードが成功するか、走査開始位置が画像から出るまで続けられる。
【0079】
以上、本実施の形態によれば、ハンディターミナル1のCPU11は、イメージセンサ16により重力方向に垂直な方向(水平方向)に配置された一次元バーコードを撮影して画像データを取得し、傾きセンサ18によりハンディターミナル1の傾きデータを検出して取得する。そして、CPU11は、傾きセンサ18により検出されたハンディターミナル1の傾きデータに基づいて、一次元バーコードの一次元バーパターンを横切る走査の走査方向及び走査開始位置を算出する。そして、CPU11は、撮影された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする。このため、ユーザが手首を回転してハンディターミナル1の角度を変更することなく一次元バーコードを読み取ることができるので、一次元バーコードの読み取り操作性を高めることができる。また、傾きデータから一次元バーコードの読み取りに必要な走査開始位置及び走査方向を算出するので、画像解析により走査開始位置及び走査方向を算出せずともよく、一次元バーコードの画像解析の処理負担を低減できる。
【0080】
また、CPU11は、最初の走査において、イメージセンサ16により撮影された画像データの画像の中心を通る走査開始位置及び走査方向を算出する。というのは、一次元バーコードは、画像の中心を含む位置に存在する確率が高いからである。このため、一次元バーコードのデコードが成功するまでの走査回数を低減できる。ここで、イメージセンサ16から出射されるエイマー光が、読み取り画像範囲の中心に照準を有するものとする。そうすれば、ユーザが意識して一次元バーコードに中心の照準を合わせる。このため、一次元バーコードに中心の照準が合うように一次元バーコードが撮影されるので、一次元バーコードのデコードが成功するまでの走査回数をさらに低減できる。
【0081】
また、CPU11は、イメージセンサ16により撮影された画像データの画像に対して、算出した走査開始位置から走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行うことを、デコードが成功するまで繰り返す。このため、走査開始位置を移動して一次元バーコードを適切に検出してデコードできる。
【0082】
また、CPU11は、一次元バーコードのデコードの結果を表示部14に表示する。このため、ユーザが一次元バーコードのデコードの結果を目視により容易に確認できる。
【0083】
(第2の実施の形態)
図14〜図20を参照して、本発明に係る第2の実施の形態を説明する。図14に、スタック型二次元コードの例を示す。
【0084】
第1の実施の形態では、ハンディターミナル1が、シンボルとして一次元バーコードを読み取った。本実施の形態では、ハンディターミナル1が、シンボルとして図14に示すようなスタック型二次元コードを読み取る。スタック型二次元コードは、一次元パーコードのような一次元パーパターンが多段に積み重ねられた構造を有する。このため、スタック型二次元コードについては、各一次元パーパターンを走査してデコードする必要がある。また、読取対象のスタック型二次元コードは、各一次元パーパターンの長手方向(延在方向、各一次元パーパターンのバーを横切る方向)が重力方向に対して垂直な方向(水平面上の一方向)になるよう配置されているものとする。
【0085】
本実施の形態の装置構成として、第1の実施の形態と同様のハンディターミナル1を用いる。このため、ハンディターミナル1について、第1の実施の形態と共通な部分の説明を省略し、異なる部分を主として説明する。
【0086】
ROM15には、第1のデコード処理に代えて、第2のデコード処理を実行するシンボルスキャンプログラム151が記憶されている。
【0087】
次に、図15を参照して、本実施の形態のシンボルスキャン処理においてRAM13に記憶される情報を説明する。図15に、バーパターンテーブル60の構成を示す。
【0088】
バーパターンテーブル60は、走査により検出したスタック型二次元コードの各一次元バーパターンを格納するテーブルである。バーパターンテーブル60は、係数E61と、バーパターン62と、の項目を有する。
【0089】
係数E61は、スタック型二次元コードの各一次元バーパターンに対応する係数Eである。係数Eとは、イメージセンサ16により撮影された画像データの画像の複数の走査において、各一次元バーパターンを検出するための検出開始位置を表すための数値である。係数Eは、例えば、最初の走査の検出開始位置に対応する値を0として、値が正の方向に大きくなるにつれて、画像中において検出開始位置が最初の検出開始位置から右側に離れていくものとする。同様に係数Eは、値が負の方向に大きくなるにつれて、画像中において検出開始位置が最初の検出開始位置から左側に離れていくものとする。
【0090】
バーパターン62は、係数E61に対応する走査における黒のバー及び白のバー(スペース)の幅の数値のパターンである。バーパターン62には、黒のバー及び白のスペースの幅の値が、黒1、白1、黒2、白2…の項目として格納される。黒1、白1等の項目自体の数値は、検出開始位置からの走査順に対応して昇順に付与されている。
【0091】
次に、図16〜図20を参照して、本実施の形態におけるハンディターミナル1の動作を示す。図16に、第2のデコード処理を示す。図17に、第2のデコード処理におけるスタック型コードデコード処理を示す。図18に、第2のデコード処理におけるスタック型コードデコード処理を示す。図19に、スタック型二次元コードを撮影した画像データの画像F6における走査開始位置の移動の一例を示す。図20に、スタック型二次元コードにおける検出開始位置の移動の一例を示す。
【0092】
ハンディターミナル1において、第1の実施の形態と同様に、ユーザからトリガキー12Aの押下入力がなされたことをトリガとして、ROM15から読み出されて適宜RAM13に展開されたシンボルスキャンプログラム151と、CPU11との協働により、シンボルスキャン処理が実行される。但し、本実施の形態のシンボルスキャン処理は、図6のステップS5として、第1のデコード処理に代えて第2のデコード処理を含む。このため、第2のデコード処理を説明する。
【0093】
図16に示すように、第2のデコード処理におけるステップS81〜S84、S88〜S94は、それぞれ順に、第1のデコード処理におけるステップS51〜S54、S56〜S62と同様の処理のステップである。
【0094】
ステップS84の実行後、ステップS84のデコード結果から、一次元バーパターンが検出されたか否かが判別される(ステップS85)。一次元バーパターンが検出されていない場合(ステップS85;NO)、ステップS88に移行される。
【0095】
一次元バーパターンが検出された場合(ステップS85;YES)、デコードが成功しており、検出開始位置の座標(SX,SY)に、座標(x,y)が代入される(ステップS86)。検出開始位置とは、二次元コードの多段の一次元バーパターンそれぞれ検出するための走査開始位置である。そして、スタック型コードデコード処理が実行される(ステップS87)。そして、第2のデコード処理が終了する。
【0096】
第2のデコードにおいて、図19に示すように、イメージセンサ16により撮影された画像データの画像F6(arctan(H/W)<R<(180度−arctan(H/W)))を考える。この場合、図13と同様にして、走査開始位置が、順に、点Q1:座標(X,0)、点Q2:座標(X−2,0)、点Q3:座標(X+4,0)、点Q4:座標(X−6,0)、点Q5:座標(X+8,0)と移動する。
【0097】
ここで、図17を参照して、ステップS87のスタック型コードデコード処理を説明する。先ず、各項目の値がクリアされているバーパターンテーブル60が作成されてRAM13に記憶され、又はRAM13に記憶されているバーパターンテーブル60の各数値がクリアされる(ステップS871)。そして、ステップS84,S85で検出された一次元バーパターンがRAM13内のバーパターンテーブル60のバーパターン62に格納される(ステップS872)。
【0098】
そして、係数Eに0が代入され、ステップS872で格納されたバーパターン62に対応して係数E61に係数E=0が格納される(ステップS873)。そして、係数Eに、(E+1)が代入される(ステップS874)。ステップS874は、検出開始位置を走査方向に垂直な一方の方向に移動することに対応する。そして、バーパターン走査処理が実行される(ステップS875)。バーパターン走査処理は、係数Eに対応して、検出開始位置から走査方向にスタック型二次元コードの走査を行う処理であり、詳細に後述される。
【0099】
そして、ステップS875における走査結果についてバーパターンが検出されたか否かが判別される(ステップS876)。バーパターンが検出された場合(ステップS876;YES)、ステップS874に移行される。バーパターンが検出されていない場合(ステップS876;NO)、検出開始位置がスタック型二次元コードの一方の端まで走査完了したものであり、係数Eに0が代入される(ステップS878)。
【0100】
そして、係数Eに、(E−1)が代入される(ステップS878)。ステップS878は、検出開始位置を走査方向に垂直なもう一方の方向(ステップS874の方向と反対方向)に移動することに対応する。そして、バーパターン走査処理が実行される(ステップS879)。そして、ステップS879における走査結果についてバーパターンが検出されたか否かが判別される(ステップS880)。バーパターンが検出された場合(ステップS880;YES)、ステップS878に移行される。
【0101】
バーパターンが検出されていない場合(ステップS880;NO)、検出開始位置がスタック型二次元コードのもう一方の端まで走査完了したものであり、RAM13に記憶されているバーパターンテーブル60を用いて、スタック型二次元コードのデコードが実行される(ステップS881)。そして、スタック型コードデコード処理が終了する。ステップS881のデコードは、スタック型二次元コードの一般的なデコードであり、その説明を省略する。
【0102】
次いで、図18を参照して、ステップS875のバーパターン走査処理を説明する。先ず、変数xに検出開始位置SX+(sinR)*Eが代入され、変数yに検出開始位置SY−(cosR)*Eが代入される(ステップS8751)。そして、画像の座標(x,y)から、ステップS4(ステップS48)で設定された走査方向に走査され、一次元データが取得される(ステップS8752)。
【0103】
そして、ステップS8752で取得された一次元データについて、バーパターンが検出され、バーパターンが検出されたか否かが判別される(ステップS8753)。バーパターンが検出されない場合(ステップS8753;NO)、バーパターンが未検出であるとして、バーパターン走査処理が終了する。
【0104】
バーパターンが検出された場合(ステップS8753;YES)、ステップS8753で検出されたバーパターンが、RAM13に記憶されているバーパターンテーブル60の全てのバーパターン62と照合される(ステップS8754)。そして、ステップS8754のバーパターン照合において、一致するバーパターンがあるか否かが判別される(ステップS8755)。
【0105】
一致するバーパターンがある場合(ステップS8755;YES)、ステップS8753で検出されたバーパターンが、前回以前に検出されたものであり、バーパターン走査処理が終了する。
【0106】
一致するバーパターンがない場合(ステップS8755;NO)、ステップS8754で新たなバーパターンが検出されたものであり、現在の係数Eと、ステップS8755で検出されたバーパターンとが、RAM13に記憶されているバーパターンテーブル60の係数E61とバーパターン62とのレコードとして追加される(ステップS8756)。そして、バーパターン走査処理が終了する。
【0107】
ここで、図20を参照して、スタック型コードデコード処理における検出開始位置の移動の一例を説明する。図20に示すように、イメージセンサ16により撮影された画像データの画像において、arctan(H/W)<R<(180度−arctan(H/W))である場合を考える。
【0108】
先ず、係数Eが0とされ、走査開始位置(X,Y)を検出開始位置(SX,SY)として、検出開始位置(SX,SY)から画像中のスタック型二次元コードが走査される。そして、係数Eが1インクリメントされて、検出開始位置が右方向に移動され走査されて一次元バーパターンが検出されることが、スタック型二次元コードの右端まで繰り返される。そして、係数Eが0に戻され、係数Eが1デクリメントされて、検出開始位置が右方向に移動され走査されて一次元バーパターンが検出されることが、スタック型二次元コードの左端まで繰り返される。
【0109】
以上、本実施の形態によれば、第1の実施の形態と同様に、スタック型二次元コードの読み取り操作性を高めることができるとともに、スタック型二次元コードの画像解析の処理負担を低減できる。また、走査開始位置を移動してスタック型二次元コードを適切に検出してデコードできる。また、スタック型二次元コードのデコードが成功するまでの走査回数を低減できる。また、ユーザがスタック型二次元コードのデコードの結果を目視により容易に確認できる。
【0110】
さらに、CPU11は、算出した走査開始位置をスタック型二次元コードの一次元バーパターンの検出開始位置に設定し、イメージセンサ16により撮影された画像データの画像に対してデコードを行う。そして、CPU11は、当該検出開始位置をスタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、スタック型二次元コードの全ての一次元バーパターンについて行う。このため、スタック型二次元コードの全ての一次元バーパターンの検出を適切に行うことができ、スタック型二次元コードを適切にデコードできる。
【0111】
以上の説明では、本発明に係るプログラムのコンピュータ読み取り可能な媒体としてROM15を使用した例を開示したが、この例に限定されない。
その他のコンピュータ読み取り可能な媒体として、フラッシュメモリ17等の不揮発性メモリ、CD−ROM等の可搬型記録媒体を適用することが可能である。
また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウエーブ(搬送波)も本発明に適用される。
【0112】
なお、上記実施の形態における記述は、本発明に係るシンボル読取装置及びプログラムの一例であり、これに限定されるものではない。
【0113】
例えば、上記第2の実施の形態では、バーパターン走査処理のステップS8754〜S8756において、検出したバーパターンとバーパターンテーブル60のバーパターンとを照合し、異なる新たなバーパターンのみをバーパターンテーブル60に追加登録する構成としたが、これに限定されるものではない。一般的に普及しているほとんどのスタック型二次元コードの読み取りについては、上記第2の実施の形態の方法で問題ない。しかし、一部の二次元コードにおいては、上記第2の実施の形態の方法では問題が生じる可能性がある。具体的には、例えば図14の最下段の二次元コードには、1個の二次元コード内に2個以上の同じ一次元バーパターンが含まれる可能性がある。そのような場合に、バーパターン走査処理において、検出されたバーパターンは、バーパターンテーブル60の全てのバーパターンと照合されるのではなく、直前のバーパターンのみと照合されればよい。
【0114】
また、上記各実施の形態では、ハンディターミナル1が、バーコードのデコードを失敗した場合に走査開始位置を画像の辺上で移動させていき、移動先が辺の一方の端を超えた場合に、デコードを終了する構成としたが、これに限定するものではない。例えば、ハンディターミナル1が、バーコードのデコードを失敗した場合に走査開始位置を画像の辺上で移動させていき、移動先が辺の一方の端を超えた場合に、引き続きもう一方の端の方向へ走査開始位置を移動させていき、移動先が辺のもう一方の端を超えた場合に、デコードを終了する構成としてもよい。
【0115】
また、上記各実施の形態では、ハンディターミナル1が、成功するまでデコードを繰り返し、デコードを成功した場合にデコードが成功した旨のデコード結果を表示部14に表示する構成としたが、これに限定されるものではない。例えば、ハンディターミナル1が、成功するまでデコードを所定回数繰り返し、デコードを成功した場合にデコードが成功した旨のデコード結果を表示部14に表示し、デコードを所定回数失敗した場合に、デコードが失敗した旨のデコード結果を表示部14に表示する構成としてもよい。
【0116】
また、上記各実施の形態では、一次元バーコード又はスタック型二次元コードは、一次元バーパターンの長手方向(一次元バーパターンの各バーを横切る方向)が重力方向に対して垂直な方向になるよう配置されているものとしたが、これに限定されるものではない。一次元バーコード又はスタック型二次元コードは、一次元バーパターンの長手方向が、重力方向に対して所定角度になるよう配置される構成としてもよい。この構成においても、走査方向は、一次元バーパターンのバーを横切る方向にとられる。
【0117】
また、上記各実施の形態では、シンボル読取装置としてハンディターミナルを用いる構成としたが、これに限定されるものではない。シンボル読取装置としては、携帯電話機、PHS(Personal Handyphone System)、PDA(Personal Digital Assistant)等、他のシンボル読取機能を有する装置を用いることとしてもよい。
【0118】
また、上記各実施の形態におけるハンディターミナル1の各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
【符号の説明】
【0119】
1 ハンディターミナル
11 CPU
12 操作部
13 RAM
14 表示部
15 ROM
16 イメージセンサ
17 フラッシュメモリ
18 傾きセンサ
19 I/F部
20 電源部
21 バス
【特許請求の範囲】
【請求項1】
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサと、
前記重力方向に対する自装置の傾きを検出する傾きセンサと、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備えるシンボル読取装置。
【請求項2】
前記制御部は、最初の走査において前記画像の中心を通る走査開始位置及び走査方向を算出する請求項1に記載のシンボル読取装置。
【請求項3】
前記制御部は、前記取得された画像データの画像に対して、前記算出した走査開始位置から前記走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行う請求項1又は2に記載のシンボル読取装置。
【請求項4】
前記シンボルは、複数の一次元バーパターンを有するスタック型二次元コードであり、
前記制御部は、前記算出した走査開始位置を前記スタック型二次元コードの一次元バーパターンの検出開始位置に設定し、前記取得された画像データの画像に対して、前記算出した検出開始位置から前記走査方向へ走査してデコードを行うとともに、当該検出開始位置を前記スタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、前記スタック型二次元コードの全一次元バーパターンについて行う請求項1又は2に記載のシンボル読取装置。
【請求項5】
表示部を備え、
前記制御部は、前記シンボルのデコードの結果を前記表示部に表示する請求項1から4のいずれか一項に記載のシンボル読取装置。
【請求項6】
コンピュータを、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサ、
前記重力方向に対する自装置の傾きを検出する傾きセンサ、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部、
として機能させるためのプログラム。
【請求項1】
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサと、
前記重力方向に対する自装置の傾きを検出する傾きセンサと、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部と、を備えるシンボル読取装置。
【請求項2】
前記制御部は、最初の走査において前記画像の中心を通る走査開始位置及び走査方向を算出する請求項1に記載のシンボル読取装置。
【請求項3】
前記制御部は、前記取得された画像データの画像に対して、前記算出した走査開始位置から前記走査方向へ走査してデコードを行い、当該デコードが成功したか否かを判別し、当該デコードが失敗した場合に、走査開始位置を前記画像内で移動するよう変更し、当該変更した走査開始位置から前記走査方向へ走査してデコードを行う請求項1又は2に記載のシンボル読取装置。
【請求項4】
前記シンボルは、複数の一次元バーパターンを有するスタック型二次元コードであり、
前記制御部は、前記算出した走査開始位置を前記スタック型二次元コードの一次元バーパターンの検出開始位置に設定し、前記取得された画像データの画像に対して、前記算出した検出開始位置から前記走査方向へ走査してデコードを行うとともに、当該検出開始位置を前記スタック型二次元コードの別の一次元バーパターンを走査する位置に移動し、前記画像に対して前記移動した検出開始位置から前記走査方向へ走査してデコードを行うことを、前記スタック型二次元コードの全一次元バーパターンについて行う請求項1又は2に記載のシンボル読取装置。
【請求項5】
表示部を備え、
前記制御部は、前記シンボルのデコードの結果を前記表示部に表示する請求項1から4のいずれか一項に記載のシンボル読取装置。
【請求項6】
コンピュータを、
一次元バーパターンを有するシンボルであって、重力方向に対して所定の角度で配置されたシンボルを撮影して画像データを取得するイメージセンサ、
前記重力方向に対する自装置の傾きを検出する傾きセンサ、
前記傾きセンサにより検出された自装置の傾きに基づいて、前記シンボルの一次元バーパターンの各バーを横切る走査の走査方向及び走査開始位置を算出し、前記イメージセンサにより取得された画像データの画像に対して、前記算出した走査開始位置から前記算出した走査方向へ走査を行い、当該走査により得られた一次元バーパターンをデコードする制御部、
として機能させるためのプログラム。
【図1】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【図2】
【図3】
【図4】
【図5】
【図6】
【図7】
【図8】
【図9】
【図10】
【図11】
【図12】
【図13】
【図14】
【図15】
【図16】
【図17】
【図18】
【図19】
【図20】
【公開番号】特開2011−22623(P2011−22623A)
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願番号】特願2009−164320(P2009−164320)
【出願日】平成21年7月13日(2009.7.13)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
【公開日】平成23年2月3日(2011.2.3)
【国際特許分類】
【出願日】平成21年7月13日(2009.7.13)
【出願人】(000001443)カシオ計算機株式会社 (8,748)
【Fターム(参考)】
[ Back to top ]