説明

スキャナ装置及びプログラム

【課題】バーコード読み取りの正確性及びレスポンスを向上することである。
【解決手段】スキャナ装置10は、レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部18と、スキャナ部18により取得されたイメージデータのうち、レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、データ不安定範囲でない部分をデータ安定範囲として判定し、判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースの太さを判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いてデータ不安定範囲をデコードし、判定されたデータ安定範囲について、閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いてデータ安定範囲をデコードするCPU11と、を備える。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、スキャナ装置及びプログラムに関する。
【背景技術】
【0002】
従来、レーザ光を用いて1次元のバーコードをスキャンするスキャナ装置が知られている。このスキャナ装置は、レーザ光を横方向に振って出射し、バーコードで反射された反射光を受光して得られたイメージデータを、所定の閾値を用いてデコードすることにより、バーコードをスキャンしている。このイメージデータは、バーコードのイメージに応じて、得られた黒バーのデータ幅と白スペースのデータ幅とを順に(交互に)並べたデータ構造を有する。また、所定の閾値とは、黒バー及び白スペースのデータ幅(太さ)を判定するための閾値である。
【0003】
イメージデータのデコードに用いる閾値は、スキャナ装置の種類、光学系(レンズの倍率)、バーの太さ等に応じて予め設定されている。また、外部からの設定入力により、イメージデータのデコードに用いる閾値を変更可能なスキャナ装置が知られている(例えば、特許文献1参照)。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開平6−290294号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、従来のスキャナ装置では、レーザ光の振れ幅(照射幅)の両端部分で反射光が不十分となることがあり、取得するイメージデータが不安定となるため、黒バー及び白スペースの比率を正しく取得できないおそれがあるという特性があった。そのため、レーザ光の振れ幅の両端部分でバーコードをスキャンすると、黒バー及び白スペースの比率が崩れて見えてしまい、そのイメージデータをデコードした結果、誤読してしまうおそれがあった。
【0006】
誤読を回避する方法として、従来のスキャナ装置において、閾値をきつく調整する方法が考えられる。閾値をきつく調整するとは、閾値に対するイメージデータの誤差許容度を低く調整することである。
【0007】
しかし、閾値を単純にきつく調整した場合、黒バー及び白スペースの比率の正しいレーザ光の振れ幅の中央部分のスキャンデータに対する読み取りもきつくなるため、同じ幅の黒バーや白スペースの印刷比率に少しでも誤差がある場合や、読み取り距離が離れた場合などに読み取りができなくなってしまうおそれがあった。
【0008】
本発明の課題は、バーコード読み取りの正確性及びレスポンスを向上することである。
【課題を解決するための手段】
【0009】
上記課題を解決するために、本発明のスキャナ装置は、
レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部により取得されたイメージデータのうち、前記レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない部分をデータ安定範囲として判定する判定部と、
前記判定部により判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードし、前記判定部により判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードするデコード部と、を備える。
【発明の効果】
【0010】
本発明によれば、バーコード読み取りの正確性及びレスポンスを向上することができる。
【図面の簡単な説明】
【0011】
【図1】本発明の実施の形態のスキャナ装置の構成を示すブロック図である。
【図2】スキャナ部の構成を示すブロック図である。
【図3】スキャン処理を示すフローチャートである。
【図4】スキャン処理の初期化処理を示すフローチャートである。
【図5】バーコードに関する全イメージデータ幅、左端のデータ不安定範囲、データ不安定及び安定範囲、バーコード開始位置を示す図である。
【図6】スキャン処理のバーコード開始位置解析処理を示すフローチャートである。
【図7】バーコードに関する1キャラクタのデータ幅、キャラクタ開始位置、左端からキャラクタ開始位置までのデータ幅を示す図である。
【図8】スキャン処理のデータ不安定範囲判定処理を示すフローチャートである。
【図9】スキャン処理の4値化処理を示すフローチャートである。
【発明を実施するための形態】
【0012】
以下、添付図面を参照して本発明に係る実施の形態を詳細に説明する。なお、本発明は、図示例に限定されるものではない。
【0013】
先ず、図1及び図2を参照して、本実施の形態の装置構成を説明する。図1に、本実施の形態のスキャナ装置10の構成を示す。図2に、スキャナ部18の構成を示す。
【0014】
図1に示すように、本実施の形態のスキャナ装置10は、読み取り対象物としての1次元のバーコードを読み取り管理するハンディターミナルである。スキャナ装置10は、例えば、倉庫や、小売店の店舗等で使用される。バーコードは、例えば、倉庫や店舗等に並べられた商品に付されているものとする。
【0015】
スキャナ装置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を介して互いに接続されている。
【0016】
CPU11は、スキャナ装置10の各部を制御する。CPU11は、各種プログラムのうち指定されたプログラムをROM15から読み出してRAM13に展開し、展開されたプログラムとの協働で各種処理を実行する。
【0017】
CPU11は、スキャンプログラム151に従い、スキャナ部18により取得されたイメージデータのうち、レーザ光の振れ幅の両端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない中央部分をデータ安定範囲として判定する。そして、CPU11は、前記判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードする。そして、CPU11は、前記判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードする。
【0018】
操作部12は、文字入力キー等の各種キーからなるキー群を備え、ユーザからの各キーの押下入力に応じた操作情報をCPU11に出力する。操作部12は、少なくとも、スキャナ部18を用いたバーコードスキャンのトリガキーを有する。
【0019】
RAM13は、揮発性の半導体メモリであり、各種データ及び各種プログラムを格納するワークエリアを有する。
【0020】
表示部14は、LCD(Liquid Crystal Display)、EL(ElectroLuminescent)ディスプレイ等の表示パネルを備える表示部であり、CPU11から入力される表示情報に応じて表示パネルに各種表示を行う。
【0021】
ROM15は、各種データ及び各種プログラムを記憶する読み出し専用の半導体メモリである。ROM15には、スキャンプログラム151が記憶されている。
【0022】
無線通信部16は、携帯電話通信方式の無線通信部である。無線通信部16は、アンテナ、変調部、復調部、信号処理部等を備え、基地局と無線通信を行う。無線通信部16は、送信する情報の信号を、信号処理部で信号処理し、変調部により変調してアンテナから無線電波として基地局に送信する。この基地局は、通信先の機器と通信ネットワークを介して接続されている。また、無線通信部16は、アンテナにより基地局から受信した無線電波の受信信号を復調部により復調し、信号処理部で信号処理して受信情報を得る。このようにして、無線通信部16は、基地局を介して、通信先の機器と通信を行う。また、無線通信部16は、無線LAN(Local Area Network)方式の無線通信部とし、アクセスポイントを介して、通信先の機器と通信を行うこととしてもよい。
【0023】
フラッシュメモリ17は、情報を読み出し及び書き込み可能に記憶する不揮発性の半導体メモリである。
【0024】
スキャナ部18は、CPU11の制御信号に従い、一次元のバーコードをスキャンして、バーコードのイメージデータを取得し、そのイメージデータをCPU11に出力するレーザスキャナ部である。図2に示すように、スキャナ部18は、発光部181と、バイブレーションミラー182と、受光部183と、ゲイン回路184と、二値化回路185と、を備える。
【0025】
発光部181は、レーザ光Lを発光して出射する。バイブレーションミラー182は、CPU11の制御信号に従い、モータ(図示略)等によりバイブレートされることにより、発光部181から出射されたレーザ光Lを反射して左右に広げる。受光部183は、バイブレーションミラー182により反射されたレーザ光Lが実際に読み取り対象物(バーコード)に当たった反射光を受光して電気信号に変換するモジュールである。
【0026】
ゲイン回路184は、受光部183で受光した反射光の電気信号を増幅して波形を最適化する。二値化回路185は、ゲイン回路184で最適化された電気信号をバーコードのイメージデータとしての二値データに変換してCPU11に出力する。CPU11は、二値化回路185から入力されたイメージデータをデコードする。
【0027】
報知部19は、CPU11の制御に応じて、ブザー音を出力する報知部である。報知部19は、バーコードスキャンが成功した場合に、ブザー音出力するよう制御される。
【0028】
電源部20は、リチウム電池等の二次電池であり、スキャナ装置10の各部に電源供給を行う。
【0029】
次に、図3〜図9を参照して、スキャナ装置10の動作を説明する。図3に、スキャン処理を示す。図4に、スキャン処理の初期化処理を示す。図5に、バーコードBに関する全イメージデータ幅T、データ不安定範囲T1、データ不安定及び安定範囲T2、バーコード開始位置Pos1を示す。図6に、スキャン処理のバーコード開始位置解析処理を示す。図7に、バーコードBに関する1キャラクタのデータ幅Char、キャラクタ開始位置Pos、左端からキャラクタ開始位置Posまでのデータ幅Sumを示す。図8に、スキャン処理のデータ不安定範囲判定処理を示す。図9に、スキャン処理の4値化処理を示す。
【0030】
スキャナ装置10で実行されるスキャン処理は、読み取り対象のバーコードをスキャンして情報を読み取る処理である。予め、ユーザにより、スキャナ部18のレーザ光の出射方向に、読み取り対象のバーコードが合わせられるように、スキャナ装置10の位置及び姿勢が調整される。より具体的には、スキャナ部18のレーザ光の振れ幅の方向が、バーコードの長手方向に合わせられる。
【0031】
ここでは、バーコードに含まれる各キャラクタが6本のエレメント(3本の黒バー及び3本の白スペース)で構成される規格であるCode128のバーコードを読み取る例を説明する。しかし、これに限定されるものではなく、バーコードに含まれる各キャラクタがCode128以外の6本のエレメントからなる規格や、各キャラクタが6以外の本数のエレメントからなる規格のバーコードを読み取る構成としてもよい。
【0032】
スキャナ装置10において、ユーザにより操作部12のバーコードスキャンのトリガボタンが押下されたことをトリガとして、CPU11は、ROM15から読み出されて適宜RAM13に展開されたスキャンプログラム151との協働で、スキャン処理を実行する。CPU11は、スキャン処理の開始とともに、タイマのカウントを開始する。
【0033】
先ず、CPU11は、タイマのカウント値に応じて、スキャン処理開始から予め設定された所定時間を経過してタイムアウトしたか否かを判別する(ステップS11)。この所定時間は、スキャン処理を終了するためのタイムアウトの時間である。タイムアウトした場合(ステップS11;YES)、スキャン処理が終了する。
【0034】
タイムアウトしていない場合(ステップS11;NO)、CPU11は、スキャナ部18からバーコードのイメージデータの取得を完了する(ステップS12)。イメージデータは、バーコードのイメージの左から右へ並んだ黒バー及び白スペースの各データ幅の配列Dat[0],Dat[1],Dat[2]…を有するものとする。例えば、バーコードの左横の白スペースのデータ幅が配列Dat[0]となり、バーコードの最も左の黒バーのデータ幅が配列Dat[1]となる。
【0035】
そして、CPU11は、ステップS12で取得したバーコードのイメージデータについて、初期化処理を行う(ステップS13)。ここで、図4及び図5を参照して、ステップS13の初期化処理を説明する。先ず、CPU11は、イメージデータのデータ幅の変数Tに0を設定し、ループカウンタiに0を設定する(ステップS131)。そして、CPU11は、ループカウンタiが、ステップS12で取得したイメージデータの黒バー及び白スペースの本数DatNumより小さいか否かを判別する(ステップS132)。
【0036】
i<DatNumである場合(ステップS132;YES)、CPU11は、変数Tに配列Dat[i]を加算して新たな変数Tを算出し、ループカウンタiを1インクリメントし(ステップS133)、ステップS132に移行される。
【0037】
i≧DatNumである場合(ステップS132;NO)、CPU11は、変数Tに、予め設定された定数aを乗算して、データ不安定範囲(のデータ幅)T1を算出する(ステップS134)。そして、CPU11は、変数Tに、予め設定された定数bを用いた(1−b)を乗算して、データ不安定及び安定範囲(のデータ幅)T2を算出し(ステップS135)、初期化処理を終了する。
【0038】
図5に示すように、ステップS134の時点で、変数Tは、ステップS12で取得されたイメージデータの全イメージデータ幅Tとなる。バーコードBは、ステップS12でのイメージデータ読み取り対象のバーコードとする。また、レーザ光の振れ幅の軌跡L1は、スキャナ部18から出射されバーコードBを含む紙上に照射されたレーザ光の振れ幅の軌跡である。軌跡L1は、バーコードBの全ての黒バーを横切るようにとられている。また、ステップS12で軌跡L1に対応する長さのイメージデータが取得されている。
【0039】
データ不安定範囲T1は、軌跡L1の左端部分でデコードが不安定になる範囲のデータ幅である。データ不安定及び安定範囲T2は、全イメージデータ長Tから、軌跡L1の右端部分でデコードが不安定になる範囲を除いた範囲のデータ幅である。つまり、不安定範囲及び安定範囲T2は、軌跡L1上におけるデータ不安定範囲T1とデコードが安定するデータ安定範囲との長さである。また、軌跡L1の右端部分のデータ不安定範囲は、T×aの値となる。
【0040】
定数a,bは、それぞれ、レーザ光の振れ幅の軌跡L1全体に対するデータ不安定範囲の割合を表す値で、0〜1.00の間の値となる。また、定数a,bは、スキャナ部18(スキャナ装置10)の光学的特性とレーザ光の振れのスピード特性とに応じて決定される値で、予めスキャンプログラム151に記憶させる(含まれる)値となる。レーザ光の振れのスピード特性とは、スキャナ部18のレーザ光の振れ幅において、バーコード上のレーザ光の振れのスピードが一定にならない特性である。より具体的には、例えば左から右へレーザ光が振れる場合に、バーコード上のレーザ光の振れのスピードは、加速→安定→減速のように変化する。このため、レーザ光の振れ幅の両端において、イメージデータの黒バー及び白スペースのデータ幅の比率誤差が大きくなるおそれがある。
【0041】
図3に戻り、ステップS13の実行後、CPU11は、バーコード開始位置解析処理を実行する(ステップS14)。ここで、図6を参照して、ステップS14のバーコード開始位置解析処理を説明する。
【0042】
先ず、CPU11は、バーコード開始位置の変数Pos1を1に設定する(ステップS141)。そして、CPU11は、変数Sumに配列Dat[0]を設定する(ステップS142)。変数Sumは、イメージデータのうち、左端から変数Pos1の黒バー又は白スペースの1つ左の黒バー又は白スペースまでの幅の値の変数である。
【0043】
そして、CPU11は、変数Pos1+1が本数DatNumより小さいか否かを判別する(ステップS143)。ステップS143では、変数Pos1+1がイメージデータのバーコードの右端を超えておらず正常か、同じく超えており異常かが判別されている。
【0044】
Pos1+1<DatNumである場合(ステップS143;YES)、正常であり、CPU11は、配列Dat[Pos1+1]×10が配列Dat[Pos1−1]より小さいか否かを判別する(ステップS144)。ステップS144では、配列Dat[Pos1+1]の10倍の値が、これと同じ色で左隣の配列Dat[Pos1−1]より小さく、その同じ色で左隣の配列Dat[Pos1−1]がイメージデータのバーコードの左隣の大きな白スペース部分であるか否かが判別されている。
【0045】
Dat[Pos1+1]×10≧Dat[Pos1−1]である場合(ステップS144;NO)、配列Dat[Pos1−1]が大きな白スペース部分でなく、CPU11は、変数Sumに配列Dat[Pos1]を加算して新たな変数Sumを算出する(ステップS145)。そして、CPU11は、変数Pos1を1インクリメントし(ステップS146)、ステップS143に移行される。
【0046】
Dat[Pos1+1]×10<Dat[Pos1−1]である場合(ステップS144;YES)、配列Dat[Pos1−1]が大きな白スペース部分であり、CPU11は、キャラクタ開始位置の変数Posに、バーコード開始位置である変数Pos1を設定する(ステップS147)。図7に示すように、変数Posは、後述するデータ不安定範囲判定処理において、バーコード開始位置Pos1から右側に移動させるキャラクタ開始位置の変数となる。そして、CPU11は、バーコード開始位置を検出した旨を設定し(ステップS148)、バーコード開始位置解析処理を終了する。
【0047】
Pos1+1≧DatNumである場合(ステップS143;NO)、異常であり、CPU11は、バーコード開始位置を未検出の旨を設定し(ステップS149)、
バーコード開始位置解析処理を終了する。
【0048】
図3に戻り、ステップS14の実行後、CPU11は、ステップS14(ステップS148,S149)での設定結果に基づいて、バーコード開始位置を検出したか否かを判別する(ステップS15)。バーコード開始位置を検出した場合(ステップS15;YES)、CPU11は、変数Pos+6の値が本数DatNumより小さいか否かを判別する(ステップS16)。ステップS16で加算する6は、バーコードの1キャラクタ分の黒バー及び白スペースの数である。
【0049】
Pos+6<DatNumである場合(ステップS16;YES)、CPU11は、データ不安定範囲判定処理を実行する(ステップS17)。ここで、図8を参照して、ステップS17のデータ不安定範囲判定処理を説明する。
【0050】
先ず、CPU11は、配列Dat[Pos],Dat[Pos+1],Dat[Pos+2],Dat[Pos+3],Dat[Pos+4],Dat[Pos+5]を加算して、1キャラクタ分のイメージデータのデータ幅の変数Charを算出する(ステップS171)。そして、CPU11は、変数Sumが、データ不安定範囲T1よりも小さいか否かを判別する(ステップS172)。図7に示すように、変数Sumは、イメージデータのうち、左端から変数Posの黒バー又は白スペースの左隣の黒バー又は白スペースまでのデータ幅の変数である。ステップS172では、変数Posのキャラクタを含まないデータ幅の変数Sumが、軌跡L1の左側のデータ不安定範囲T1内にあるか否かが判別されている。
【0051】
Sum≧T1である場合(ステップS172;NO)、変数Sumがデータ不安定範囲T1外にあると判定される。
【0052】
そして、CPU11は、変数SumにステップS171で算出した変数Charを加算して新たな変数Sumを算出する(ステップS173)。そして、CPU11は、変数Sumが、データ不安定及び安定範囲T2より大きい否かを判別する(ステップS174)。ステップS174では、変数Posのキャラクタを含むデータ幅の変数Sumが、軌跡L1の右側のデータ不安定範囲内にあるか否かが判別されている。
【0053】
T2≧Sumである場合(ステップS174;NO)、変数Sumが右側のデータ不安定範囲外にあり、CPU11は、現在の変数Posのキャラクタ位置がデータ不安定範囲外(データ安定範囲内)であるとして判定し(ステップS175)、データ不安定範囲判定処理を終了する。
【0054】
Sum<T1である場合(ステップS172;YES)、変数Sumがデータ不安定範囲T1内にあり、CPU11は、変数SumにステップS171で算出した変数Charを加算して新たな変数Sumを算出する(ステップS176)。さらに、CPU11は、現在の変数Posのキャラクタ位置がデータ不安定範囲内であるとして判定し(ステップS177)、データ不安定範囲判定処理を終了する。T2<Sumである場合(ステップS174;YES)、変数Sumが右側のデータ不安定範囲内にあり、ステップS177に移行される。
【0055】
データ不安定範囲判定処理では、変数Posに対応するキャラクタがデータ不安定範囲T1又は右側のデータ不安定範囲に一部でも含まれていれば、当該キャラクタがデータ不安定範囲内にあると判定される。
【0056】
図3に戻り、ステップS17の実行後、CPU11は、ステップS17(ステップS175,S176)の判定結果に基づいて、イメージデータの1キャラクタ分(変数Posに対応する変数Charの分のイメージデータ)がデータ不安定範囲内にあるか否かを判別する(ステップS18)。
【0057】
イメージデータの1キャラクタ分がデータ不安定範囲内にない場合(ステップS18;NO)、1キャラクタ分が軌跡L1の中央部分のデータ安定範囲にあり、CPU11は、変数cに0を設定する(ステップS19)。イメージデータの1キャラクタ分がデータ不安定範囲内にある場合(ステップS18;YES)、CPU11は、変数cに0.25を設定する(ステップS20)。変数cは、黒バー及び白スペースの比率誤差について、どこまで許容するのかを表すパラメータである。変数cが小さいほど誤差を許容してイメージデータの解析を行うことになる。つまり、変数cは、イメージデータのデコードにおける黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度に対応する変数である。
【0058】
そして、CPU11は、4値化判定処理を行う(ステップS21)。ここで、図9を参照して、ステップS21の4値化判定処理を説明する。Code128の規格において、黒バー及び白スペースのデータ幅は、4種類の値(太さ)が設定されている。4値化判定処理は、1キャラクタ分のイメージデータにおいて、閾値及び変数cを用いて、3本の各黒バー及び3本の各白スペースのデータ幅を4種類の値のいずれであるかを判定する処理である。
【0059】
先ず、CPU11は、変数Charを11で除算した値を変数Mとして設定する(ステップS211)。Code128の規格において、1キャラクタ分のイメージデータのデータ幅は、11値で一定である。ステップS211では、1キャラクタ分の変数Charを11(値)で除算することにより、1値に対応するイメージデータのデータ幅を変数Mとして算出している。
【0060】
そして、CPU11は、変数Mを0.5倍した値を変数B05として設定し、変数Mを1.5倍した値を変数B15として設定し、変数Mを2.5倍した値を変数B25として設定し、変数Mを3.5倍した値を変数B35として設定し、変数Mを4.5倍した値を変数B45として設定する(ステップS212)。変数B05,B15,B25,B35,B45は、順に、1値の0.5、1.5、2.5、3.5、4.5倍に対応するイメージデータのデータ幅の変数である。4値化判定処理において、変数B05,B15,B25,B35,B45は、黒バー及び白スペースのデータ幅を判定する(4値化する)ための閾値として使用される。
【0061】
そして、CPU11は、ループカウンタiに変数Posを設定する(ステップS213)。そして、CPU11は、ループカウンタiが変数Pos+6よりも小さいか否かを判別する(ステップS214)。i<Pos+6である場合(ステップS214;YES)、CPU11は、配列Dat[i]が変数B15よりも小さいか否かを判別する(ステップS215)。
【0062】
Dat[i]<B15である場合(ステップS215;YES)、CPU11は、ループカウンタiに対応する黒バー又は白スペースのデータ幅の4値の配列R[i]に1を設定する(ステップS216)。そして、CPU11は、配列Dat[i]から変数B05を減算した値を変数W1として設定し、変数B15から配列Dat[i]を減算した値を変数W2として設定する(ステップS217)。変数W1は、配列Dat[i]と、配列Dat[i]の左側の閾値(変数B05,B15,B25又はB35)と、の間の距離の変数である。変数W2は、配列Dat[i]の右側の閾値(変数B15,B25,B35又はB45)と、配列Dat[i]と、の間の距離の変数である。
【0063】
Dat[i]≧B15である場合(ステップS215;NO)、CPU11は、配列Dat[i]が変数B25よりも小さいか否かを判別する(ステップS218)。Dat[i]<B25である場合(ステップS218;YES)、CPU11は、配列R[i]に2を設定する(ステップS219)。そして、CPU11は、配列Dat[i]から変数B15を減算した値を変数W1として設定し、変数B25から配列Dat[i]を減算した値を変数W2として設定する(ステップS220)。
【0064】
Dat[i]≧B25である場合(ステップS218;NO)、CPU11は、配列Dat[i]が変数B35よりも小さいか否かを判別する(ステップS221)。Dat[i]<B35である場合(ステップS221;YES)、CPU11は、配列R[i]に3を設定する(ステップS222)。そして、CPU11は、配列Dat[i]から変数B25を減算した値を変数W1として設定し、変数B35から配列Dat[i]を減算した値を変数W2として設定する(ステップS223)。
【0065】
Dat[i]≧B35である場合(ステップS221;NO)、CPU11は、配列R[i]に4を設定する(ステップS224)。そして、CPU11は、配列Dat[i]から変数B35を減算した値を変数W1として設定し、変数B45から配列Dat[i]を減算した値を変数W2として設定する(ステップS225)。
【0066】
ステップS217,S220,S223,S225の実行後、CPU11は、変数W1が、変数Mに変数cを乗算した値よりも小さいか否かを判別する(ステップS226)。W1≧M×cである場合(ステップS226;NO)、変数W1(配列Dat[i])が許容誤差内にあり、CPU11は、変数W2が、変数Mに変数cを乗算した値よりも小さいか否かを判別する(ステップS227)。
【0067】
W2≧M×cである場合(ステップS227;NO)、変数W2(配列Dat[i])が許容誤差内にあり、CPU11は、ループカウンタiを1インクリメントし(ステップS228)、ステップS214に移行される。W1<M×cである場合(ステップS226;YES)、CPU11は、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が失敗した旨を設定し(ステップS229)、4値化処理を終了する。W2<M×cである場合(ステップS227;YES)、ステップS229に移行される。
【0068】
変数W1,W2が小さい場合、1値と2値との差や、2値と3値との差等、本来異なるレベルとなるべきデータ幅の差異が小さく、比率があいまいになり、誤読の危険性が高くなるため、ステップS229で4値化が失敗した旨が設定されている。
【0069】
i≧Pos+6である場合(ステップS214;NO)、CPU11は、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が成功した旨を設定し(ステップS230)、4値化処理を終了する。
【0070】
図3に戻り、CPU11は、ステップS21(ステップS229,S230)の4値化処理の結果に応じて、変数Posに対応する1キャラクタの黒バー及び白スペースの4値化が成功したか否かを判別する(ステップS22)。4値化が成功した場合(ステップS22;YES)、CPU11は、ステップS21の4値化判定処理で得られたキャラクタの配列R[i]をキャラクタコードに変換する(ステップS23)。そして、CPU11は、ステップS23で変換したキャラクタコードが、バーコードの右端を示すストップコードであるか否かを判別する(ステップS24)。
【0071】
ストップコードでない場合(ステップS24;NO)、CPU11は、変数Posを6インクリメントし(ステップS25)、ステップS15に移行される。ストップコードである場合(ステップS24;YES)、CPU11は、ステップS23で変換されたキャラクタコードを用いてチェックデジット等のチェック処理を行い、そのチェック結果に応じて、最終的にデコードが成功したか否かを判別する(ステップS26)。ステップS18〜S26が一連のデコード処理となる。
【0072】
デコードが失敗した場合(ステップS26;NO)、CPU11は、スキャナ部18から次のイメージデータが入力されるのを待ち(ステップS27)、ステップS11に移行される。バーコード開始位置を検出していない場合(ステップS15;NO)、Pos+6≧DatNumである場合(ステップS16;NO)、又は4値化が失敗した場合(ステップS22;NO)、ステップS27に移行される。
【0073】
デコードが成功した場合(ステップS26;YES)、CPU11は、ステップS23で得られたキャラクタコードを含むデコード結果を表示部14に表示し、報知部19にブザー音を出力させ(ステップS28)、スキャン処理を終了する。ステップS28において、デコード結果は、例えば、フラッシュメモリ17に記憶される。
【0074】
以上、本実施の形態によれば、スキャナ装置10は、スキャナ部18により取得されたバーコードのイメージデータのうち、レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲以外の中央部分をデータ安定範囲として判定する。そして、スキャナ装置10は、前記判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースの太さを判定するための閾値(変数B05,B15,B25,B35,B45)に対するイメージデータの誤差の許容度を低く(変数cを高く)設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードする。また、スキャナ装置10は、前記判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く(変数cを低く)設定(通常レベルに設定)し、当該閾値及び許容度を用いて当該データ安定範囲をデコードする。このため、バーコードのデータ不安定範囲の読み取りの正確性を向上できるとともに、バーコードのデータ安定範囲の読み取りのレスポンスを向上できる。
【0075】
また、スキャナ装置10は、スキャナ部18により取得されたイメージデータのうち、左端から所定の第1の割合(変数a)のデータ幅と、右端から所定の第2の割合(変数b)のデータ幅と、をデータ不安定範囲と判定する。このため、スキャナ部18の光学的特性とレーザ光の振れのスピード特性とに応じて変数a,bを設定して、左端及び右端のデータ不安定範囲を判定できる。また、変数a=変数bだけでなく、変数a≠変数bとしても設定できる。
【0076】
また、スキャナ装置10は、スキャナ部18により取得されたイメージデータについて、バーコードの1キャラクタ内の閾値に対するイメージデータの誤差の許容度を同じ値に設定し、データ不安定範囲及びデータ安定範囲の境界上のキャラクタの誤差の許容度を低く設定する。このため、データ不安定範囲及びデータ安定範囲の境界にバラツキが発生しても、境界上のキャラクタの読み取りの正確性を向上することができる。
【0077】
以上の説明では、本発明に係るプログラムのコンピュータ読み取り可能な媒体としてROM15を使用した例を開示したが、この例に限定されない。
その他のコンピュータ読み取り可能な媒体として、フラッシュメモリ等の不揮発性メモリ、CD−ROM等の可搬型記録媒体を適用することが可能である。
また、本発明に係るプログラムのデータを通信回線を介して提供する媒体として、キャリアウエーブ(搬送波)も本発明に適用される。
【0078】
なお、上記実施の形態における記述は、本発明に係るスキャナ装置及びプログラムの一例であり、これに限定されるものではない。
【0079】
上記実施の形態では、スキャナ装置10がハンディターミナルである構成としたが、これに限定されるものではない。スキャナ装置10としては、レーザ方式のスキャナ部を有するPDA(Personal Digital Assistant)、ECR(Electronic Cash Register)に接続されたスキャナ装置等、他のスキャナ装置を用いる構成としてもよい。
【0080】
また、上記実施の形態では、バーコードの1キャラクタ内の誤差の許容度を同じに設定し、データ不安定範囲及びデータ安定範囲の境界上のキャラクタの閾値に対応する誤差の許容度を低く設定することとしたが、これに限定されるものではない。例えば、データ不安定範囲及びデータ安定範囲の境界上のキャラクタの閾値に対応する誤差の許容度を高く設定する構成としてもよい。また、バーコードのエレメント(黒バー及び白スペース)毎に誤差の許容度を設定する構成としてもよい。
【0081】
また、上記実施の形態におけるスキャナ装置10の各構成要素の細部構成及び細部動作に関しては、本発明の趣旨を逸脱することのない範囲で適宜変更可能であることは勿論である。
【0082】
本発明の実施の形態を説明したが、本発明の範囲は、上述の実施の形態に限定するものではなく、特許請求の範囲に記載された発明の範囲とその均等の範囲を含む。
以下に、この出願の願書に最初に添付した特許請求の範囲に記載した発明を付記する。付記に記載した請求項の項番は、この出願の願書に最初に添付した特許請求の範囲の通りである。
〔付記〕
<請求項1>
レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部により取得されたイメージデータのうち、前記レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない部分をデータ安定範囲として判定する判定部と、
前記判定部により判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードし、前記判定部により判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードするデコード部と、を備えるスキャナ装置。
<請求項2>
前記判定部は、前記スキャナ部により取得されたイメージデータのうち、左端から所定の第1の割合のデータ幅と、右端から所定の第2の割合のデータ幅と、を前記データ不安定範囲と判定する請求項1に記載のスキャナ装置。
<請求項3>
前記デコード部は、前記スキャナ部により取得されたイメージデータについて、前記バーコードの1キャラクタ内の前記誤差の許容度を同じ値に設定し、前記データ不安定範囲及び前記データ安定範囲の境界上のキャラクタの前記誤差の許容度を低く設定する請求項1又は2に記載のスキャナ装置。
<請求項4>
コンピュータを、
レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部により取得されたイメージデータのうち、前記レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない部分をデータ安定範囲として判定する判定部、
前記判定部により判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードし、前記判定部により判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードするデコード部、
として機能させるためのプログラム。
【符号の説明】
【0083】
10 スキャナ装置
11 CPU
12 操作部
13 RAM
14 表示部
15 ROM
16 無線通信部
17 フラッシュメモリ
18 スキャナ部
181 発光部
182 バイブレーションミラー
183 受光部
184 ゲイン回路
185 二値化回路
19 報知部
20 電源部
21 バス

【特許請求の範囲】
【請求項1】
レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部により取得されたイメージデータのうち、前記レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない部分をデータ安定範囲として判定する判定部と、
前記判定部により判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードし、前記判定部により判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードするデコード部と、を備えるスキャナ装置。
【請求項2】
前記判定部は、前記スキャナ部により取得されたイメージデータのうち、左端から所定の第1の割合のデータ幅と、右端から所定の第2の割合のデータ幅と、を前記データ不安定範囲と判定する請求項1に記載のスキャナ装置。
【請求項3】
前記デコード部は、前記スキャナ部により取得されたイメージデータについて、前記バーコードの1キャラクタ内の前記誤差の許容度を同じ値に設定し、前記データ不安定範囲及び前記データ安定範囲の境界上のキャラクタの前記誤差の許容度を低く設定する請求項1又は2に記載のスキャナ装置。
【請求項4】
コンピュータを、
レーザ光を出射して反射光を受光することによりバーコードをスキャンしてイメージデータを取得するスキャナ部と、
前記スキャナ部により取得されたイメージデータのうち、前記レーザ光の振れ幅の端部分をデータ不安定範囲として判定し、当該データ不安定範囲でない部分をデータ安定範囲として判定する判定部、
前記判定部により判定されたデータ不安定範囲について、前記バーコードの黒バー及び白スペースのデータ幅を判定するための閾値に対するイメージデータの誤差の許容度を低く設定し、当該閾値及び許容度を用いて当該データ不安定範囲をデコードし、前記判定部により判定されたデータ安定範囲について、前記閾値に対するイメージデータの誤差の許容度を高く設定し、当該閾値及び許容度を用いて当該データ安定範囲をデコードするデコード部、
として機能させるためのプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate