以下、添付図面を参照して本発明に係る第1及び第2の実施の形態を順に詳細に説明する。なお、本発明は、図示例に限定されるものではない。
(第1の実施の形態)
図1〜図9を参照して、本実施の形態に係る第1の実施の形態を説明する。先ず、図1及び図2を参照して、本実施の形態の装置構成を説明する。図1に、本実施の形態のスキャナ装置10の構成を示す。図2に、スキャナ部18の構成を示す。
図1に示すように、本実施の形態のスキャナ装置10は、読み取り対象物であるシンボルとしての1次元のバーコードを読み取り管理するハンディターミナルである。スキャナ装置10は、例えば、倉庫や、小売店の店舗で使用される。バーコードは、例えば、倉庫や店舗等に並べられた商品に付されているものとする。
スキャナ装置10は、判別部、デコード部としてのCPU(Central Processing Unit)11と、操作部12と、RAM(Random Access Memory)13と、表示部14と、ROM(Read Only Memory)15と、無線通信部16と、フラッシュメモリ17と、スキャナ部18と、報知部19と、電源部20と、を備える。電源部20を除くスキャナ装置10の各部は、バス21を介して互いに接続されている。
CPU11は、スキャナ装置10の各部を制御する。CPU11は、各種プログラムのうち指定されたプログラムをROM15から読み出してRAM13に展開し、展開されたプログラムとの協働で各種処理を実行する。
CPU11は、第1のスキャンプログラム151に従い、スキャナ部18からバーコードまでの読み取り距離が近距離か否かを判別し、前記読み取り距離が近距離であると判別された場合に、前記バーコードのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くし、且つデコード結果の照合回数を少なく設定する。また、CPU11は、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし、且つ前記照合回数を多く設定する。そして、CPU11は、前記設定に応じて前記イメージデータのデコードを行う。
操作部12は、文字入力キー等の各種キーからなるキー群を備え、ユーザからの各キーの押下入力に応じた操作情報をCPU11に出力する。操作部12は、少なくとも、スキャナ部18を用いたバーコードスキャンのトリガキーを有する。
RAM13は、揮発性の半導体メモリであり、各種データ及び各種プログラムを格納するワークエリアを有する。
表示部14は、LCD(Liquid Crystal Display)、EL(ElectroLuminescent)ディスプレイ等の表示パネルを備える表示部であり、CPU11から入力される表示情報に応じて表示パネルに各種表示を行う。
ROM15は、各種データ及び各種プログラムを記憶する読み出し専用の半導体メモリである。ROM15には、スキャンプログラム151が記憶されている。
無線通信部16は、携帯電話通信方式の無線通信部である。無線通信部16は、アンテナ、変調部、復調部、信号処理部等を備え、基地局と無線通信を行う。無線通信部16は、送信する情報の信号を、信号処理部で信号処理し、変調部により変調してアンテナから無線電波として基地局に送信する。この基地局は、通信先の機器と通信ネットワークを介して接続されている。また、無線通信部16は、アンテナにより基地局から受信した無線電波の受信信号を復調部により復調し、信号処理部で信号処理して受信情報を得る。このようにして、無線通信部16は、基地局を介して、通信先の機器と通信を行う。また、無線通信部16は、無線LAN(Local Area Network)方式の無線通信部とし、アクセスポイントを介して、通信先の機器と通信を行うこととしてもよい。
フラッシュメモリ17は、情報を読み出し及び書き込み可能に記憶する不揮発性の半導体メモリである。
スキャナ部18は、CPU11の制御信号に従い、一次元のバーコードをスキャンして、バーコードのイメージデータを取得し、そのイメージデータをCPU11に出力するレーザスキャナ部である。図2に示すように、スキャナ部18は、発光部181と、バイブレーションミラー182と、受光部183と、ゲイン回路184と、二値化回路185と、を備える。
発光部181は、レーザ光Lを発光して出射する。バイブレーションミラー182は、CPU11の制御信号に従い、モータ(図示略)等によりバイブレートされることにより、発光部181から出射されたレーザ光Lを反射して左右に広げる。受光部183は、バイブレーションミラー182により反射されたレーザ光Lが実際に読み取り対象物(バーコード)に当たった反射光を受光して電気信号に変換するモジュールである。
ゲイン回路184は、受光部183で受光した反射光の電気信号を増幅して波形を最適化する。二値化回路185は、ゲイン回路184で最適化された電気信号をバーコードのイメージデータとしての二値データに変換してCPU11に出力する。CPU11は、二値化回路185から入力されたイメージデータをデコードする。
報知部19は、CPU11の制御に応じて、ブザー音を出力する報知部である。報知部19は、バーコードスキャンが成功した場合に、ブザー音出力するよう制御される。
電源部20は、リチウム電池等の二次電池であり、スキャナ装置10の各部に電源供給を行う。電源部20は、アルカリ電池等の一次電池としてもよい。
次に、図3〜図9を参照して、スキャナ装置10の動作を説明する。図3に、第1のスキャン処理を示す。図4に、図3の続きの第1のスキャン処理を示す。図5に、第1のスキャン処理のバーコード開始位置解析処理を示す。図6に、第1のスキャン処理のバーコード終了位置解析処理を示す。図7に、第1のスキャン処理の最小エレメント幅解析処理を示す。図8に、第1のスキャン処理のデコード処理を示す。図9に、デコード処理の4値化処理を示す。
スキャナ装置10で実行される第1のスキャン処理は、読み取り対象のバーコードをスキャンして情報を読み取る処理である。予め、ユーザにより、スキャナ部18のレーザ光の出射方向に、読み取り対象のバーコードが合わせられるように、スキャナ装置10の位置及び姿勢が調整される。より具体的には、スキャナ部18のレーザ光の振れ幅の方向が、バーコードの長手方向に合わせられる。
ここでは、バーコードに含まれる各キャラクタが6本のエレメント(3本の黒バー及び3本の白スペース)で構成される規格であるCode128のバーコードを読み取る例を説明する。しかし、これに限定されるものではなく、バーコードに含まれる各キャラクタがCode128以外の6本のエレメントからなる規格や、各キャラクタが6以外の本数のエレメントからなる規格のバーコードを読み取る構成としてもよい。
スキャナ装置10において、ユーザにより操作部12のバーコードスキャンのトリガボタンが押下されたことをトリガとして、CPU11は、ROM15から読み出されて適宜RAM13に展開された第1のスキャンプログラム151との協働で、第1のスキャン処理を実行する。CPU11は、第1のスキャン処理の開始とともに、タイマのカウントを開始する。
図3及び図4に示すように、先ず、CPU11は、タイマのカウント値に応じて、スキャン処理開始から予め設定された所定時間を経過してタイムアウトしたか否かを判別する(ステップS11)。この所定時間は、スキャン処理を終了するためのタイムアウトの時間である。タイムアウトした場合(ステップS11;YES)、第1のスキャン処理が終了する。
タイムアウトしていない場合(ステップS11;NO)、CPU11は、スキャナ部18からバーコードのイメージデータの取得を完了する(ステップS12)。イメージデータは、バーコードのイメージの左から右へ並んだ黒バー及び白スペースの各データ幅の配列Dat[0],Dat[1],Dat[2]…を有するものとする。例えば、バーコードの左横の白スペースのデータ幅が配列Dat[0]となり、バーコードの最も左の黒バーのデータ幅が配列Dat[1]となる。
そして、CPU11は、ステップS12で取得したバーコードのイメージデータについて、バーコード開始位置解析処理を行う(ステップS13)。ここで、図5を参照して、ステップS13のバーコード開始位置解析処理の説明を行う。先ず、CPU11は、イメージデータのバーコード開始位置(バーコードの左端の黒バー位置)の変数Pos1に1を設定する(ステップS41)。
そして、CPU11は、変数Pos1+1がイメージデータの全エレメントの本数DatNumより小さいか否かを判別する(ステップS42)。ステップS42では、変数Pos1+1がイメージデータのバーコードの右端を超えておらず正常か、同じく超えており異常かが判別されている。
Pos1+1<DatNumである場合(ステップS42;YES)、正常であり、CPU11は、配列Dat[Pos1+1]×10が配列Dat[Pos1−1]より小さいか否かを判別する(ステップS43)。ステップS43では、配列Dat[Pos1+1]の10倍の値が、これと同じ色で左隣の配列Dat[Pos1−1]より小さく、その同じ色で左隣の配列Dat[Pos1−1]がイメージデータのバーコードの左隣の大きな白スペース部分であるか否かが判別されている。
Dat[Pos1+1]×10≧Dat[Pos1−1]である場合(ステップS42;NO)、配列Dat[Pos1−1]が大きな白スペース部分でなく、CPU11は、変数Pos1を1インクリメントし(ステップS44)、ステップS42に移行される。
Dat[Pos1+1]×10<Dat[Pos1−1]である場合(ステップS43;YES)、配列Dat[Pos1−1]が大きな白スペース部分であり、CPU11は、バーコード開始位置を取得した旨を設定し(ステップS45)、バーコード開始位置解析処理を終了する。
Pos1+1≧DatNumである場合(ステップS42;NO)、異常であり、CPU11は、バーコード開始位置を未取得の旨を設定し(ステップS46)、バーコード開始位置解析処理を終了する。
そして、図3に戻り、CPU11は、ステップS13の取得結果に応じてバーコード開始位置Pos1の取得を成功したか否かを判別する(ステップS14)。バーコード開始位置Pos1の取得を失敗した場合(ステップS14;NO)、ステップS11に移行される。
バーコード開始位置Pos1の取得を成功した場合(ステップS14;YES)、CPU11は、バーコード終了位置解析処理を実行する(ステップS15)。ここで、図6を参照して、ステップS15のバーコード終了位置解析処理の説明を行う。先ず、CPU11は、イメージデータのバーコード終了位置(バーコードの右端の黒バー位置)の変数Pos2にバーコード開始位置Pos1+2を設定する(ステップS51)。Pos1+2は、バーコード開始位置の黒バーの右隣の黒バーの位置となる。
そして、CPU11は、変数Pos2+1が本数DatNumより小さいか否かを判別する(ステップS52)。ステップS52では、変数Pos2+1がイメージデータのバーコードの右端を超えておらず正常か、同じく超えており異常かが判別されている。
Pos2+1<DatNumである場合(ステップS52;YES)、正常であり、CPU11は、配列Dat[Pos2−1]×10が配列Dat[Pos2+1]より小さいか否かを判別する(ステップS53)。ステップS53では、配列Dat[Pos2−1]の10倍の値が、これと同じ色で右隣の配列Dat[Pos2+1]より小さく、その同じ色で右隣の配列Dat[Pos2+1]がイメージデータのバーコードの右隣の大きな白スペース部分であるか否かが判別されている。
Dat[Pos2−1]×10≧Dat[Pos2+1]である場合(ステップS53;NO)、配列Dat[Pos2+1]が大きな白スペース部分でなく、CPU11は、変数Pos2を2インクリメントし(ステップS54)、ステップS52に移行される。
Dat[Pos2−1]×10<Dat[Pos2+1]である場合(ステップS53;YES)、配列Dat[Pos2+1]が大きな白スペース部分であり、CPU11は、バーコード終了位置を取得した旨を設定し(ステップS55)、バーコード終了位置解析処理を終了する。
Pos2+1≧DatNumである場合(ステップS52;NO)、異常であり、CPU11は、バーコード終了位置を未取得の旨を設定し(ステップS56)、バーコード終了位置解析処理を終了する。
そして、図3に戻り、CPU11は、ステップS15の取得結果に応じてバーコード終了位置Pos2の取得を成功したか否かを判別する(ステップS16)。バーコード終了位置Pos2の取得を失敗した場合(ステップS16;NO)、ステップS11に移行される。
バーコード終了位置Pos2の取得を成功した場合(ステップS16;YES)、CPU11は、最小エレメント幅解析処理を実行する(ステップS17)。ここで、図7を参照して、ステップS17の最小エレメント幅解析処理の説明を行う。先ず、CPU11は、エレメント位置の変数sにバーコード開始位置Pos1を代入する(ステップS61)。そして、CPU11は、最小エレメント幅の変数Minに配列Dat[s]を代入する(ステップS62)。
そして、CPU11は、変数sがバーコード終了位置Pos2以下であるか否かを判別する(ステップS63)。s≦Pos2である場合(ステップS63;YES)、CPU11は、配列Dat[s]が変数Min以下であるか否かを判別する(ステップS64)。
Dat[s]≦Minである場合(ステップS64;YES)、CPU11は、変数Minに配列Dat[s]を代入する(ステップS65)。そして、CPU11は、変数sを1インクリメントし(ステップS66)、ステップS63に移行される。Dat[s]>Minである場合(ステップS64;NO)、ステップS66に移行される。
s>Pos2である場合(ステップS63;NO)、最小エレメント幅解析処理を終了する。
そして、図3に戻り、CPU11は、最小エレメント幅Minが予め設定された基準値より小さいか否かを判別する(ステップS18)。ステップS18の基準値は、スキャナ部18によるバーコードの読み取り距離が遠距離か近距離かを判別するための基準値であり、第1のスキャンプログラムに含まれるか、ROM15に記憶されている。
最小エレメント幅Min<基準値である場合(ステップS18;YES)、CPU11は、変数Tに0.25を代入し、照合を実施する回数の変数Cに3を代入する(ステップS19)。変数Tは、バーの比率誤差について、どこまで許容するのかを表すパラメータであり、変数Tが小さいほど誤差を許容して解析を行う。最小エレメント幅Min≧基準値である場合(ステップS18;NO)、CPU11は、変数Tに0を代入し、変数Cに1を代入する(ステップS20)。
そして、CPU11は、ループ回数の変数iに0を代入してクリアする(ステップS21)。そして、CPU11は、デコード処理を実行する(ステップS22)。ここで、図8を参照して、ステップS22のデコード処理を説明する。
先ず、CPU11は、変数Posにバーコード開始位置Pos1を代入する(ステップS71)。そして、CPU11は、変数Pos+6の値が本数DatNumより小さいか否かを判別する(ステップS72)。ステップS16で加算する6は、バーコードの1キャラクタ分の黒バー及び白スペースの数である。
Pos+6<DatNumである場合(ステップS72;YES)、CPU11は、4値化処理を実行する(ステップS73)。ここで、図9を参照して、ステップS73の4値化処理を説明する。
Code128の規格において、黒バー及び白スペースのデータ幅は、4種類の値(太さ)が設定されている。4値化処理は、1キャラクタ分のイメージデータにおいて、閾値及び変数Tを用いて、3本の各黒バー及び3本の各白スペースのデータ幅を4種類の値のいずれであるかを判定する処理である。但し、黒バー及び白スペースのデータ幅が4種類であるバーコードの規格に限定されるものではない。
図9に示すように、先ず、CPU11は、配列Dat[Pos],Dat[Pos+1],Dat[Pos+2],Dat[Pos+3],Dat[Pos+4],Dat[Pos+5]を加算して、1キャラクタ分のイメージデータのデータ幅の変数Charを算出する(ステップS81)。
先ず、CPU11は、変数Charを11で除算した値を変数Mとして設定する(ステップS82)。Code128の規格において、1キャラクタ分のイメージデータのデータ幅は、11値で一定である。ステップS82では、1キャラクタ分の変数Charを11(値)で除算することにより、1値に対応するイメージデータのデータ幅を変数Mとして算出している。
そして、CPU11は、変数Mを0.5倍した値を変数B05として設定し、変数Mを1.5倍した値を変数B15として設定し、変数Mを2.5倍した値を変数B25として設定し、変数Mを3.5倍した値を変数B35として設定し、変数Mを4.5倍した値を変数B45として設定する(ステップS83)。変数B05,B15,B25,B35,B45は、順に、1値の0.5、1.5、2.5、3.5、4.5倍に対応するイメージデータのデータ幅の変数である。4値化処理において、変数B05,B15,B25,B35,B45は、黒バー及び白スペースのデータ幅を判定する(4値化する)ための閾値として使用される。
そして、CPU11は、ループカウンタjに変数Posを設定する(ステップS84)。そして、CPU11は、ループカウンタjが変数Pos+6よりも小さいか否かを判別する(ステップS85)。j<Pos+6である場合(ステップS85;YES)、CPU11は、配列Dat[j]が変数B15よりも小さいか否かを判別する(ステップS86)。
Dat[j]<B15である場合(ステップS86;YES)、CPU11は、ループカウンタjに対応する黒バー又は白スペースのデータ幅の4値の配列R[j]に1を設定する(ステップS87)。そして、CPU11は、配列Dat[j]から変数B05を減算した値を変数W1として設定し、変数B15から配列Dat[j]を減算した値を変数W2として設定する(ステップS88)。変数W1は、配列Dat[j]と、配列Dat[j]の左側の閾値(変数B05,B15,B25又はB35)と、の間の距離の変数である。変数W2は、配列Dat[j]の右側の閾値(変数B15,B25,B35又はB45)と、配列Dat[j]と、の間の距離の変数である。
Dat[j]≧B15である場合(ステップS86;NO)、CPU11は、配列Dat[j]が変数B25よりも小さいか否かを判別する(ステップS89)。Dat[j]<B25である場合(ステップS89;YES)、CPU11は、配列R[j]に2を設定する(ステップS90)。そして、CPU11は、配列Dat[j]から変数B15を減算した値を変数W1として設定し、変数B25から配列Dat[j]を減算した値を変数W2として設定する(ステップS91)。
Dat[j]≧B25である場合(ステップS89;NO)、CPU11は、配列Dat[j]が変数B35よりも小さいか否かを判別する(ステップS92)。Dat[j]<B35である場合(ステップS92;YES)、CPU11は、配列R[j]に3を設定する(ステップS93)。そして、CPU11は、配列Dat[j]から変数B25を減算した値を変数W1として設定し、変数B35から配列Dat[j]を減算した値を変数W2として設定する(ステップS94)。
Dat[j]≧B35である場合(ステップS92;NO)、CPU11は、配列R[j]に4を設定する(ステップS95)。そして、CPU11は、配列Dat[j]から変数B35を減算した値を変数W1として設定し、変数B45から配列Dat[j]を減算した値を変数W2として設定する(ステップS96)。
ステップS88,S91,S94,S96の実行後、CPU11は、変数W1が、変数Mに変数Tを乗算した値よりも小さいか否かを判別する(ステップS97)。W1≧M×Tである場合(ステップS97;NO)、比率誤差が許容範囲内にあり、CPU11は、変数W2が、変数Mに変数Tを乗算した値よりも小さいか否かを判別する(ステップS98)。
W2≧M×Tである場合(ステップS98;NO)、比率誤差が許容範囲内にあり、CPU11は、ループカウンタjを1インクリメントし(ステップS99)、ステップS85に移行される。W1<M×Tである場合(ステップS97;YES)、CPU11は、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が失敗した旨を設定し(ステップS100)、4値化処理を終了する。W2<M×Tである場合(ステップS98;YES)、ステップS100に移行される。
変数W1,W2が小さい場合、1値と2値との差や、2値と3値との差等、本来異なるレベルとなるべきデータ幅の差異が小さく、比率があいまいになり、誤読の危険性が高くなるため、ステップS100で4値化が失敗した旨が設定されている。
j≧Pos+6である場合(ステップS85;NO)、CPU11は、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が成功した旨を設定し(ステップS101)、4値化処理を終了する。
図8に戻り、CPU11は、ステップS73(ステップS100,S101)の4値化処理の結果に応じて、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が成功したか否かを判別する(ステップS74)。4値化が成功した場合(ステップS74;YES)、CPU11は、ステップS73の4値化処理で得られたキャラクタの配列R[j]をキャラクタコードに変換する(ステップS75)。そして、CPU11は、ステップS75で変換したキャラクタコードが、バーコードの右端を示すストップコードであるか否かを判別する(ステップS76)。
ストップコードでない場合(ステップS76;NO)、CPU11は、変数Posを6インクリメントし(ステップS77)、ステップS74に移行される。ストップコードである場合(ステップS76;YES)、CPU11は、イメージデータのデコードが成功した旨を設定し(ステップS78)、デコード処理を終了する。
Pos+6≧DatNumである場合(ステップS72;NO)、イメージデータのデコードが失敗した旨を設定し(ステップS79)、デコード処理を終了する。4値化が失敗した場合(ステップS74;NO)、ステップS79に移行される。なお、ストップコードである場合(ステップS76;YES)、CPU11は、ステップS75で変換されたキャラクタコードを用いてチェックデジット等のチェック処理を行い、そのチェック結果に応じて、最終的にデコードが成功したか否かを判別し、デコードが成功した場合にステップS78に移行され、デコードが失敗した場合にステップS79に移行されることとしてもよい。
そして、図4に戻り、CPU11は、ステップS22でデコードが成功したか否かを判別する(ステップS23)。デコードが失敗した場合(ステップS23;NO)、ステップS30に移行される。デコードが成功した場合(ステップS23;YES)、CPU11は、変数iが0より大きいか否かを判別する(ステップS24)。
0<iである場合(ステップS24;YES)、CPU11は、RAM13に記憶されている前のデコード結果と最新のデコード結果との照合を実施する(ステップS25)。0≧iである場合(ステップS24;NO)、照合元のデコード結果がなく、CPU11は、ステップS22で得られたデコード結果を照合元としてRAM13に記憶する(ステップS26)。
そして、CPU11は、ステップS25の照合が一致したか否かを判別する(ステップS27)。照合が一致していない場合(ステップS27;NO)、ステップS11に移行される。照合が一致した場合(ステップS27;YES)、CPU11は、変数iが変数C+1よりも小さいか否かを判別する(ステップS29)。i<C+1である場合(ステップS29;YES)、CPU11は、スキャナ部18から次のイメージデータが入力されるのを待ち、入力された次のイメージデータを取得する(ステップS30)、ステップS22に移行される。
i≧C+1である場合(ステップS29;NO)、CPU11は、ステップS23で得られたキャラクタコードを含むデコード結果を表示部14に表示し、報知部19にブザー音を出力させ(ステップS31)、第1のスキャン処理を終了する。ステップS31において、デコード結果は、例えば、フラッシュメモリ17に記憶される。
以上、本実施の形態によれば、スキャナ装置10のCPU11は、スキャナ部18からバーコードまでの読み取り距離が近距離か否かを判別し、前記読み取り距離が近距離であると判別された場合に、前記バーコードのエレメント幅を判定するための閾値(変数B05,B15,B25,B35,B45)に対するイメージデータの誤差の許容度を高くし(変数Tを小さくし)、且つデコード結果の照合回数(変数C)を少なく設定する。また、CPU11は、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし(変数Tを大きくし)、且つ前記照合回数(変数C)を多く設定する。そして、CPU11は、前記設定に応じて前記イメージデータのデコードを行う。
このため、スキャナ装置10は、シンボルの読み取り距離が近距離である場合に、読み取りレスポンスを向上し、シンボルの読み取り距離が遠距離である場合に、デコードの正確性を向上するので、シンボルの読み取り距離に応じて、読み取りレスポンス及びデコードの正確性を適切にできる。
また、スキャナ装置10は、前記イメージデータの最小エレメント幅が基準値以上の場合に、前記読み取り距離が近距離であると判定し、前記イメージデータの最小エレメント幅が基準値よりも小さい場合に、前記読み取り距離が遠距離であると判定する。このため、読み取り距離を測定する部品を設けないので、スキャナ装置10の構成を簡単にすることができる。
(第2の実施の形態)
図10及び図11を参照して、本発明に係る第2の実施の形態を説明する。図10に、本実施の形態のスキャナ装置10Aの機能構成を示す。図11に、第2のスキャン処理を示す。
図10に示すスキャナ装置10Aは、スキャナ装置10の各部に加えて、測距部22を備える。スキャナ装置10と共通する部分は、同じ符号を付し、その説明を省略する。
測距部22は、赤外線を出射してスキャン対象物(バーコード)からの反射光を受光することにより、スキャナ装置10A(スキャナ部18)からバーコードまでの読み取り距離を測定し、その読み取り距離情報をCPU11に出力する。
また、ROM15には、第1のスキャンプログラム151に代えて第2のスキャンプログラム152が記憶されているものとする。
次に、図11を参照して、スキャナ装置10Aの動作を説明する。スキャナ装置10Aにおいて、ユーザにより操作部12のバーコードスキャンのトリガボタンが押下されたことをトリガとして、CPU11は、ROM15から読み出されて適宜RAM13に展開された第2のスキャンプログラム152との協働で、第2のスキャン処理を実行する。CPU11は、第2のスキャン処理の開始とともに、タイマのカウントを開始する。
図11に示すように、ステップS111,S112は、図3及び図4の第1のスキャン処理のステップS11,S12と同様である。そして、CPU11は、測距部22によりバーコードまでの読み取り距離dを測定する(ステップS113)。そして、CPU11は、読み取り距離dが基準値より大きいか否かを判別する(ステップS114)。ステップS114の基準値は、読み取り距離dが近距離か遠距離かを判別するための基準値であり、第2のスキャンプログラムに含まれるか、ROM15に記憶されている。
d>基準値である場合(ステップS114;YES)、ステップS115に移行される。d≦基準値である場合(ステップS114;NO)、ステップS116に移行される。ステップS115〜S127は、図3及び図4の第1のスキャン処理のステップS19〜S31と同様である。
以上、本実施の形態によれば、スキャナ装置10AのCPU11は、スキャナ装置10と同様に、バーコードの読み取り距離に応じて、読み取りレスポンス及びデコードの正確性を適切にできる。また、スキャナ装置10Aは、測距部22により測定された読み取り距離が基準値以下の場合に、前記読み取り距離が近距離であると判別し、前記測定された読み取り距離が基準値よりも大きい場合に、前記読み取り距離が遠距離であると判別する。このため、イメージデータにおける読み取り距離に対応するエレメント幅の解析を行わず、読み取り距離を容易に得ることができる。
以上の説明では、本発明に係るプログラムのコンピュータ読み取り可能な媒体としてROM15を使用した例を開示したが、この例に限定されない。
その他のコンピュータ読み取り可能な媒体として、フラッシュメモリ等の不揮発性メモリ、CD−ROM等の可搬型記録媒体を適用することが可能である。
また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウエーブ(搬送波)も本発明に適用される。
なお、上記実施の形態における記述は、本発明に係るスキャナ装置及びプログラムの一例であり、これに限定されるものではない。
上記実施の形態では、スキャナ装置10がハンディターミナルである構成としたが、これに限定されるものではない。スキャナ装置10としては、レーザ方式のスキャナ部を有するPDA(Personal Digital Assistant)、ECR(Electronic Cash Register)に接続されたスキャナ装置等、他のスキャナ装置を用いる構成としてもよい。
また、上記第1の実施の形態では、イメージデータのエレメント幅が基準値より小さいか否かに応じて、スキャナ部からシンボルまでの読み取り距離が近距離か遠距離かを判別する構成としたが、これに限定されるものではない。例えば、イメージデータのシンボル幅(バーコード幅)が基準値より小さいか否かに応じて、スキャナ部からシンボルまでの読み取り距離が近距離か遠距離かを判別する構成としてもよい。
また、上記第2の実施の形態では、スキャナ部からシンボルまでの読み取り距離を測定する測距部22が、赤外線を用いる測距部22としたが、これに限定されるものではない。例えば、撮像部のオートフォーカス機構を利用して焦点距離を読み取り距離とする測距部等、他の測距部としてもよい。
また、上記実施の形態では、スキャナ装置10,10AのCPU11は、読み取り距離が近距離であると判別された場合に、バーコードのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くし、且つデコード結果の照合回数を少なく設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くし、且つ前記照合回数を多く設定することとしたが、これに限定されるものではない。CPU11は、読み取り距離が近距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多く設定することとの少なくとも一方を設定することとしてもよい。
また、上記実施の形態では、スキャナ部18が、シンボルとしてのバーコードを読み取るレーザ方式のスキャナ部である構成としたが、これに限定されるものではない。例えば、スキャナ部が、シンボルとしてのバーコード又は2次元コードを撮像して読み取るイメージスキャナであるとしてもよい。
また、上記実施の形態におけるスキャナ装置10,10Aの各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
本発明の実施の形態を説明したが、本発明の範囲は、上述の実施の形態に限定するものではなく、特許請求の範囲に記載された発明の範囲とその均等の範囲を含む。
以下に、この出願の願書に最初に添付した特許請求の範囲に記載した発明を付記する。付記に記載した請求項の項番は、この出願の願書に最初に添付した特許請求の範囲の通りである。
〔付記〕
<請求項1>
シンボルをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部から前記シンボルまでの読み取り距離が近距離か否かを判別する判別部と、
前記読み取り距離が近距離であると判別された場合に、前記シンボルのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多くすることとの少なくとも一方を設定し、前記設定に応じて前記イメージデータのデコードを行うデコード部と、を備えるスキャナ装置。
<請求項2>
前記判別部は、前記イメージデータのエレメント幅又はシンボル幅が基準値以上の場合に、前記読み取り距離が近距離であると判別し、前記イメージデータのエレメント幅又はシンボル幅が基準値よりも小さい場合に、前記読み取り距離が遠距離であると判別する請求項1に記載のスキャナ装置。
<請求項3>
前記スキャナ部から前記シンボルまでの読み取り距離を測定する測距部を備え、
前記判別部は、前記測距部により測定された読み取り距離が基準値以下の場合に、前記読み取り距離が近距離であると判別し、前記測定された読み取り距離が基準値よりも大きい場合に、前記読み取り距離が遠距離であると判別する請求項1に記載のスキャナ装置。
<請求項4>
コンピュータを、
シンボルをスキャンしてイメージデータを取得するスキャナ部、
前記スキャナ部から前記シンボルまでの読み取り距離が近距離か否かを判別する判別部、
前記読み取り距離が近距離であると判別された場合に、前記シンボルのエレメント幅を判定するための閾値に対するイメージデータの誤差の許容度を高くすることと、デコード結果の照合回数を少なくすることとの少なくとも一方を設定し、前記読み取り距離が遠距離であると判別された場合に、前記閾値に対するイメージデータの誤差の許容度を低くすることと、前記照合回数を多くすることとの少なくとも一方を設定し、前記設定に応じて前記イメージデータのデコードを行うデコード部、
として機能させるためのプログラム。