復路ブログリレーもいよいよ終盤。
みなさんこんにちは。いいんちょです。

今回も日常業務の一コマから。
申込用紙や郵便物に記載されたナンバーをデータ化する作業についてのお話です。
用紙にバーコード等があればそれを読み取りデータ化できるのですが、ナンバーしかない、用紙が大量にある等の場合は処理時間が大幅に増加します。
もちろん用紙をスキャンしてデータ化するソフトも色々ありますが、やりたいこととやれることが一致して金額に見合うものを探してもなかなか見つかりません。

そこでやってみるシリーズ第3弾、「文字認識をしてみる」です。
曖昧な部分もあるため詳しい説明は一切省きますので「へぇ~」程度にお読みください。^^;

まず弊社にある高速スキャンできるオンデマンド機で用紙をスキャンし、PDF化します。
スキャンしたPDFがテキストになっていれば簡単なんですが、スキャンされたPDFは全て画像となっています。となるとテキストとして書き出せないので画像から文字を認識するOCR(Optical Character Recognition)の技術が必要になります。

そこで今回はテンプレートマッチングという手法で文字認識をしてみます。「テンプレートマッチング」とは画像の中から人の(゚∀゚)を見つけたり、指定した画像と同じ画像がある場所を探し出したりと現在では欠かせない技術ですね。

手法や公式は色々あるようですが、今回使用するのはこちらの3つ。

 

 

とりあえず手短にExcelVBAでSSDのマクロを組んで検証してみます。

この関数では左上から1座標ずつテンプレートとなる画像との誤差の2乗の和を計算し、その値が一番小さい場所が一致する場所と判断します。

数値の0と1を数字に似せた配列で並べたシートを作成し、

(わかりやすくするため1をグレーで塗りつぶしてあります。)

テンプレートとなる下配列「6」を上配列から探し、一致する場所をピンクに塗ります。

マクロを実行するとあっという間に見つかりました。

ただの完全一致だとありがたみが無いので一部の文字を変えてみます。
すこしゴシック体っぽくしてみました。

それでもちゃんと見つけてくれます。

ただ、配列に同数の誤差がある場合は、形が違うのに同じものとして認識してしまう可能性があります。

特に0と1のような単純な数値だとその可能性が高くなり、実装には色々と工夫が必要になりそうです。

と、言うことでいつも通り肝心な部分はスカッと飛ばし、さっくり文字認識プログラムの完成です。
元になるPDFから対象となる部分を選択、

文字を切り出し文字が何であるか入力しデータベースに登録、

全文字登録後、登録されている画像をテンプレートとし、テンプレートマッチングで文字認識をしてみます。

結果、SSDやSADでは検出率が悪くほとんど検出できませんでしたが、

ZNCCを使用すると高確率で認識してくれました。

色々と試してみましたが、読み取る画像の傾きや解像度、色数等をテンプレートに近い状態にする必要があるため、実用レベルにするにはもう少し事前の画像処理が必要になりそうです。

そのなんだかんだも含めて、現在はオープンソースのライブラリOpenCVのテンプレートマッチング機能を使用するところに落ち着いています。^^;

 

今回読み取りに挑戦したOCR用文字やバーコード等の印字業務は弊社の得意としている分野です。お困りごとなどございましたら何なりと営業までご相談ください。

以上、いいんちょでした。

 

この記事を書いた人

いいんちょ
トヨトモHP管理委員会の委員長を任されています、いいんちょです。みなさんにトヨトモの魅力を知って頂けるよう、商品情報から活動報告まで、肩の力を抜いて読んで頂けるブログを目指します。