説明

光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体

【課題】従来方式のバーコード読み取り方法に比べてバーコードの誤読取を防止できるようにすると共に、エレメントが傷やかすれた場合であっても、正確なバーコードデータを出力できるようにする。
【解決手段】1キャラクタ内で隣接するバー及びスペースを含む6本のエレメントの幅を加算して2〜n本加算パターンを各々求め、この2〜n本加算パターンの各々を1キャラクタのモジュール数に換算して2〜n本加算パターンのモジュール数を求める演算部23aと、ここに求められた2〜n本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する抽出部23bと、ここに抽出された各々の2〜n本加算パターンのモジュール数の候補キャラクタと、候補キャラクタを評価するための期待値キャラクタとを比較し、候補キャラクタと最も相関が強い期待値キャラクタを検索する検索部23dとを備えるものである。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、バーコード記号を読み取ってバーコードデータを出力するバーコード記号読取装置に適用可能な光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体に関するものである。
【背景技術】
【0002】
従来から、物品流通システムにおいて、流通物品にバーコード記号を貼付又は印刷し、この種のバーコード記号をバーコードリーダー(以下光学情報読取装置という)等により読み取って情報処理するシステムが利用されている。光学情報読取装置によれば、バーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続くキャラクタをデコード処理してバーコードデータを出力するようになされる。
【0003】
ところで、バーコード記号の規格には、CODE128や、CODE39、EAN/UPC(EAN/Universal Product Code)、インターリーブド2オブ5、コーダバー、RSS、RSSリミテッド、RSSエクスパンデド等の各々の方式が有る。一方、バーコード記号は流通物品に対して、バーコード記号標を貼付し、又は、パッケージに直接印刷して使用される場合が多い。しかし、これらの印刷技術や、貼付技術等のバラツキや、流通物品の取り扱い方法によって流通物品に貼付又は印刷されたバーコード記号を正しく読み取れない場合が想定される。バーコード記号を正しく読み取れない原因として、バーコード記号を構成するバーやスペースの欠落や、傷等が挙げられる。
【0004】
この種の光学情報読取装置に関連して、特許文献1にはバーコード記号読取装置、それによるスタートマージン候補検出方法並びにバーコード記号読取方法が開示されている。このバーコード記号読取装置を応用して、バーコード記号を構成するバーやスペースに不本意に生じた、欠落や傷等を含む難読キャラクタをデコード処理する場合について、図14〜図17を参照してその説明をする。
【0005】
図14は、従来例に係る光学情報読取装置20の構成例を示すブロック図である。図14に示す光学情報読取装置20は、光学読取部2、クロック発生部3、m段データバッファ5、x倍器7、セレクタ部6、比較器8、スタートマージン格納部9、インターフェース部11、デコードバッファ25、カウントデータ値格納部30、CPU33及び、バーコードデータ値用のカウンタ部40を有して構成される。
【0006】
光学読取部2は、読み取り対象であるバーコード記号1を読み取って、コード読取データD2を発生する。例えば、光学読取部2からバーコード記号1に対して、発光ダイオード(LED)やレーザダイオード(LD)等の光源による光を照射し、その反射光をフォトダイオードやフォトトランジスタ等の受光素子で受光して電気信号に変換し、その電気信号を2値化してバーコード記号1の濃淡、すなわち、黒部分のバー又は白部分のスペースを示すデジタルのコード読取データD2に変換する。
【0007】
光学読取部2はカウンタ部40に接続される。カウンタ部40にはクロック発生部3が接続される。クロック発生部3は、所定周波数のサンプリングクロック信号(以下単にCLK信号という)を発生して、CLK信号をカウンタ部40に出力する。クロック発生部3には発振器が使用される。
【0008】
バーコードデータ値用のカウンタ部40は、光学読取部2から出力されるコード読取データD2を入力して、クロック発生部3から出力されるCLK信号を入力し、当該CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの幅を示すカウントデータD4(バーコードデータ値:数値)に変換する。
【0009】
カウンタ部40にはm段データバッファ5、x倍器7及びカウントデータ値格納部30が接続される。m段データバッファ5はカウンタ部40から出力されるカウントデータD4を、m段分(mは任意の整数)だけ一時格納する。m段は、バーコード記号1の印刷状態により任意に設定される。m段データバッファ5はフリップフロップ回路やメモリ等の記憶回路から構成される。
【0010】
x倍器7は、カウントデータD4からスタートマージンを検索するに当たり、カウントデータD4を何倍かを示す「x」が予め設定され、そのx倍の演算を行って、x倍データD7を出力する。x倍器7はカウントデータD4をx倍する演算回路によって構成される。CPU33は、バーコード記号1の印刷状態に対応して、カウントデータD4を何倍にするかをx倍器7に設定する。
【0011】
m段データバッファ5にはセレクタ部6が接続される。セレクタ部6は、m段データバッファ5に一時格納されたm段分のカウントデータD4のうち、比較対象とするデータを選択する。セレクタ部6はCPU33等の制御を受けて、m段分のカウントデータD4のうち、どのカウントデータD4を比較するかを選択するようになされる。
【0012】
CPU33は、m段データバッファ5中の何段(k段)前までのカウントデータD4を比較対象として選択するかを、バーコード記号1の印刷状態、印刷汚れ、外的要因による汚れ等の状態に準じてセレクタ部6に設定される。この例では、m段データバッファ5から出力されるカウントデータD4が、今、カウンタ部40から出力されたカウントデータD4の値の何倍より大きいことをもってスタートマージン候補とするかが予め設定されている。
【0013】
上述のセレクタ部6及びx倍器7には比較器8が接続される。比較器8はセレクタ部6が選択した、m段データバッファ5中のk段前までの各カウントデータD4と、x倍器7から出力されるx倍データD7とを比較する。比較結果によってx倍器7からのx倍データD7の方が小さいときは、スタートマージン候補があったと判定し、スタートマージン候補検索フラグ(以下でSMFデータD9という)を発生する。SMFデータD9はスタートマージン格納部9に出力される。
【0014】
比較器8にはスタートマージン格納部9が接続される。スタートマージン格納部9にはフリップフロップ回路のような記憶機能を有して構成される。スタートマージン格納部9には比較器8から出力されるSMFデータD9、そのとき比較対象としたカウントデータ値=バーコードデータ値D30とが対応させて格納される。どのカウントデータD4によってスタートマージン候補となったかが判るようにするためである。スタートマージン候補は、バーコード記号1におけるバーの手前に、ある一定以上の幅の白バーが存在しているときに発生される。
【0015】
カウントデータ値格納部30は、カウンタ部40から順次出力されるカウントデータD4を、時系列的にすべて格納して保存する。カウントデータ値格納部30は、フリップフロップ回路や、DRAM等のような記憶回路から構成される。スタートマージン格納部9及びカウントデータ値格納部30にはインターフェース部11が接続される。
【0016】
インターフェース部11は、スタートマージン格納部9から読み出されるSMFデータD9や、カウントデータ値格納部30から読み出した各キャラクタのバーコードデータ値D30をCPU33に入力する。インターフェース部11にはデコードバッファ25が接続され、CPU33から出力されるバーコードデータD12が格納される。
【0017】
デコードバッファ25はカウントデータ値格納部30から出力された各キャラクタのバーコードデータ値D30の演算途中のデータを格納もなされる。また、インターフェース部11には出力端子OUTが接続され、出力端子OUTにはデコード処理後のバーコードデータD12が出力される。バーコードデータD12は、例えば、デコードバッファ25からインターフェース部11を介して出力端子OUTへ読み出される。
【0018】
図15A〜Eは、従来例に係る2本加算データの算出例を示す説明図である。図15Aに示すCLK信号は図14に示したクロック発生部3からカウンタ部40へ出力される。図15Bに示すバーコード記号1は、例えば、CODE128規格のものである。CODE128規格によれば、図15Bに示す1キャラクタについて、3本の黒部分のバー(1),(3),(5)及び3本の白部分のスペース(2),(4),(6)から構成される。1キャラクタの全幅は11モジュールから構成される。当該キャラクタC1の黒部分のバー(1)は4モジュールから成り、バー(3)及びバー(5)は各々1モジュールから成る。白部分のスペース(2)は1モジュールから成り、スペース(4)及び(6)は各々2モジュールから成る。
【0019】
図15Cに示すバーコードデータ値D30は、図14に示した光学読取部2から出力されるコード読取データD2を、クロック発生部3から出力されるCLK信号に基づいてサンプリングし、当該CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの幅を示すカウントデータD4に変換することで得られる。
【0020】
図15Dに示すW11はキャラクタC1の黒部分のバー(1)の幅である。W12はバー(1)に続くスペース(2)の幅である。W13はキャラクタC1のスペース(2)に続くバー(3)の幅である。W14はキャラクタC1のバー(3)に続くスペース(4)の幅である。W15はスペース(4)に続くバー(5)の幅である。W16はキャラクタC1のバー(5)に続くスペース(6)の幅である。上述の6種類の幅を示すデータは1キャラクタのバーコードデータ値D30を構成する。
【0021】
図15Eに示すW21はキャラクタC1のバー(1)とスペース(2)の各々がCPU33によって加算された幅(以下バー(1)+スペース(2)と記す)である。バー(1)+スペース(2)の加算幅を示すカウントデータ値は幅W21データを成す。W22はキャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々がCPU33によって加算された幅である。スペース(2)+バー(3)の加算幅を示すカウントデータ値は幅W22データを成す。
【0022】
W23はキャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々がCPU33によって加算された幅である。バー(3)+スペース(4)の加算幅を示すカウントデータ値は幅W23データを成す。W24はキャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々がCPU33によって加算された幅である。スペース(4)+バー(5)の加算幅を示すカウントデータ値は幅W24データを成す。W25はキャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々がCPU33によって加算された幅である。バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W25データを成す。上述の5種類の幅W21データ〜幅W25データは1キャラクタの2本加算方式のデータであり、バーコードデータ値D30を構成する。
【0023】
図16及び図17は、従来例に係る難読キャラクタのデコード例(その1,2)を示すフローチャートである。光学情報読取装置20では、CODE128規格に基づくバーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続くキャラクタを2本加算方式によりデコード処理してバーコードデータD12を出力する場合を例に挙げる。その場合のバーコード記号1のバー及びスペースの各エレメントの誤差許容度(最大誤差範囲)が、例えば、±0.5モジュールに設定される。
【0024】
これらをデコード条件にして、図16に示すフローチャートのステップST81でCPU33はスタートマージンを検索する。このとき、光学読取部2は、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部40へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部40に出力する。
【0025】
カウンタ部40は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの2本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー(黒部分)の幅およびスペース(白部分)の幅を示す数値データ列となる。カウントデータD4は、カウントデータ値格納部30に保存される。
【0026】
m段データバッファ5はカウンタ部40から出力されるカウントデータD4を、m段分(mは任意の整数)だけ一時格納する。m段は、バーコード記号1の印刷状態により任意に設定されている。x倍器7は、カウントデータD4からスタートマージンを検索するに当たり、カウントデータD4を何倍かを示す「x」が予め設定され、そのx倍の演算を行って、x倍データD7を出力する。
【0027】
セレクタ部6は、CPU33の選択制御を受けて、m段データバッファ5に一時格納されたm段分のカウントデータD4のうち、比較対象とするデータを選択する。比較器8はセレクタ部6が選択した、m段データバッファ5中のk段前までの各カウントデータD4と、x倍器7から出力されるx倍データD7とを比較する。
【0028】
比較結果によってx倍器7からのx倍データD7の方が小さいときは、スタートマージン候補があったと判定し、スタートマージン候補検索フラグ(以下でSMFデータD9という)を発生する。SMFデータD9はスタートマージン格納部9に出力される。スタートマージン格納部9には比較器8から出力されるSMFデータD9、そのとき比較対象としたカウントデータ値=D10とが対応させて格納される。
【0029】
ステップST82でCPU33は1キャラクタ分の幅データ(6本)を抽出する。図15に示したキャラクタC1によれば、黒部分のバー(1)の幅W11がカウンタ部40により計数され、そのカウントデータ値が幅W11データとなる。バー(1)に続く白部分のスペース(2)の幅W12もカウンタ部40により計数され、そのカウントデータ値が幅W12データとなる。スペース(2)に続くバー(3)の幅W13はカウンタ部40により計数され、そのカウントデータ値が幅W13データとなる。
【0030】
このバー(3)に続くスペース(4)の幅W14もカウンタ部40により計数され、そのカウントデータ値は幅W14データとなる。スペース(4)に続くバー(5)の幅W15はカウンタ部40により計数され、そのカウントデータ値が幅W15データとなる。バー(5)に続くスペース(6)の幅W16もカウンタ部40により計数され、そのカウントデータ値が幅W16データとなる。上述の6種類の幅W11データ〜幅W16データはバーコードデータ値D30を構成する。バーコードデータ値D30はインターフェース部11を介してCPU23に出力される。
【0031】
ステップST83でCPU33はキャラクタC1の1モジュール幅を算出する。この例では、CPU33は、1キャラクタ分の6本の幅W11データ〜幅W16データのバーコードデータ値D30をキャラクタのモジュール数に換算して2本加算パターンのモジュール数を求めている。図15Eに示したように、カウンタ部40のカウントデータ値から、5種類の幅W21データ〜幅W25データがCPU33に順次出力される。
【0032】
例えば、CPU33は幅W21データを入力し、キャラクタC1のバー(1)とスペース(2)とを加算した加算幅W21のモジュール数を求める。モジュール数は全キャラクタ幅=11モジュールに対する加算幅W21の比率、例えば、2.4を算出する。この場合、加算幅W21のモジュール数は、バーやスペース等の各エレメントの最大誤差が0.5以内となるように、当該モジュール数を四捨五入して最も近い整数になされる。例えば、W21のモジュール数が2.4の場合、W21のモジュール数は「2」である。モジュール数が2.6の場合、W21のモジュール数は「3」である。
【0033】
ステップST84でCPU33は1キャラクタ分のバーコードデータ値D30を2本加算パターンに変換する。例えば、図15Eに示したキャラクタC1のバー(1)とスペース(2)の各々がCPU33によって加算された加算幅W21を示すカウントデータ値が幅W21データとなる。キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々がCPU33によって加算された加算幅W22を示すカウントデータ値が幅W22データとなる。
【0034】
キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々がCPU33によって加算された加算幅W23を示すカウントデータ値が幅W23データとなる。キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々がCPU33によって加算された加算幅W24を示すカウントデータ値が幅W24データとなる。キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々がCPU33によって加算された加算幅W25を示すカウントデータ値が幅W25データとなる。
【0035】
その後、ステップST85でCPU33は、先に変換した2本加算パターンが一致するキャラクタを検索する。この例では、図14に示したカウンタ部40から出力されるバーコードデータ値D30に基づいて、CPU33が5種類の幅W21データ〜幅W25データ(2本加算データ)に関して、先に変換されたモジュール値と、期待値キャラクタの理論値とが一致するキャラクタを検索する。従来方式では、この段階でキャラクタが決定する。
【0036】
ステップST86でCPU33は一致するキャラクタの存在有無に基づいて制御を分岐する。一致するキャラクタが存在する場合は、ステップST87で2本加算パターンが一致したキャラクタをデコード結果とする。その後、図17に示すステップST88に移行する。
【0037】
上述のステップST87でデコード結果となされたキャラクタについては、ステップST88で、CPU33はマージン直後のキャラクタか否かに基づいて制御を分岐する。デコード結果となされたキャラクタが、マージン直後のキャラクタではない場合は、ステップST89に移行してCPU33はデコード結果がストップキャラクタか否かに基づいて制御を分岐する。
【0038】
デコード結果がストップキャラクタではない場合は、ステップST90に移行してCPU33は、誤り検知(パリティチェック)を実行して、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、ステップST91でCPU33は読み取りを完了し、デコードバッファ25のバーコードデータD12を出力し、デコードバッファ25をクリアする(正常終了)。その後、ステップST95に移行する。
【0039】
なお、ステップST88でマージン直後のキャラクタである場合は、ステップST92に移行してCPU33は、デコード結果がスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST89でデコード結果がストップキャラクタである場合及び、ステップST92でデコード結果がスタートキャラクタである場合は、図16に示すステップST83に移行する。ステップST83でCPU33は、次キャラクタ(6本後ろのバーコードデータ値D30)のデコード処理を実行する。その後、ステップST81に戻る。
【0040】
また、図16に示したステップST86で一致するキャラクタが存在しない場合、図17に示したステップST92でデコード結果がスタートキャラクタではない場合及び、ステップST90でチェックデジットが誤っている場合は、ステップST94に移行してCPU33は、読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。
【0041】
その後、ステップST95に移行して、CPU33は終了を判別する。例えば、当該光学情報読取装置20に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST81に戻って、上述した内容を繰り返すようになされる。
【先行技術文献】
【特許文献】
【0042】
【特許文献1】特許4555952号公報(第4頁 図1)
【発明の概要】
【発明が解決しようとする課題】
【0043】
ところで、従来例に係る光学情報読取装置20によれば、特許文献1に見られるようなバーコード記号読取装置の構成に、1キャラクタに関して、2本幅加算方式を導入して難読キャラクタをデコード可能な光学情報読取装置を作成しようとした場合、次のような問題がある。
i.従来方式の光学情報読取装置20では、キャラクタパターン算出時、バー及びスペースを含む各エレメントの誤差許容度が±0.5モジュール以内に設定され、1キャラクタ分の6本の幅W11データ〜幅W16データのバーコードデータ値D30がキャラクタのモジュール数に換算されて、2本加算パターンのモジュール数が求められている。しかも、バーやスペース等の各エレメントの最大誤差が0.5以内となるように、2本加算パターンのモジュール数が四捨五入して最も近い整数になされている。
【0044】
従って、加算幅W21のキャラクタのモジュール数の計数値が2.4の場合、本来、整数の候補として「2」と「3」となるにも関わらず、モジュール数が四捨五入されて最も近い整数として、モジュール数が「2」となされてしまう(ステップST83参照)。
【0045】
因みに、期待値キャラクタとして、モジュール数が「3」であったような場合であって、印刷技術や貼付技術等によって、バーコード記号を構成するバーやスペースに、欠落や傷等が介在して、モジュール数の計数値が2.4となった場合に、±1.0の誤差が介入する結果となって、バーコード記号を正確に読み取れないという問題がある。誤差が±0.5モジュールを越えるエレメントが存在した場合は、読み取りエラーとなっていた(ステップST94参照)。
【0046】
ii.また、キャラクタパターン検索時、5種類の幅W21データ〜幅W25データ(2本加算データ)に対して一致するキャラクタを検索しているが、誤差が±0.5モジュールを越えるエレメントを含むキャラクタは検索対象から除外されてしまう。従って、ステップST83で四捨五入によって誤差を含んだキャラクタを含むキャラクタがデコード結果と決定される場合が想定される。この結果、従来方式のバーコード読み取り方法によると、バーやスペース等のエレメントが傷やかすれた場合に、バーコードを誤読してしまい、バーコードデータを正確に出力することが困難となるという問題がある。
【0047】
そこで、本発明は上述した課題を解決したものであって、従来方式のバーコード読み取り方法に比べてバーコードの誤読取を防止できるようにすると共に、エレメントが傷やかすれた場合であっても、正確なバーコードデータを出力できるようにした光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体を提供することを目的とする。
【課題を解決するための手段】
【0048】
上述の課題を解決するために、請求項1に記載の光学情報読取装置は、1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求め、前記2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求める演算手段と、前記演算手段によって求められた前記2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する抽出手段と、前記抽出手段によって抽出された各々の前記2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段とを備えることを特徴とするものである。
【0049】
請求項1に係る光学情報読取装置によれば、バーコード記号を読み取ってそのデコード結果を出力する場合に、演算手段は、1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求め、この2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求める。抽出手段は、演算手段によって求められた2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となるキャラクタを候補キャラクタとして抽出する。これらを前提にして、検索手段が抽出手段によって抽出された各々の2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。
【0050】
この検索によって、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0051】
請求項2に記載の光学情報読取装置は、請求項1において、前記演算手段は、当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とするものである。
【0052】
請求項3に記載の光学情報読取装置は、請求項1において、前記抽出手段は、当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とするものである。
【0053】
請求項4に記載の光学情報読取装置は、請求項1において、前記検索手段は、前記抽出手段から得られた複数の前記対象キャラクタの各々の前記2〜n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とするものである。
【0054】
請求項5に記載の光学情報読取装置は、請求項1において、前記検索手段は、前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを検索することを特徴とするものである。
【0055】
請求項6に記載の光学情報読取装置は、請求項5において、前記検索手段は、前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とするものである。
【0056】
請求項7に記載の光学情報読取装置は、請求項1において、前記1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別する比較手段を備えることを特徴とするものである。
【0057】
請求項8に記載の光学情報読取方法は、光学情報読取装置が、1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求めるステップと、求めた前記2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求めるステップと、求めた前記2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、抽出された各々の前記2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行することを特徴とするものである。
【0058】
請求項9に記載の光学情報読取方法は、請求項8において、当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とするものである。
【0059】
請求項10に記載の光学情報読取方法は、請求項9において、前記2〜n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該キャラクタの前後の1本以上の幅データとを抽出することを特徴とするものである。
【0060】
請求項11に記載の光学情報読取方法は、請求項10において、抽出された複数の前記対象キャラクタの各々の前記2〜n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とするものである。
【0061】
請求項12に記載の光学情報読取方法は、請求項8において、前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを抽出することを特徴とするものである。
【0062】
請求項13に記載の光学情報読取方法は、請求項12において、前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とするものである。
【0063】
請求項14に記載の光学情報読取方法は、請求項8において、前記1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別することを特徴とするものである。
【0064】
請求項15に記載のコンピュータが読み取り可能なプログラムは、請求項8乃至14に記載の光学情報読取方法を実行するための指令を組み合わせたことを特徴とするものである。
【0065】
請求項16に記載のコンピュータが読み取り可能な記録媒体は、請求項8乃至14に記載の光学情報読取方法を実行するためのプログラムが記述されていることを特徴とするものである。
【発明の効果】
【0066】
請求項1に係る光学情報読取装置及び、請求項8に係る光学情報読取方法によれば、2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタが抽出され、ここに抽出された各々の2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段を備えるものである。
【0067】
この構成によって、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0068】
請求項2に記載の光学情報読取装置及び、請求項9に記載の光学情報読取方法によれば、当該対象キャラクタの2〜n本加算エレメント幅を各々求める際に、対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算するので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。
【0069】
請求項3に記載の光学情報読取装置及び、請求項10に記載の光学情報読取方法によれば、当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出するので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。
【0070】
また、請求項3に係る光学情報読取装置及び請求項10に係る光学情報読取方法によれば、1キャラクタ分のn本の幅データと、当該キャラクタの前後の1本以上の幅データとを抽出するので、2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる候補キャラクタを従来方法に比べてより多く抽出できるようになり、第1番目に相関が強いものをデコード結果とするだけでなく、第2番目、第3番目・・・に相関が強いものがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。
【0071】
請求項4に記載の光学情報読取装置及び、請求項11に記載の光学情報読取方法によれば、抽出された複数の前記対象キャラクタの各々の前記2〜n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、候補キャラクタの数を絞り込むので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0072】
請求項5に記載の光学情報読取装置及び、請求項12に記載の光学情報読取方法によれば、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0073】
請求項6に記載の光学情報読取装置及び、請求項13に記載の光学情報読取方法によれば、誤差値が最小となる候補キャラクタと一致する期待値キャラクタを検出するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0074】
請求項7に記載の光学情報読取装置及び、請求項14に記載の光学情報読取方法によれば、当該1キャラクタ分の幅データが適切か否かの判別結果に基づいてキャラクタのバーの消失や分割等を判断できるようになる。複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。
【0075】
請求項15に係るコンピュータが読み取り可能なプログラム及び請求項16に係る記録媒体によれば、本発明に係る光学情報読取方法を実行するための指令を組み合わせたので、複数の候補キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータを当該バーコード記号の読取時のデコード結果として出力できるようになる。従って、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【図面の簡単な説明】
【0076】
【図1】本発明に係る実施形態としてのバーコード記号読取装置100の構成例を示すブロック図である。
【図2】(A)〜(G)は第1の実施例に係る1本データ、2〜6本加算データの算出例を示す説明図である。
【図3】第1の実施例に係る難読キャラクタのデコード例(その1)を示すフローチャートである。
【図4】難読キャラクタのデコード例(その2)を示すフローチャートである。
【図5】(A)〜(G)は、第1の実施例に係る1本データ、2本〜6本加算データの他の算出例(その1)を示す説明図である。
【図6】(A)〜(G)は、第1の実施例に係る1本データ、2本〜6本加算データの他の算出例(その2)を示す説明図である。
【図7】(A)〜(C)は、CODE128のバーコード記号例、その欠損例及びその再構成例を示す説明図である。
【図8】第2の実施例に係る難読キャラクタのデコード例(その1)を示すフローチャートである。
【図9】難読キャラクタのデコード例(その2)を示すフローチャートである。
【図10】難読キャラクタのデコード例(その3)を示すフローチャートである。
【図11】第3の実施例に係る難読キャラクタのデコード例(その1)を示すフローチャートである。
【図12】難読キャラクタのデコード例(その2)を示すフローチャートである。
【図13】難読キャラクタのデコード例(その3)を示すフローチャートである。
【図14】従来例に係る光学情報読取装置20の構成例を示すブロック図である。
【図15】(A)〜(D)は、2本加算データの算出例を示す説明図である。
【図16】難読キャラクタのデコード例(その1)を示すフローチャートである。
【図17】難読キャラクタのデコード例(その2)を示すフローチャートである。
【発明を実施するための形態】
【0077】
以下、図面を参照しながら、本発明に係る光学情報読取装置、光学情報読取方法、コンピュータが読み取り可能なプログラム及び記録媒体について説明する。図1に示すバーコード記号読取装置100は光学情報読取装置の一例を構成し、バーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続くキャラクタをデコード処理してバーコードデータD12を出力するものである。
【0078】
バーコード記号読取装置100は、光学読取部2、クロック発生部3、カウンタ部4、m段データバッファ5、x倍器7、セレクタ部6、比較器8、スタートマージン格納部9、幅データ格納部10、インターフェース部11、マイクロプロセッサ12及びデコードバッファ25を有して構成される。なお、従来例と同じ名称及び同じ符号のものは同じ機能を有するのでその説明を省略する。
【0079】
カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、当該CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅や、n本加算幅を示すカウントデータD4(バーコードデータ値:数値)に変換する。
【0080】
カウンタ部4には幅データ格納部10が接続される。幅データ格納部10は、カウンタ部4から順次出力される1本幅、n本加算幅の対象キャラクタに係るカウントデータD4を、時系列的にすべて格納して保存する。幅データ格納部10は、フリップフロップ回路や、DRAM等のような記憶回路から構成される。幅データ格納部10は、1本幅、n本加算幅の対象キャラクタに係るカウントデータD4を各キャラクタの幅データD10(バーコードデータ値D30に対応)として出力する。スタートマージン格納部9及び幅データ格納部10にはインターフェース部11が接続される。
【0081】
マイクロプロセッサ12は、インターフェース部11を介して入力されるSMFデータD9や、各キャラクタの幅データD10によって、バーコードの認識処理を実行する。マイクロプロセッサ12は、プログラム格納用の読み出し専用メモリ(Read Only Memory:以下ROM21という)、ワークメモリ用の随時情報の書き込み読出し可能なメモリ(Random Access Memory:以下RAM22という)、及び中央処理ユニット(Central Processing Unit;以下CPU23という)及び期待値格納部24を含むマイクロコンピュータを構成している。
【0082】
ROM21は記録媒体の一例を構成する。ROM21にはコンピュータが読み取り可能なプログラムであって、本発明に係る光学情報読取方法を実行するための指令を組み合わせたプログラムデータDpが格納される。その内容は、バーコード記号読取装置100が、1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求めるステップと、求めた2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求めるステップと、ここで求めた2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、抽出された各々の2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行するプログラムである。ここに候補キャラクタとは対象キャラクタを絞り込んだキャラクタをいう。プログラムデータDpには、システム起動用のシステムプログラムデータも含まれる。
【0083】
RAM22にはバーコード記号読取装置100を制御するためのシステムプログラムの他に、光学情報読取方法を実行するための演算や、抽出、検索、比較等の制御を実行する際の制御情報が一時格納される。例えば、電源がオンされると、電源オン情報を検出したCPU23は、ROM21からシステムプログラムを読み出してRAM22に展開し、システムを起動して、当該バーコード記号読取装置100全体を制御するようになされる。
【0084】
この例で、CPU23は、少なくとも、演算部23aや、抽出部23b、比較部23c、検索部23d等の4つの機能を有している。演算部23aは演算手段の一例を構成し、各対象キャラクタの幅データD10を入力し、幅データD10に基づいて1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求める。演算部23aは、求めた2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求める。
【0085】
抽出部23bは、演算部23aによって求められた2〜n本加算エレメント幅(以下で2〜n本加算パターンともいう)の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。抽出部23bは、2〜n本加算パターンを各々求める際に、1キャラクタ分のn本の幅データD10と、対象キャラクタの前後の1本以上の幅データD10とを抽出する。
【0086】
この例では、対象キャラクタの抽出基準を従来方式の誤差0.5以内の整数から誤差1以内の整数へと範囲を拡大し、1キャラクタ分のn本の幅データD10と、対象キャラクタの前後の1本以上の幅データD10とを抽出するようにした。従って、2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを従来方法に比べて、より多く抽出できるようになる。しかも、第1番目に相関が強いものをデコード結果とするだけでなく、第2番目、第3番目・・・に相関が強いものがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0087】
比較部23cは、抽出部23bによって抽出された各々の2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタ(理論値)とを比較する。比較部23cは判別機能を有しており、1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データD10が適切か否かを判別する。
【0088】
この判別によって、キャラクタのバーの消失や分割等を判断できるようになる。また、複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。また、バーの消失や分割等の判断結果に基づいて対象キャラクタを絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。
【0089】
検索部23d 検索部23dは、候補キャラクタと最も相関が強い期待値キャラクタを検索する。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0090】
マイクロプロセッサ12には期待値格納部24が接続される。期待値格納部24には期待値キャラクタ(理論値)が格納されている。期待値キャラクタはCODE128規格のキャラクタの各エレメントを構成するモジュール数(理論値)である。これらにより、バーコード記号読取装置100を構成する。CPU23内の演算部23a、抽出部23b、比較部23c及び、検索部23dはソフトウエアでも、ハードウェアでもどちらで構築してもよい。
【実施例1】
【0091】
続いて、図2A〜Gを参照して、第1の実施例に係る1本データ、2〜6本加算データの算出例について説明する。この実施例では、CODE128規格のバーコード記号1について説明する。CODE128規格によれば、図2Aに示す1キャラクタは、3本の黒部分のバー(1),(3),(5)及び3本の白部分のスペース(2),(4),(6)から構成される。図中、C1は対象キャラクタであり、C0は対象キャラクタC1の1つ前のキャラクタであり、C2はその1つ後ろのキャラクタである。
【0092】
1キャラクタの全幅は11モジュールから構成される。この例で、黒部分のバー(1)は4モジュールから成り、バー(3)及びバー(5)は各々1モジュールから成る。白部分のスペース(2)は4モジュールから成り、スペース(4)及び(6)は各々2モジュールから成る。
【0093】
スタートコードは3種類あり、それぞれ103種類のコードパターンが表される。CODE128規格では、アスキー128文字を表現できるようになっている。スタートコードCを使用すれば、1キャラクタで数字2桁を表現でき、非常に高い印字密度で表現できる。CODE128のバーコード記号1は8キャラクタから構成される(図5A参照)。バーに用いるモジュール数の和は偶数パリティであり、スペースに用いるモジュール数の和は奇数パリティとなっている。偶数パリティ及び奇数パリティを利用した自己機能を持っている。
【0094】
図2Bに示すW11は対象キャラクタC1の黒部分のバー(1)の幅である。バー(1)の幅はカウンタ部4により計数され、そのカウントデータ値は幅W11データを成す。W12はバー(1)に続くスペース(2)の幅である。スペース(2)の幅もカウンタ部4により計数され、そのカウントデータ値は幅W12データを成す。W13は対象キャラクタC1のスペース(2)に続くバー(3)の幅である。バー(3)の幅はカウンタ部4により計数され、そのカウントデータ値は幅W13データを成す。
【0095】
W14は対象キャラクタC1のバー(3)に続くスペース(4)の幅である。スペース(4)の幅もカウンタ部4により計数され、そのカウントデータ値は幅W14データを成す。W15はスペース(4)に続くバー(5)の幅である。バー(5)の幅はカウンタ部4により計数され、そのカウントデータ値は幅W15データを成す。W16は対象キャラクタC1のバー(5)に続くスペース(6)の幅である。スペース(6)の幅もカウンタ部4により計数され、そのカウントデータ値は幅W16データを成す。上述の6種類の幅W11データ〜幅W16データは1キャラクタの1本データであり、幅データD10を構成する。
【0096】
図2Cに示すW21は対象キャラクタC1のバー(1)とスペース(2)の各々が演算部23aによって加算された幅(以下バー(1)+スペース(2)と記す)である。バー(1)+スペース(2)の加算幅を示すカウントデータ値は幅W21データを成す。W22は対象キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)の加算幅を示すカウントデータ値は幅W22データを成す。
【0097】
W23は対象キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)の加算幅を示すカウントデータ値は幅W23データを成す。W24は対象キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)の加算幅を示すカウントデータ値は幅W24データを成す。W25は対象キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W25データを成す。上述の5種類の幅W21データ〜幅W25データは1キャラクタの2本加算データであり、幅データD10を構成する。
【0098】
図2Dに示すW31は対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値は幅W31データを成す。W32は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値は幅W32データを成す。
【0099】
W33は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値は幅W33データを成す。W34は対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W34データを成す。上述の4種類の幅W31データ〜幅W34データは1キャラクタの3本加算データであり、幅データD10を構成する。
【0100】
図2Eに示すW41は対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値は幅W41データを成す。W42の対象キャラクタC1はバー(1)に続くスペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値は幅W42データを成す。
【0101】
W43は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W43データを成す。上述の3種類の幅W41データ〜幅W43データは1キャラクタの4本加算データであり、幅データD10を構成する。
【0102】
図2Fに示すW51は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値は幅W51データを成す。
【0103】
W52は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W52データを成す。上述の2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データであり、幅データD10を構成する。
【0104】
図2Gに示すW61は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値は幅W61データを成す。1種類の幅W61データは1キャラクタの6本加算データであり、幅データD10を構成する。
【0105】
上述のカウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ〜幅W16データ(1本データ)、5種類の幅W21データ〜幅W25データ(2本加算データ)、4種類の幅W31データ〜幅W34データ(3本加算データ)、3種類の幅W41データ〜幅W43データ(4本加算データ)、2種類の幅W51データ及び幅W52データ(5本加算データ)及び、1種類の幅W61データ(6本加算データ)の合計で、21種類の対象キャラクタが得られる。
【0106】
続いて、本発明に係る光学情報読取方法について、図3及び図4を参照し、第1の実施例に係る難読キャラクタのデコード例を説明する。この実施例では、CODE128規格に基づくバーコード記号1を読み取って、そのスタートマージンを検索し、更に、スタートマージンに続く対象キャラクタをデコード処理してバーコードデータD12を出力する場合を例に挙げる。その場合のバーコード記号1のバー及びスペースの各エレメントの誤差許容度(最大誤差範囲)が、±1.0モジュールに設定される。バーコード記号1については図2に示した対象キャラクタC1について説明する(キャラクタデコードアルゴリズム)。
【0107】
これらをデコード条件にして、まず、図3に示すフローチャートのステップST1でマイクロプロセッサ12はスタートマージンを検索する。このとき、光学読取部2は、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。
【0108】
カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び6本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー(黒部分)の幅およびスペース(白部分)の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。
【0109】
m段データバッファ5はカウンタ部4から出力されるカウントデータD4を、m段分(mは任意の整数)だけ一時格納する。m段は、バーコード記号1の印刷状態により任意に設定されている。x倍器7は、カウントデータD4からスタートマージンを検索するに当たり、カウントデータD4を何倍かを示す「x」が予め設定され、そのx倍の演算を行って、x倍データD7を出力する。
【0110】
セレクタ部6は、マイクロプロセッサ12の選択制御を受けて、m段データバッファ5に一時格納されたm段分のカウントデータD4のうち、比較対象とするデータを選択する。比較器8はセレクタ部6が選択した、m段データバッファ5中のk段前までの各カウントデータD4と、x倍器7から出力されるx倍データD7とを比較する。
【0111】
比較結果によってx倍器7からのx倍データD7の方が小さいときは、スタートマージン候補があったと判定し、スタートマージン候補検索フラグ(以下でSMFデータD9という)を発生する。SMFデータD9はスタートマージン格納部9に出力される。スタートマージン格納部9には比較器8から出力されるSMFデータD9、そのとき比較対象としたカウントデータ値=D10とが対応させて格納される。
【0112】
ステップST2でCPU23は1キャラクタ分の幅データD10(6本)と、その前後の5本ずつ幅データD10を抽出する。図2Bに示した対象キャラクタC1によれば、黒部分のバー(1)の幅W11がカウンタ部4により計数され、そのカウントデータ値が幅W11データとなる。バー(1)に続く白部分のスペース(2)の幅W12もカウンタ部4により計数され、そのカウントデータ値が幅W12データとなる。スペース(2)に続くバー(3)の幅W13はカウンタ部4により計数され、そのカウントデータ値が幅W13データとなる。
【0113】
このバー(3)に続くスペース(4)の幅W14もカウンタ部4により計数され、そのカウントデータ値は幅W14データとなる。スペース(4)に続くバー(5)の幅W15はカウンタ部4により計数され、そのカウントデータ値が幅W15データとなる。バー(5)に続くスペース(6)の幅W16もカウンタ部4により計数され、そのカウントデータ値が幅W16データとなる。上述の6種類の幅W11データ〜幅W16データは幅データD10を構成する。幅データD10はインターフェース部11を介してCPU23に出力される。
【0114】
CPU23では、演算部23aが各対象キャラクタの幅データD10を入力し、幅データD10に基づいて1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算パターンを各々求める。この例ではn=6である。2〜n本加算エレメント幅を各々求める際に、1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の5本の幅データD10とを抽出する。
【0115】
例えば、図2Cに示した対象キャラクタC1のバー(1)とスペース(2)の各々が演算部23aによって加算され、その加算幅W21を示すカウントデータ値が幅W21データとなる。対象キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々が演算部23aによって加算され、その加算幅W22を示すカウントデータ値が幅W22データとなる。対象キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々が演算部23aによって加算され、その加算幅W23を示すカウントデータ値が幅W23データとなる。
【0116】
対象キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々が演算部23aによって加算され、その加算幅W24を示すカウントデータ値が幅W24データとなる。対象キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々が演算部23aによって加算され、その加算幅W25を示すカウントデータ値が幅W25データとなる。上述の5種類の幅W21データ〜幅W25データは幅データD10を構成する。
【0117】
図2Dに示した対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算され、その加算幅W31を示すカウントデータ値が幅W31データとなる。対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算され、その加算幅W32を示すカウントデータ値が幅W32データとなる。
【0118】
対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算され、その加算幅W33を示すカウントデータ値が幅W33データとなる。対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算され、その加算幅W34を示すカウントデータ値が幅W34データとなる。上述の4種類の幅W31データ〜幅W34データは幅データD10を構成する。
【0119】
図2Eに示した対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算され、その加算幅W41を示すカウントデータ値が幅W41データとなる。対象キャラクタC1はバー(1)に続くスペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算され、その加算幅W42を示すカウントデータ値が幅W42データとなる。
【0120】
対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算され、その加算幅W43を示すカウントデータ値が幅W43データとなる。上述の3種類の幅W41データ〜幅W43データは幅データD10を構成する。
【0121】
図2Fに示した対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算され、その加算幅W51を示すカウントデータ値が幅W51データとなる。対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算され、その加算幅W52を示すカウントデータ値が幅W52データを成す。上述の2種類の幅W51データ及び幅W52データは幅データD10を構成する。
【0122】
図2Gに示した対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算され、その加算幅W61を示すカウントデータ値が幅W61データとなる。1種類の幅W61データは幅データD10を構成する。
【0123】
上述のカウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ〜幅W16データ(1本データ)、5種類の幅W21データ〜幅W25データ(2本加算データ)、4種類の幅W31データ〜幅W34データ(3本加算データ)、3種類の幅W41データ〜幅W43データ(4本加算データ)、2種類の幅W51データ及び幅W52データ(5本加算データ)及び、1種類の幅W61データ(6本加算データ)の合計で、21種類の対象キャラクタが得られる。
【0124】
ステップST3でCPU23は対象キャラクタC1の1モジュール幅を算出する。この例では、演算部23aは、先に求めた2〜6本加算パターン(エレメント幅)の各々を1キャラクタのモジュール数に換算して2〜6本加算パターンのモジュール数を求める。図2B〜Gに示したように、カウンタ部4から出力されるカウントデータ値から、6種類の幅W11データ〜幅W16データ、5種類の幅W21データ〜幅W25データ、4種類の幅W31データ〜幅W34データ、3種類の幅W41データ〜幅W43データ、2種類の幅W51データ及び幅W52データ及び、1種類の幅W61データがCPU23に順次出力される。
【0125】
例えば、演算部23aは幅W21データを入力し、対象キャラクタC1のバー(1)とスペース(2)とを加算した加算幅W21のモジュール数を求める。モジュール数は全キャラクタ幅=11モジュールに対する加算幅W21の比率、例えば、2.4を算出する。この場合、加算幅W21のモジュール数は、バーやスペース等の各エレメントの最大誤差が1.0以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するので、加算幅W21のモジュール数は「2」又は「3」となる。
【0126】
この例では、各エレメントの最大誤差範囲を±1.0モジュール以内に拡張したので、各エレメントの誤差許容度が1.0以内まで許容量を増加できるようになる。許容量を増加したので、対象キャラクタ一致を採る条件を増加できる。これにより、バーコード記号1の誤読取を防止できるようになる。
【0127】
ステップST4でCPU23は抽出された21種類の幅データD10を1〜6本加算パターン(エレメント幅)に変換する。この例では、6種類の幅W11データ〜幅W16データが1キャラクタの1本データに変換され、1本データに基づく対象キャラクタC1の被認識パターンとして、1本パターンが作成される。5種類の幅W21データ〜幅W25データは1キャラクタの2本加算データに変換され、2本加算データに基づく対象キャラクタC1の2本加算パターン(被認識パターン)が作成される。4種類の幅W31データ〜幅W34データは1キャラクタの3本加算データに変換され、3本加算データに基づく対象キャラクタC1の3本加算識パターンが作成される。
3種類の幅W41データ〜幅W43データは1キャラクタの4本加算データに変換され、4本加算データに基づく対象キャラクタC1の4本加算パターンが作成される。2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データに変換され、5本加算データに基づく対象キャラクタC1の5本加算パターンが作成される。1種類の幅W61データは1キャラクタの6本加算データに変換され、6本加算データに基づく対象キャラクタC1の6本加算パターンが作成される。
【0128】
ステップST5でCPU23は対象キャラクタを絞り込むために、1本パターン、2〜6本加算パターンの全てに対してモジュール数の誤差が1以内の対象キャラクタを検索して候補キャラクタを決定する。このとき、CPU23では抽出部23bが、演算部23aによって求められた1本パターン、2〜6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。その際に、抽出部23bは、演算部23aによって求められた1本パターン、2〜6本加算パターンの1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の(6−1)本の幅データD10とを抽出する。
【0129】
ステップST6でCPU23は、候補キャラクタが1つ以上存在するか否かに基づいて制御を分岐する。対象キャラクタが1つ以上(複数)存在する場合は、ステップST7で1〜6本加算パターンの実測値とその理想値との間の誤差を算出し、この誤差の合計が最小となった候補キャラクタをデコード結果とする。この誤差値が最小となる候補キャラクタは、期待値キャラクタと最も相関が強いキャラクタである。この例では、総合的な誤差が最も少ない対象キャラクタを候補キャラクタとして選択できるようになる。
【0130】
このとき、CPU23では、期待値キャラクタ(理論値)が期待値格納部24からCPU23の比較部23cへ読み出される。比較部23cは、抽出部23bによって抽出された各々の2〜6本加算パターン(エレメント幅)のモジュール数の候補キャラクタと、候補キャラクタを評価するための期待値キャラクタ(理論値)とを比較する。この比較結果は検索部23dへ出力される。
【0131】
検索部23dでは、候補キャラクタと最も相関が強い期待値キャラクタが検索される。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。
【0132】
以後は従来方式と同じ内容となる。例えば、図4に示すステップST8でCPU23は、デコード結果の候補キャラクタがマージン直後の対象キャラクタか否かに基づいて制御を分岐する。デコード結果の候補キャラクタがマージン直後の対象キャラクタである場合は、ステップST9に移行してCPU23はデコード結果の候補キャラクタがストップキャラクタか否かに基づいて制御を分岐する。
【0133】
デコード結果の候補キャラクタがストップキャラクタではない場合は、ステップST10に移行してCPU23は誤り検知(パリティチェック)を実行し、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、読み取りを完了し、ステップST11でCPU23はデコード結果となされた候補キャラクタのバーコードデータD12を出力する。
【0134】
なお、ステップST8でCPU23はデコード結果の候補キャラクタがマージン直後の対象キャラクタでない場合は、ステップST12に移行して、CPU23はデコード結果の候補キャラクタがスタートキャラクタか否かに基づいて制御を分岐する。
【0135】
上述のステップST9でCPU23はデコード結果の候補キャラクタがストップキャラクタである場合及び、ステップST12でデコード結果の候補キャラクタがスタートキャラクタである場合は、図3に示すステップST13に移行する。ステップST13で、CPU23は次キャラクタ(6本後ろのデータ)のデコード処理を実行する。その後、ステップST2に戻る。
【0136】
また、ステップST12でデコード結果の候補キャラクタがスタートキャラクタでない場合及び、ステップST10でチェックデジットが誤っている場合は、ステップST14に移行して、CPU23は読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。
【0137】
その後、ステップST15に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST1に戻って、上述した内容を繰り返すようになされる。
【0138】
このように第1の実施例に係るバーコード記号読取装置100によれば、バーコード記号1を読み取ってそのデコード結果を出力する場合に、演算部23aは、1キャラクタ内で隣接するバー及びスペースを含むn=6(n≧2)本のエレメントの幅を加算して2〜6本加算パターン(エレメント幅)を各々求める。演算部23aは、2〜6本加算パターンの各々を1キャラクタのモジュール数に換算して当該2〜6本加算パターンのモジュール数を求める。
【0139】
抽出部23bは、演算部23aによって求められた2〜6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する。これらを前提にして、検索部23dが抽出部23bによって抽出された各々の2〜6本加算パターンのモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。
【0140】
この検索によって、複数の対象キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータD12を当該バーコード記号1の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコード記号1の誤読取を防止できるようになる。
【0141】
しかも、誤差の範囲を従来方式の±0.5から±1.0に拡大し、候補キャラクタを増加させている。そして、1キャラクタ分の6本の幅データD10と、当該キャラクタC1の前後の5本の幅データD10とを抽出するので、2〜6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んだ候補キャラクタを従来方法に比べてより多く抽出できるようになる。
【0142】
また、第1番目に相関が強い候補キャラクタをデコード結果とするだけでなく、第2番目、第3番目・・・に相関が強い候補キャラクタがデコード結果となる確率が高くなるというようにデコード結果の候補キャラクタを複数出力できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、誤差の範囲を設定する際の閾値を可変することで、幅データD10の信頼性を選択することも可能となる。
【0143】
続いて、図5A〜Gを参照して、第1の実施例に係る1本データ、2本加算データの他の算出例(その1)について説明する。この例では、対象キャラクタC1の両側のキャラクタC0,C2まで加算範囲を拡張したものである。対象キャラクタC1と隣接する1つ前のキャラクタC0のスペース(6)及びバー(5)の2エレメントまで加算範囲を拡張し、1つ後ろのキャラクタC2のバー(1)及びスペース(2)の2エレメントまで加算範囲を拡張する場合を前提とする。
【0144】
図5Aに示す対象キャラクタC1の1つ前にはキャラクタC0が設けられ、対象キャラクタC1の1つ後ろにはキャラクタC2が設けられる。各々のキャラクタC0〜C2は、その各々が全幅11モジュールから構成される。3個のバー(1),(3),(5)及び3個のスペース(2),(4),(6)から構成される。バー(1)のモジュール数は「4」であり、バー(3),(5)のモジュール数は「1」である。また、スペース(2)のモジュール数は「1」であり、スペース(4),(6)のモジュール数は「2」である。これらのキャラクタC0〜C2を有したバーコードの場合を例に挙げて、対象キャラクタの作成する場合を説明する。
【0145】
図5Bに示す対象キャラクタC1のW11は、黒部分のバー(1)の幅である。バー(1)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W11データを成す。W12は対象キャラクタC1のバー(1)に続くスペース(2)の幅である。スペース(2)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W12データを成す。W13は対象キャラクタC1のスペース(2)に続くバー(3)の幅である。バー(3)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W13データを成す。
【0146】
W14は対象キャラクタC1のバー(3)に続くスペース(4)の幅である。スペース(4)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W14データを成す。W15は対象キャラクタC1のスペース(4)に続くバー(5)の幅である。バー(5)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W15データを成す。W16は対象キャラクタC1のバー(5)に続くスペース(6)の幅である。スペース(6)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W16データを成す。上述の6種類の幅W11データ〜幅W16データは1キャラクタの1本データであり、幅データD10を構成する。」
図5Cに示すW2-1は、1つ前の対象キャラクタC0のスペース(6)と対象キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W2-1データを成す。W21は1つ前のキャラクタC0のスペース(6)に続く対象キャラクタC1のバー(1)とスペース(2)の各々が演算部23aによって加算された幅(以下バー(1)+スペース(2)と記す)である。バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W21データを成す。W22は対象キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W22データを成す。
【0147】
W23は対象キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W23データを成す。W24は対象キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W24データを成す。
【0148】
W25は対象キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W25データを成す。W26はバー(5)に続くスペース(6)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W26データを成す。上述の7種類の幅W2-1データ〜幅W26データは1キャラクタの2本加算データであり、幅データD10を構成する。
【0149】
図5Dに示すW3-2は、1つ前のキャラクタC0のバー(5)、スペース(6)及び、対象キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W3-2データを成す。W3-1は、1つ前のキャラクタC0のスペース(6)、対象キャラクタC1のバー(1)及び、スペース(2)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W3-1データを成す。
【0150】
W31は対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W31データを成す。W32は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W32データを成す。
【0151】
W33は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W33データを成す。W34は対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W34データを成す。
【0152】
W35は、対象キャラクタC1のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W35データを成す。W36は、対象キャラクタC1のバー(3)に続くスペース(6)の1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W36データを成す。上述の8種類の幅W3-2データ〜幅W36データは1キャラクタの3本加算データであり、幅データD10を構成する。
【0153】
図5Eに示すW4-2は、1つ前のキャラクタC0のバー(5)、スペース(6)、対象キャラクタC1のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W4-2データを成す。W4-1は、1つ前のキャラクタC0のスペース(6)、対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W4-1データを成す。
【0154】
W41は対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W41データを成す。W42は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W42データを成す。
【0155】
W43は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W43データを成す。W44は、対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W44データを成す。
【0156】
W45は、対象キャラクタC1の白のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及び、スペース(2)の幅である。バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W45データを成す。上述の7種類の幅W4-2データ〜幅W45データは、1キャラクタの4本加算データであり、幅データD10を構成する。
【0157】
図5Fに示すW5-2は、1つ前のキャラクタC0のバー(5)、スペース(6)、対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W5-2データを成す。W5-1は、1つ前のキャラクタC0のスペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W5-1データを成す。
【0158】
W51は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W51データを成す。W52は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W52データを成す。
【0159】
W53は、対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)、スペース(6)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W53データを成す。W54は、対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W54データを成す。上述の6種類の幅W5-2データ及び幅W54データは1キャラクタの5本加算データであり、幅データD10を構成する。
【0160】
図5Gに示すW6-2は、1つ前のキャラクタC0のバー(5)、スペース(6)、対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W6-2データを成す。
【0161】
W6-1は、1つ前のキャラクタC0のスペース(6)、対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W6-1データを成す。
【0162】
W61は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W61データを成す。
【0163】
W62は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)、スペース(6)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W62データを成す。
【0164】
W63は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W63データを成す。上述の5種類の幅W6-2データ及び幅W63データは1キャラクタの6本加算データであり、幅データD10を構成する。
【0165】
上述のカウンタ部4から出力されるカウントデータ値に基づいて、6種類の幅W11データ〜幅W16データ(1本データ)、7種類の幅W2-1データ〜幅W26データ(2本加算データ)、8種類の幅W3-2データ〜幅W36データ(3本加算データ)、7種類の幅W4-2データ〜幅W45データ(4本加算データ)、6種類の幅W5-2データ及び幅W54データ(5本加算データ)及び、5種類の幅W6-2データ及び幅W63データ(6本加算データ)の合計で、39種類の対象キャラクタが得られる。
【0166】
続いて、図6A〜Gを参照して、第1の実施例に係る1本データ、2本〜6本加算データの他の算出例(その2)について説明する。この例では、対象キャラクタC1の両側のキャラクタC0,C2まで加算範囲を拡張する場合であって、図6Aに示す対象キャラクタC1と隣接する1つ前のキャラクタC0のスペース(6)、バー(5)、スペース(4)、バー(3)及びスペース(2)の5エレメントまで加算範囲を拡張し、かつ、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の5エレメントまで加算範囲を拡張する場合を前提とする。これらのキャラクタC0〜C2を有したバーコード記号1の場合を例に挙げて、対象キャラクタを作成する場合を説明する。
【0167】
図6Bに示すW11は対象キャラクタC1の黒部分のバー(1)の幅である。バー(1)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W11データを成す。W12は対象キャラクタC1のバー(1)に続くスペース(2)の幅である。スペース(2)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W12データを成す。W13はスペース(2)に続くバー(3)の幅である。バー(3)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W13データを成す。
【0168】
W14は対象キャラクタC1のバー(3)に続くスペース(4)の幅である。スペース(4)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W14データを成す。W15は対象キャラクタC1のスペース(4)に続くバー(5)の幅である。バー(5)の幅はカウンタ部4により計数され、そのカウントデータ値が幅W15データを成す。W16は対象キャラクタC1のバー(5)に続くスペース(6)の幅である。スペース(6)の幅もカウンタ部4により計数され、そのカウントデータ値が幅W16データを成す。上述の6種類の幅W11データ〜幅W16データは1キャラクタの1本データであり、幅データD10を構成する。
【0169】
図6Cに示すW2-1は、1つ前のキャラクタC0のスペース(6)と対象キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W2-1データを成す。W21は1つ前のキャラクタC0のスペース(6)に続くバー(1)とスペース(2)の各々が演算部23aによって加算された幅(以下バー(1)+スペース(2)と記す)である。バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W21データを成す。W22は対象キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W22データを成す。
【0170】
W23は対象キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W23データを成す。W24は対象キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W24データを成す。W25は対象キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W25データを成す。W26は対象キャラクタC1のバー(5)に続くスペース(6)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W26データを成す。上述の7種類の幅W2-1データ〜幅W26データは1キャラクタの2本加算データであり、幅データD10を構成する。
【0171】
図6Dに示すW3-2は、1つ前のキャラクタC0のバー(5)、スペース(6)及び、対象キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W3-2データを成す。W3-1は、1つ前のキャラクタC0のスペース(6)対象キャラクタC1のバー(1)及び、スペース(2)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W3-1データを成す。
【0172】
W31は対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W31データを成す。W32は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W32データを成す。
【0173】
W33は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W33データを成す。W34はバー(3)に続くスペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W34データを成す。
【0174】
W35は、対象キャラクタC1のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W35データを成す。W36は、対象キャラクタC1のバー(3)に続くスペース(6)の1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W36データを成す。上述の8種類の幅W3-2データ〜幅W36データは1キャラクタの3本加算データであり、幅データD10を構成する。
【0175】
図6Eに示すW4-3は、1つ前のキャラクタC0のスペース(4)、バー(5)、スペース(6)及び、バー(1)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W4-3データを成す。W4-2は、1つ前のキャラクタC0のバー(5)、スペース(6)、対象キャラクタC1のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W4-2データを成す。
【0176】
W4-1は、1つ前のキャラクタC0のスペース(6)、対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W4-1データを成す。W41は対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W41データを成す。W42は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W42データを成す。
【0177】
W43は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W43データを成す。W44は、対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W44データを成す。
【0178】
W45は、対象キャラクタC1の白のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及び、スペース(2)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W45データを成す。W46は、対象キャラクタC1のバー(5)に続くスペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W46データを成す。上述の9種類の幅W4-3データ〜幅W46データは1キャラクタの4本加算データであり、幅データD10を構成する。
【0179】
図6Fに示すW5-4は、1つ前のキャラクタC0のバー(3)、スペース(4)、バー(5)、スペース(6)+キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W5-4データを成す。W5-3は、1つ前のキャラクタC0のスペース(4)、バー(5)、スペース(6)、対象キャラクタC1のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W5-3データを成す。
【0180】
W5-2は、1つ前のキャラクタC0のバー(5)、スペース(6)、対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W5-2データを成す。W5-1は、1つ前のキャラクタC0のスペース(6)、対象キャラクタC1のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W5-1データを成す。
【0181】
W51は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W51データを成す。W52は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W52データを成す。
【0182】
W53は、対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)、スペース(6)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W53データを成す。W54は、対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W54データを成す。
【0183】
W55は、対象キャラクタC1のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)及び、バー(3)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W55データを成す。W56は、対象キャラクタC1のバー(5)に続くスペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。スペース(6)+バー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W56データを成す。上述の10種類の幅W5-4データ及び幅W56データは1キャラクタの5本加算データであり、幅データD10を構成する。
【0184】
図6Gに示すW6-5は、1つ前のキャラクタC0のスペース(2)、バー(3)、スペース(4)、バー(5)、スペース(6)及び、対象キャラクタC1のバー(1)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W6-5データを成す。W6-4は、1つ前のキャラクタC0のバー(3)、スペース(4)、バー(5)、スペース(6)、対象キャラクタC1のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W6-4データを成す。
【0185】
W6-3は、1つ前のキャラクタC0のスペース(4)、バー(5)、スペース(6)、対象キャラクタC1のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W6-3データを成す。W6-2は、1つ前のキャラクタC0のバー(5)+スペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W6-2データを成す。
【0186】
W6-1は、1つ前のキャラクタC0のスペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の各々が演算部23aによって加算された幅である。スペース(6)+キャラクタC1のバー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W6-1データを成す。
【0187】
W61は対象キャラクタC1のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の各々が演算部23aによって加算された幅である。バー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)の加算幅を示すカウントデータ値が幅W61データを成す。
【0188】
W62は対象キャラクタC1のバー(1)に続くスペース(2)、バー(3)、スペース(4)、バー(5)、スペース(6)及び、1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された幅である。スペース(2)+バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)の加算幅を示すカウントデータ値が幅W62データを成す。
【0189】
W63は対象キャラクタC1のスペース(2)に続くバー(3)、スペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)及びスペース(2)の各々が演算部23aによって加算された幅である。バー(3)+スペース(4)+バー(5)+スペース(6)+バー(1)+スペース(2)の加算幅を示すカウントデータ値が幅W63データを成す。
【0190】
W64は、対象キャラクタC1のバー(3)に続くスペース(4)、バー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)及びバー(3)の各々が演算部23aによって加算された幅である。スペース(4)+バー(5)+スペース(6)+1つ後ろのキャラクタC2のバー(1)+スペース(2)+バー(3)の加算幅を示すカウントデータ値が幅W64データを成す。
【0191】
W65は、対象キャラクタC1のスペース(4)に続くバー(5)、スペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)及びスペース(4)の各々が演算部23aによって加算された幅である。バー(5)+スペース(6)+1つ後ろのキャラクタC2のバー(1)+スペース(2)+バー(3)+スペース(4)の加算幅を示すカウントデータ値が幅W65データを成す。
【0192】
W66は、対象キャラクタC1のバー(5)に続くスペース(6)、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の各々が演算部23aによって加算された幅である。スペース(6)+1つ後ろのキャラクタC2のバー(1)+スペース(2)+バー(3)+スペース(4)+バー(5)の加算幅を示すカウントデータ値が幅W66データを成す。上述の11種類の幅W6-5データ及び幅W66データは1キャラクタの6本加算データであり、幅データD10を構成する。
【0193】
この例では、図1に示したカウンタ部4から出力されるカウントデータ値に基づいて、6種類の幅W11データ〜幅W16データ(1本データ)、7種類の幅W2-1データ〜幅W26データ(2本加算データ)、8種類の幅W3-2データ〜幅W36データ(3本加算データ)、9種類の幅W4-3データ〜幅W46データ(4本加算データ)、10種類の幅W5-4データ及び幅W56データ(5本加算データ)及び、11種類の幅W6-5データ及び幅W66データ(6本加算データ)の合計で、51種類の対象キャラクタが得られる。
【実施例2】
【0194】
続いて、図7〜図10を参照して、第2の実施例に係るデコード例について説明する。ここで、図7A〜Cを参照して、CODE128のバーコード記号例、その欠損例及びその再構成例について説明をする。図7Aに示すCODE128のバーコード記号1は、バーやスペース等の欠落や傷等を生じていないものである。バーコード記号1は8キャラクタから構成され、例えば、バーコードデータD12は、数字の「123455678」を表現する。
【0195】
図7Bに示すCODE128のバーコード記号1’は、バーやスペース等に欠落や傷等が生じているものである。バーコード記号1’は図7Aに示したCODE128のバーコード記号1に生じたものと仮定する。図中の3本の横向き破線は、閾値th1〜th3である。各々の閾値th1〜th3は、スキャン方向と直交する上・中・下段に設定されている。
【0196】
閾値th1を基準にしてバーコード記号1’をスキャンして、データを読み込むと、傷等によりキャラクタ「3」及び「4」が欠落している。閾値th2を基準にしてバーコード記号1’をスキャンしてデータを読み込むと、傷等によりキャラクタ「3」〜「6」が欠落している。閾値th3を基準にしてバーコード記号1’をスキャンしてデータを読み込むと、傷等によりキャラクタ「7」及び「8」が欠落している。
【0197】
図7Cに示すように閾値th1を基準にしたデコード結果は、「12??5678」を示すバーコードデータD12が出力される。「3」及び「4」がデコードされていない。閾値th2を基準にしたデコード結果は、「12????78」を示すバーコードデータD12が出力される。「3」〜「6」がデコードされていない。閾値th3を基準にしたデコード結果は、「123456??」を示すバーコードデータD12が出力される。「7」及び「8」がデコードされていない。
【0198】
第2の実施例では、図7Bに示したようにバーやスペース等に欠落や傷等が生じている場合であっても、「12??5678」や、「12????78」、「123456??」等を「123455678」を表現するバーコードデータD12に再構成するようになされる。
【0199】
この例では、スキャン方向と直交する上・中・下段に次々とスキャンを行って、エラーキャラクタを補正し、エラーキャラクタが無くなった時点でCD(チェックデジット)の照合を行って、バーコードデータD12を作成するようにした。これにより、かすれ、汚れ等により、エレメントの一部が欠落しているバーコード記号1であってもその読み取りが可能となる。
【0200】
また、第1の実施例では1キャラクタ内の幅データD10のみを利用した場合について説明したが、1キャラクタ内の端部の幅データD10が利用される回数が少ない。例えば、対象キャラクタC1のバー(1)の幅W11データは2本加算パターンの算出時、加算幅W21でのみ利用されるが、スペース(2)の幅W12データは、2本加算パターンの算出時、加算幅W21と加算幅W22とで利用されている。そこで、第2の実施例では当該キャラクタC1に隣接するキャラクタC0,C2も含めたエレメント部分も含めて計算を行うようにした。
【0201】
続いて、図8〜図10を参照して、第2の実施例に係る難読キャラクタのデコード例(その1〜3)について説明する。この実施例では、パターン認識する加算範囲を両側の2キャラクタのエレメントまで拡張した。加算範囲は、図7Aに示した対象キャラクタと隣接する1つ前のキャラクタC0のスペース(6)、バー(5)、スペース(4)、バー(3)及びスペース(2)の5エレメントまで拡張し、かつ、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の5エレメントまで拡張する場合を前提とする。この加算範囲の拡張によって、51種類の対象キャラクタからデコード結果を得る場合を前提とする(マルチスキャンリコントラクション)

【0202】
これらをデコード条件にして、図8に示すフローチャートのステップST21でCPU23はスタートマージンを検索する。このとき、光学読取部2は、第1の実施例と同様にして、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。
【0203】
カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び2本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー(黒部分)の幅およびスペース(白部分)の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。なお、スタートマージンの検索については、その説明を省略する。
【0204】
ステップST22でCPU23は、1キャラクタ分の幅データ(6本)を抽出する。図15に示したキャラクタC1によれば、黒部分のバー(1)の幅W11がカウンタ部4により計数され、そのカウントデータ値が幅W11データとなる。バー(1)に続く白部分のスペース(2)の幅W12もカウンタ部4により計数され、そのカウントデータ値が幅W12データとなる。スペース(2)に続くバー(3)の幅W13はカウンタ部4により計数され、そのカウントデータ値が幅W13データとなる。
【0205】
このバー(3)に続くスペース(4)の幅W14もカウンタ部4により計数され、そのカウントデータ値は幅W14データとなる。スペース(4)に続くバー(5)の幅W15はカウンタ部4により計数され、そのカウントデータ値が幅W15データとなる。バー(5)に続くスペース(6)の幅W16もカウンタ部4により計数され、そのカウントデータ値が幅W16データとなる。上述の6種類の幅W11データ〜幅W16データはバーコードデータ値D30を構成する。バーコードデータ値D30はインターフェース部11を介してCPU23に出力される。
【0206】
ステップST23でCPU23はバーの分割、消失の有無に基づいて制御を分岐する。バーの分割、消失の有無については、6本の幅の合計と1キャラクタ幅とを比較し、1キャラクタ分の幅データD10が適切かを判断する。ここでは、1キャラクタ内で隣接するバー及びスペースを含む6本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて1キャラクタ分の幅データD10が適切か否かを判別する。
【0207】
この例で、CPU23では比較部23cが1キャラクタ内で隣接する6本のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の幅W1〜W6の合計と、1キャラクタの全幅を示す全幅値とを比較する。比較部23cによる比較結果によって、1キャラクタ分の幅データD10が適切か否かが判別でき、この判別に基づいてキャラクタのバーの消失や分割等を判断できるようになる。また、複数のスキャンのデコード結果を組み合わせることが可能となり、汚れや、かすれがひどいバーコードにおいても読み取りが可能となる。
【0208】
また、当該キャラクタC1の前後のキャラクタC0,C2の全幅からキャラクタフレームを判定できるので、ボイドやスポット等によるエレメントに過不足が有っても、デコードを継続できるようになる。また、バーの消失や分割等の判断結果に基づいて対象キャラクタを絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。
【0209】
バーの分割、消失が無い場合は、ステップST24でCPU23は1モジュール幅を算出し、1キャラクタ幅を記憶する。このとき、演算部23aは、6種類の幅W11データ〜幅W16データに基づいて当該キャラクタC1の1モジュール幅を算出する。1キャラクタ幅は、図7Bに示した1キャラクタ内で隣接する6本のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の幅W1〜W6を合計して求められる。
【0210】
ステップST25でCPU23は1キャラクタ分の幅データD10を2本加算パターンに変換する。例えば、図7Cに示した1つ前のキャラクタC0のスペース(6)と対象キャラクタC1のバー(1)の各々が演算部23aによって加算された加算幅W2-1を示すカウントデータ値が幅W2-1データとなる。
【0211】
同様にして、1つ前のキャラクタC0のスペース(6)に続くバー(1)とスペース(2)の各々が演算部23aによって加算された加算幅W21を示すカウントデータ値が幅W21データとなる。対象キャラクタC1のバー(1)に続くスペース(2)及びバー(3)の各々が演算部23aによって加算された加算幅W22を示すカウントデータ値が幅W22データとなる。
【0212】
対象キャラクタC1のスペース(2)に続くバー(3)及びスペース(4)の各々が演算部23aによって加算された加算幅W23を示すカウントデータ値が幅W23データとなる。対象キャラクタC1のバー(3)に続くスペース(4)及びバー(5)の各々が演算部23aによって加算された加算幅W24を示すカウントデータ値が幅W24データとなる。
【0213】
対象キャラクタC1のスペース(4)に続くバー(5)及びスペース(6)の各々が演算部23aによって加算された加算幅W25を示すカウントデータ値が幅W25データとなる。対象キャラクタC1のバー(3)に続くスペース(4)及び1つ後ろのキャラクタC2のバー(1)の各々が演算部23aによって加算された加算幅W26を示すカウントデータ値が幅W26データとなる。上述の7種類の幅W2-1データ〜幅W26データは1キャラクタの2本加算データであり、幅データD10から構成される。
【0214】
その後、ステップST26でCPU23は、先に変換した2本加算パターンが一致するキャラクタを検索する。この例では、図1に示したカウンタ部4から出力されるカウントデータ値に基づいて、検索部23dが、6種類の幅W11データ〜幅W16データ(1本データ)、7種類の幅W2-1データ〜幅W26データ(2本加算データ)、8種類の幅W3-2データ〜幅W36データ(3本加算データ)、9種類の幅W4-3データ〜幅W46データ(4本加算データ)、10種類の幅W5-4データ及び幅W56データ(5本加算データ)及び、11種類の幅W6-5データ及び幅W66データ(6本加算データ)の51種類の対象キャラクタC1に対して一致するキャラクタを検索する。その際に各エレメントの幅に対して2種類の対象キャラクタのどちらかと一致する対象キャラクタを検索し、対象キャラクタを絞り込む。この絞り込みにより、おおよそ1〜4程度の候補キャラクタが検索される。
【0215】
ステップST27でCPU23は一致するキャラクタの存在有無に基づいて制御を分岐する。一致するキャラクタが存在する場合は、ステップST28で2本加算パターンが一致した対象キャラクタをデコード結果とする。その後、図9に示すステップST31に移行する。
【0216】
なお、ステップST23でバーの分割、消失が有る場合、及び、ステップST27で一致するキャラクタが存在しない場合は、ステップST29でCPU23は現在のキャラクタをエラーキャラクタとする。その後、ステップST30でCPU23は次のキャラクタ(1キャラクタ幅分後ろのデータ)のデコード処理に移行する。その後、ステップST22に移行して、上述した内容を繰り返す。
【0217】
上述のステップST28でデコード結果となされた候補キャラクタについては、図9に示すステップST31でCPU23はマージン直後のキャラクタか否かに基づいて制御を分岐する。デコード結果となされた候補キャラクタが、マージン直後のキャラクタではない場合は、ステップST32に移行してCPU23はデコード結果がストップキャラクタか否かに基づいて制御を分岐する。デコード結果がストップキャラクタである場合は、ステップST33に移行してCPU23は、デコード結果にエラーキャラクタが存在しないか否かに基づいて制御を分岐する。
【0218】
デコード結果にエラーキャラクタが存在しない場合は、ステップST34に移行して、CPU23はデコードバッファ25に現在(今)のスキャンのデコード結果を上書きする。その後、ステップST35に移行してCPU23は誤り検知(パリティチェック)を実行して、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、ステップST36でCPU23は読み取りを完了し、デコードバッファ25のバーコードデータD12を出力し、デコードバッファ25をクリアする(正常終了)。その後、ステップST45に移行する。
【0219】
なお、ステップST31でマージン直後のキャラクタである場合は、ステップST37に移行してCPU23は、デコード結果がスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST37でデコード結果がスタートキャラクタでない場合及び、ステップST32でデコード結果がストップキャラクタでない場合は、ステップST38に移行する。ステップST38でCPU23は、次キャラクタ(6本後ろの幅データD10)のデコード処理を実行する。その後、ステップST22に戻る。
【0220】
また、ステップST33でデコード結果にエラーキャラクタが存在している場合は、図10に示すステップST39でCPU23はデコードバッファ25の長さとデコードデータ長とが等しいか否かに基づいて制御を分岐する。デコードバッファ25の長さとデコードデータ長とが等しい場合は、ステップST41で、デコードバッファ25のエラーキャラクタ部分のデコードが成功していたらデータを書き換える。その後、ステップST42に移行して、デコードバッファ25にエラーキャラクタが存在しない否かに基づいて制御を分岐する。デコードバッファ25にエラーキャラクタが存在していない場合は、ステップST35に戻る。
【0221】
上述のステップST35でチェックデジットが誤っている場合は、図10に示すステップST43でデコードバッファ25をクリアした後、図9に示したステップST37でデコード結果がスタートキャラクタではない場合、図10に示したステップST39でデコードバッファ25の長さとデコードデータ長とが異なる場合は、ステップST40でデコードバッファ25をクリアした後、及び、ステップST42でデコードバッファ25にエラーキャラクタが存在する場合は、ステップST44に移行してCPU23は、読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。
【0222】
また、キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。その後、図9に示すステップST45に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST21に戻って、上述した内容を繰り返すようになされる。
【0223】
このように第2の実施例に係るバーコード記号読取装置100によれば、パターン認識する加算範囲を対象キャラクタの両側の2キャラクタC0,C2のエレメントまで拡張した。すなわち、加算範囲に関して、図7Aに示した対象キャラクタと隣接する1つ前のキャラクタC0のスペース(6)、バー(5)、スペース(4)、バー(3)及びスペース(2)の5エレメントまで拡張し、かつ、1つ後ろのキャラクタC2のバー(1)、スペース(2)、バー(3)、スペース(4)及びバー(5)の5エレメントまで拡張したので、51種類の対象キャラクタの中からデコード結果となる候補キャラクタを決定できるようになる。
【0224】
従って、キャラクタ内の幅データだけでパターン認識を行う従来方式に比べて、対象キャラクタの両側の2キャラクタC0,C2のエレメントも含めた部分についても計算に参画されるので、対象キャラクタの端部に、欠落、傷等の誤差が多く含まれるパターンであっても、誤読し難くなった。これにより、バー、スペース等のエレメント(エレメント)の幅の最大誤差が±0.5モジュール以上あっても、キャラクタとして認識できる可能性が高くなった。しかも、対象キャラクタを絞ることによって、計算量の軽減が図れ、パターン認識処理に係る時間が短縮され、データ処理の高速化につながる。
【実施例3】
【0225】
続いて、図11〜図13を参照して、第3の実施例に係る難読キャラクタのデコード例(その1〜3)について説明する。この実施例では、第1の実施例で説明したキャラクタデコードアルゴリズムと、第2の実施例で説明したマルチスキャンリコントラクションとを併合した処理が行われる。これらをデコード条件にして、図11に示すフローチャートのステップST51でスタートマージンを検索する。このとき、光学読取部2は、第1の実施例と同様にして、バーコード記号1を読み取って、コード読取データD2を発生する。コード読取データD2は、光学読取部2からカウンタ部4へ出力される。クロック発生部3は、所定周波数のサンプリングク用のCLK信号をカウンタ部4に出力する。
【0226】
カウンタ部4は光学読取部2から出力されるコード読取データD2を入力すると共に、クロック発生部3から出力されるCLK信号を入力し、CLK信号に基づいてコード読取データD2をカウントし、コード読取データD2を白部分のスペースおよび黒部分のバーを含むエレメントの1本幅及び2本加算幅を示すカウントデータD4に変換する。カウントデータD4は、バーコード記号1における各バー(黒部分)の幅およびスペース(白部分)の幅を示す数値データ列となる。カウントデータD4は、幅データ格納部10に保存される。なお、スタートマージンの検索については、その説明を省略する。
【0227】
ステップST52でCPU23は6本の幅の合計と1キャラクタ幅とを比較し、1キャラクタ分の幅データD10が適切かを判断する。ここでは、1キャラクタ内で隣接するバー及びスペースを含む6本のエレメントの幅を加算した合計値と、1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて1キャラクタ分の幅データD10が適切か否かを判別する。
【0228】
この例で、CPU23では比較部23cが1キャラクタ内で隣接する6本のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の幅W1〜W6の合計と、1キャラクタの全幅を示す全幅値とを比較する。比較部23cによる比較結果によって、1キャラクタ分の幅データD10が適切か否かが判別でき、この判別に基づいてキャラクタ候補を絞ることができ、計算量の軽減が図れ、処理時間の高速化につながる。
【0229】
ステップST53でCPU23はバーの分割、消失の有無に基づいて制御を分岐する。バーの分割、消失の有無については、比較部23cによる比較結果を利用する。対象キャラクタC1の前後のキャラクタC0,C2の全幅からキャラクタフレームを判定できるので、ボイドやスポット等によるエレメントに過不足が有っても、デコードを継続できるようになる。
【0230】
バーの分割、消失が無い場合は、ステップST54でCPU23は1モジュール幅を算出し、1キャラクタ幅を記憶する。このとき、演算部23aは、6種類の幅W11データ〜幅W16データに基づいて対象キャラクタC1の1モジュール幅を算出する。1キャラクタ幅は、図7Bに示した1キャラクタ内で隣接する6本のバー(1)、スペース(2)、バー(3)、スペース(4)、バー(5)及びスペース(6)の幅W1〜W6を合計して求められる。
【0231】
ステップST55でCPU23は抽出された21種類の幅データD10を1〜6本加算パターン(エレメント幅)に変換する。この例では、6種類の幅W11データ〜幅W16データが1キャラクタの1本データに変換され、1本データに基づく対象キャラクタC1の被認識パターンとして、1本パターンが作成される。5種類の幅W21データ〜幅W25データは1キャラクタの2本加算データに変換され、2本加算データに基づく対象キャラクタC1の2本加算パターン(被認識パターン)が作成される。4種類の幅W31データ〜幅W34データは1キャラクタの3本加算データに変換され、3本加算データに基づく対象キャラクタC1の3本加算識パターンが作成される。
3種類の幅W41データ〜幅W43データは1キャラクタの4本加算データに変換され、4本加算データに基づく対象キャラクタC1の4本加算パターンが作成される。2種類の幅W51データ及び幅W52データは1キャラクタの5本加算データに変換され、5本加算データに基づく対象キャラクタの5本加算パターンが作成される。1種類の幅W61データは1キャラクタの6本加算データに変換され、6本加算データに基づく対象キャラクタC4の6本加算パターンが作成される。
【0232】
ステップST56でCPU23はキャラクタを絞り込むために、1本パターン、2〜6本加算パターンの全てに対してモジュール数の誤差が1以内のキャラクタを検索して候補キャラクタを決定する。このとき、CPU23では抽出部23bが、演算部23aによって求められた1本パターン、2〜6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタC1等を絞り込んで候補キャラクタを抽出する。その際に、抽出部23bは、演算部23aによって求められた1本パターン、2〜6本加算パターンの1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の(6−1)本の幅データD10とを抽出する。
【0233】
ステップST57でCPU23は、候補キャラクタが1つ以上存在するか否かに基づいて制御を分岐する。候補キャラクタが1つ以上(複数)存在する場合は、ステップST58で1〜6本加算パターンの実測値とその理想値との間の誤差を算出し、この誤差の合計が最小となった候補キャラクタをデコード結果とする。この誤差値が最小となる候補キャラクタは、期待値キャラクタと最も相関が強いキャラクタである。この例では、総合的な誤差が最も少ない対象キャラクタC1等を候補キャラクタとして選択できるようになる。
【0234】
このとき、CPU23では、期待値キャラクタ(理論値)が期待値格納部24からCPU23の比較部23cへ読み出される。比較部23cは、抽出部23bによって抽出された各々の2〜6本加算パターン(エレメント幅)のモジュール数の候補キャラクタと、候補キャラクタを評価するための期待値キャラクタ(理論値)とを比較する。この比較結果は検索部23dへ出力される。
【0235】
検索部23dでは、候補キャラクタと最も相関が強い期待値キャラクタが検索される。例えば、上述の演算部23aが候補キャラクタのモジール数の実測値と、期待値キャラクタのモジール数の理想値との間の誤差を算出すると、検索部23dが、演算部23aによって算出された誤差を合計して得られる誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索する。
【0236】
この例では、誤差値が最小となる候補キャラクタと最も相関が強い期待値キャラクタを検索するので、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、ステップST57で候補キャラクタが存在しない場合は、ステップST59で現在のキャラクタをエラーキャラクタとする。その後、ステップST60で次のキャラクタ(キャラクタ幅分後ろのデータ)のデコード処理に移行する。
【0237】
上述のステップST58でデコード結果となされた候補キャラクタについては、図12に示すステップST61でCPU23はマージン直後の対象キャラクタか否かに基づいて制御を分岐する。デコード結果となされた候補キャラクタが、マージン直後の対象キャラクタではない場合は、ステップST62に移行してCPU23はデコード結果がストップキャラクタか否かに基づいて制御を分岐する。デコード結果がストップキャラクタである場合は、ステップST63に移行してCPU23は、デコード結果にエラーキャラクタが存在しないか否かに基づいて制御を分岐する。
【0238】
デコード結果にエラーキャラクタが存在しない場合は、ステップST64に移行して、CPU23はデコードバッファ25に現在(今)のスキャンのデコード結果を上書きする。その後、ステップST65に移行してCPU23は誤り検知(パリティチェック)を実行して、チェックデジットが正しいか否かに基づいて制御を分岐する。チェックデジットが正しい場合は、ステップST66でCPU23は読み取りを完了し、デコードバッファ25のバーコードデータD12を出力し、デコードバッファ25をクリアする(正常終了)。その後、ステップST65に移行する。
【0239】
なお、ステップST61でマージン直後の対象キャラクタである場合は、ステップST67に移行してCPU23は、デコード結果がスタートキャラクタか否かに基づいて制御を分岐する。上述のステップST67でデコード結果がスタートキャラクタである場合及び、ステップST62でデコード結果がストップキャラクタである場合は、ステップST68に移行する。ステップST68でCPU23は、次キャラクタ(6本後ろの幅データD10)のデコード処理を実行する。その後、ステップST52に戻る。
【0240】
また、ステップST63でデコード結果にエラーキャラクタが存在している場合は、図13に示すステップST69でCPU23はデコードバッファ25の長さとデコードデータ長とが等しいか否かに基づいて制御を分岐する。デコードバッファ25の長さとデコードデータ長とが等しい場合は、ステップST71で、デコードバッファ25のエラーキャラクタ部分のデコードが成功していたらデータを書き換える。その後、ステップST72に移行して、デコードバッファ25にエラーキャラクタが存在しない否かに基づいて制御を分岐する。デコードバッファ25にエラーキャラクタが存在していない場合は、ステップST65に戻る。
【0241】
上述のステップST65でチェックデジットが誤っている場合は、図13に示すステップST73でデコードバッファ25をクリアした後、図12に示したステップST67でデコード結果がスタートキャラクタではない場合、図13に示したステップST69でデコードバッファ25の長さとデコードデータ長とが異なる場合は、ステップST70でデコードバッファ25をクリアした後、及び、ステップST72でデコードバッファ25にエラーキャラクタが存在する場合は、ステップST74に移行してCPU23は、読み取りエラー処理を実行する。読み取りエラー処理では次のマージンを検索する等が行われる。
【0242】
また、キャラクタ認識がエラーとなった場合に、エラーキャラクタを仮に配置してバーコードデータを作成するようにしてもよい。その後、図12に示すステップST75に移行して、CPU23は終了を判別する。例えば、当該バーコード記号読取装置100に対して読取終了指令が検出され、読取終了指令が検出された場合は、バーコード記号1の読み取り制御を終了する。読取終了指令が検出されていない場合は、バーコード記号1の読み取り制御を継続するべく、ステップST51に戻って、上述した内容を繰り返すようになされる。
【0243】
このように、第3の実施例に係るバーコード記号読取装置100によれば、バーコード記号1を読み取ってそのデコード結果を出力する場合に、第1の実施例で説明したキャラクタデコードアルゴリズムと、第2の実施例で説明したマルチスキャンリコントラクションとを併合した処理が行われる。これを前提にして、検索部23dが抽出部23bによって抽出された各々の2〜6本加算パターンのモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するようになる。
【0244】
この検索によって、複数の対象キャラクタから抽出された候補キャラクタと最も相関が強い期待値キャラクタのバーコードデータD12を当該バーコード記号1の読取時のデコード結果として出力できるようになるので、従来方式のバーコード読み取り方法に比べて大幅にバーコード記号1の誤読取を防止できるようになる。
【0245】
しかも、誤差の範囲を従来方式の±0.5から±1.0に拡大し、対象キャラクタを増加させている。そして、1キャラクタ分の6本の幅データD10と、対象キャラクタの前後の5本の幅データD10とを抽出するので、2〜6本加算パターンの各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んだ候補キャラクタを従来方法に比べてより多く抽出できるようになる。また、候補キャラクタを絞ることによって、計算量の軽減が図れ、パターン認識処理に係る時間が短縮され、データ処理の高速化につながる。これにより、従来方式のバーコード読み取り方法に比べて大幅にバーコードの誤読取を防止できるようになる。なお、誤差の範囲を設定する際の閾値を可変することで、幅データD10の信頼性を選択することも可能となる。
【0246】
この例では、バーコード記号の規格に関して、CODE128の場合について説明したが、これに限られることはなく、CODE39、EAN/UPC、インターリーブド2オブ5、コーダバー、RSS、RSSリミテッド、RSSエクスパンデド等の各々の方式についても、本発明を同様にして適用できるようになる。
【産業上の利用可能性】
【0247】
本発明は、バーコード記号を読み取ってバーコードデータを出力するバーコード記号読取装置に適用して極めて好適である。
【符号の説明】
【0248】
2・・・光学情報読取部、3・・・クロック発生部、4・・・カウンタ部、5・・・m段データバッファ、6・・・セレクタ部、7・・・x倍器、8・・・比較器、・・・スタートマージン格納部、10・・・幅データ格納部、11・・・インターフェース部、
12・・・マイクロプロセッサ、21・・・ROM、22・・・RAM、23・・・CPU、23a・・・演算部(演算手段)、23b・・・抽出部(抽出手段)、23c・・・比較部、23d・・・検索部、24・・・期待値格納部、25・・・デコードバッファ及び、100・・・バーコード記号読取装置(光学情報読取装置)

【特許請求の範囲】
【請求項1】
1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求め、前記2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求める演算手段と、
前記演算手段によって求められた前記2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出する抽出手段と、
前記抽出手段によって抽出された各々の前記2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索する検索手段とを備えることを特徴とする光学情報読取装置。
【請求項2】
前記演算手段は、
当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、
前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とする請求項1に記載の光学情報読取装置。
【請求項3】
前記抽出手段は、
当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、
前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とする請求項1に記載の光学情報読取装置。
【請求項4】
前記検索手段は、
前記抽出手段から得られた複数の前記対象キャラクタの各々の前記2〜n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とする請求項1に記載の光学情報読取装置。
【請求項5】
前記検索手段は、
前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを検索することを特徴とする請求項1に記載の光学情報読取装置。
【請求項6】
前記検索手段は、
前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とする請求項5に記載の光学情報読取装置。
【請求項7】
前記1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別する比較手段を備えることを特徴とする請求項1に記載の光学情報読取装置。
【請求項8】
光学情報読取装置が、
1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算して2〜n本加算エレメント幅を各々求めるステップと、
求めた前記2〜n本加算エレメント幅の各々を1キャラクタのモジュール数に換算して当該2〜n本加算エレメント幅のモジュール数を求めるステップと、
求めた前記2〜n本加算エレメント幅の各々のモジュール数が誤差1以内の整数となる対象キャラクタを絞り込んで候補キャラクタを抽出するステップと、
抽出された各々の前記2〜n本加算エレメント幅のモジュール数の候補キャラクタと、当該候補キャラクタを評価するための期待値キャラクタとを比較し、当該候補キャラクタと最も相関が強い期待値キャラクタを検索するステップとを実行することを特徴とする光学情報読取方法。
【請求項9】
当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、
前記対象キャラクタの前後のキャラクタのバー及びスペースを含むエレメントの幅を加算することを特徴とする請求項8に記載の光学情報読取方法。
【請求項10】
当該対象キャラクタの前記2〜n本加算エレメント幅を各々求める際に、
前記1キャラクタ分のn本の幅データと、当該対象キャラクタの前後の1本以上の幅データとを抽出することを特徴とする請求項9に記載の光学情報読取方法。
【請求項11】
抽出された複数の前記対象キャラクタの各々の前記2〜n本加算エレメント幅に対して2種類の前記対象キャラクタの何れかと一致する対象キャラクタを検索し、前記候補キャラクタの数を絞り込むことを特徴とする請求項10に記載の光学情報読取方法。
【請求項12】
前記候補キャラクタのモジール数の実測値と、前記期待値キャラクタのモジール数の理想値との間の誤差を算出し、前記誤差を合計して得られる誤差値が最小となる前記候補キャラクタと最も相関が強い期待値キャラクタを抽出することを特徴とする請求項8に記載の光学情報読取方法。
【請求項13】
前記誤差値が最小となる前記候補キャラクタと一致する前記期待値キャラクタを検出することを特徴とする請求項12に記載の光学情報読取方法。
【請求項14】
前記1キャラクタ内で隣接するバー及びスペースを含むn(n≧2)本のエレメントの幅を加算した合計値と、前記1キャラクタの全幅を示す全幅値とを比較し、比較結果に基づいて当該1キャラクタ分の幅データが適切か否かを判別することを特徴とする請求項8に記載の光学情報読取方法。
【請求項15】
請求項8乃至14に記載の光学情報読取方法を実行するための指令を組み合わせたことを特徴とするコンピュータが読み取り可能なプログラム。
【請求項16】
請求項8乃至14に記載の光学情報読取方法を実行するためのプログラムが記述されていることを特徴とするコンピュータが読み取り可能な記録媒体。

【図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

【図10】
image rotate

【図11】
image rotate

【図12】
image rotate

【図13】
image rotate

【図14】
image rotate

【図15】
image rotate

【図16】
image rotate

【図17】
image rotate