IT企業であればどこでも、OCR分野で何らかの研究開発が行われています。しかし技術的な課題点を解決するのにどこの企業も苦労しています。
一般的な使用に適したソリューションには至っていないため、各社は競合他社に負けないソリューションを生み出そうと必死に努力しています。
弊社Rabiloo(ラビロー)も例外ではなく、これまで独自の文字認識プログラムを研究してきました。この記事では、Rabiloo開発チームによるOCR開発の過程をお届けしたいと思います。
今回ご紹介するアプリケーションは、OCRの自動データ入力という機能を中心に実装しています。プライベートなデータセットで実験したところ、アプリケーションは95%前後の高精度を達成しました。
アプリは現在、競争にさらに勝ち残れるよう、常に改良を加えて研究開発が続けられています。日本市場でもOCRのハイクオリティのソリューションにはかなりの需要があり、性能を向上させ続けることが非常に重要であることを、最近特に感じております。
ベトナムのIT企業のほとんどは、オフショア開発による下流工程の実装の下請けがメインのサービスで自社開発製品を持っていません。しかしRabilooが他のベトナム企業と違うところは、オフショア開発と並行して自社の技術を高め、自社開発のプロダクトをすでに作り出しているところです。
そのため、設計や要件の提案から行うことができ、OCRソリューションのSaas提供も可能です。
実際に、弊社に視察に来られたお客様から、RabilooのOCRソリューションに関する引き合いも多くなっております。
OCR技術上の課題を解決するには3つの主要なステップを踏まなければなりません。
文字の検出 (Text detection)
文字の認識 (Text recognition)
情報の抽出 (Information Extraction)
これらの各ステップでは、必要に応じて複雑なデータの前処理や後処理が行われます。
人間でも機械でも画像上の文字を認識するには、まず文字がどこにあるか(where)、内容は何か(what)、そしてどの内容が必要か(which)というステップを踏まなければなりません。
わたしたち人間はこれらのステップを何も考えずに脳が瞬時に行なうため、機械でも簡単にできるのではと思ってしまいます。しかしOCRは脳と違って、文字や画像を認識するために、このように複雑なステップを踏んでいます。
次に「レシートから情報を抽出する」という事例を用いてOCR活用手順を説明します。
このステップではシステムは通常、行ごとにテキスト領域を特定します。しかし、文字間の間隔が離れている場合には、各行を複数の領域に分割することがあります。
テキスト領域を特定した後、ソフトウェアはそれらにバウンディングボックスのラベルを付けます(画像1)。バウンディングボックスとは、あるオブジェクト(ここではテキスト領域)を囲む長方形のことで、そのオブジェクトの位置を定義するためのものです。
画像上にボックスが描かれているのは説明のためですが、テキスト検出の本質は、バウンディングボックスの情報(角の座標、中心の座標、または長さと寸法)を特定することです。
画像1:テキスト検出
しかし、画像2のような背景のあるレシートの画像の場合は、どのようにテキスト検出を処理するのでしょうか。
画像2:より複雑な背景のある画像
上のような画像をテキスト検出にかけた場合、返される結果には必要なテキストが含まれています。しかし、いくつかの問題があります。
文字やオブジェクトを含む背景は、テキストと誤認される可能性がある
テキストの傾斜角度によりバウンディングボックスの認識順序に影響を与える
画質が十分ではない可能性がある
以上の問題があると、文字検出には失敗しなくても、次の文字認識の段階で悪影響を及ぼします(この部分は実験によって、いくつかの問題を発見しました)。
これを解決するために、弊社は文字を検出する前に、入力を2つのステップで前処理を行なうことにしました。それは、ROIの切り取り(Crop ROI)と画像の強調(Enhance)です。前処理の結果は、画像3a、3bのようになりました。
画像3:a. ROIの設定後の結果 b. ROIの設定後の結果 c. 検出後の結果
肉眼では、強調前の画像と強調後の画像の違いを見極めるのは難しいかもしれませんが、実際に実験してみると強調後の性能は5%(75%→80%)向上しました。もしかしたら、機械が画像を観察する方法は、人間よりも少しだけ「細心」なのかもしれません。
2つの前処理工程を経た画像は、ディープラーニング(深層学習)モデルで文字を検出します。その結果は、画像3cのように可視化されます。この場合、ソフトウェアはすべてのテキスト領域やテキストとして認識できる領域を検出します。
テキスト領域のバウンディングボックスの情報を頼りに画像を検索し、各画像が検出されたテキスト領域になります。画像2の場合、37個のバウンディングボックスに対応する37個の出力画像があります。これらの画像がどのような内容かを知るために、文字認識のステップに進みます。
このステップでは、テキスト領域を含む画像はソフトウェアによって認識され、機械が理解して処理できる形式に戻されます(通常はtxtファイルとして保存されます)。
当初、後処理を行わなかった場合の認識効率は80%程度でした。この結果は、主に2つの問題に起因しています。データが不足しているか、モデルがソフトの性能を十分に発揮できていない
テキストが日本語という特殊なものであるため、文字の認識が難しい
問題1については、モデルの検索、データセットの構築、モデルの学習など、処理に時間がかかりすぎますが、ソフトウェアの性能は保証されていません。そのため、Rabiloo開発チームは、問題2の処理を選択することにしました。具体的には、認識ステップの出力である「スペル補正」の後処理を行いました。
このスペル補正はほとんどがルールに基づいて行われますが、実際に効果があり、13%の性能向上(80%→93%)が得られました。
画像領域の検出後の情報と認識後の内容が得られると、画像4のように結果を視覚化することができます(結果はRODの設定後の大きさで白い画像に反映されます)。
画像4:文字検出・認識後の結果
上記の結果は、全単語の94.6%(37ボックスのうち35ボックスが正解)、全文字の99%(292文字のうち289が正解)に達しています。認識されなかった部分は以下の通りです。
11行目(13ボックス目)には内容が「※フライドポテ卜 -ス卜リングカッ卜 1KG 195」ですが、書き込み時に画像の幅がオーバーフローしてしまい、表示されません。
バーコードの行(35ボックス目)が誤認識されています(情報抽出の段階でこの内容が削除されます)。
画像上の文字認識の結果を受けて、最後のステップである情報の抽出に進みます。
この段階ではソフトウェアは、指定されたまたは意味のある情報フィールドを選択し、(ユーザーの要求に応じて)、残りの情報を無視します。指定される情報は、お客様のご要望に応じて異なります。今回の例は、画像5に示すように情報を抽出した後の結果がtxtファイルにエクスポートされます。
画像5:情報を抽出した結果
必要な情報は以下の通りです。
店舗住所
レシートの発行日
商品情報(商品名及び価格)
合計金額及びお釣
画像2から得られるフィールドは以下の通りです。
請求書の発行日
商品名
合計金額
このように、文字認識ソフトウェアは、画像2のような画像を入力として受け入れ、画像5のようなテキストファイルを返します。そして、この問題を解決するために使用した詳細なパイプラインは以下の通りです。
画像6: OCRの全体的な解決策
この記事ではRabilooのOCR研究開発について、専門的な知見も交えて紹介しました。
当ブログでは、弊社Rabilooの開発知見を元に専門的なITに関する情報を発信しています。他の記事も併せてご覧いただければ幸いです。
あわせて読みたい:AI-OCRとは?OCR技術とAIの融合で業務を圧倒的に効率化!
Rabilooは自社開発したOCRソリューションを用いて、貴社の業務形態に特化したOCRアプリケーションを開発することができます。
また、貴社の開発に弊社のOCRソリューションを提供することも可能です。
現在お使いのOCRの精度でお困りの企業様、ぜひ一度お気軽に弊社までお問い合わせください。
Share