今回の記事ではswift OCRライブラリの「SwiftyTesseract」のOCR機能の精度を上げるための手法をご紹介します。タイトルの様な手法を用いれば比較的精度を上げることができる可能性があります。
(ただ、日本後のOCRはなかなか難易度が高いですのであくまでも実験的なものになります。)
この記事でOCR比較を行う画像紹介
今回の下記内容を行う画像をご紹介します。
・通常の看板画像をOCRする
・グレースケール化した看板画像をOCR
・2値化した看板画像をOCR
・文字領域を切り取ってOCR
・文字領域を切り取りグレースケールしたものをOCR
・文字領域を切り取り2値化したものをOCR
使用する看板は下記のフリー画像をネットから拾ってきました。
330 × 295サイズ、内容は下記の様なものが出力されればOKなのかな?
oul Station
?站 ソウル駅
適度に日本語が綺麗に写っており、検索上位にあったので(たまたま笑)
ちなみに「SwiftyTesseract」に画像を入れてOCR処理するのみのコードに関しては下記記事参照ください。そのためコードは割愛。
グレースケール等は記載しますので。
通常の看板画像をOCRする
まずは通常の画像をOCR操作するのみの処理で出力した文字情報を出力してみます。結果は下記。
ーーー 談
oul StatiOn
闇 A ッ グ E
ローマ字はある程度いけてる、というかここまでいけてるんだと驚き。
その上のおそらく黒線を識別しているのと日本語が問題。というか日本語部分全く一致してない笑。
グレースケール化した看板画像をOCR
こちらグレースケールをXcode内で行う場合はobject-Cの記述が必要なので大変です。
今回はopencvを使用するがメインではないので、使用方法は下記にまとめております。
ご参照ください。
Xcodeでやる必要も特にありませんので私はこの記事を書いている際は、使い慣れたpythonで画像を処理してから、再度Xcodeのプロジェクトにインポートしてます。
ただ、opencvはなかなかなか便利ということもあるのでぜひ下記記事も参考にしてください。
レ ーーーーーー 談
oul StatiOn
N 闇 A ッ グ E
ここからが本命です。切り取ってみます。
私の下記記事ではアノテーションずけを行った画像から領域検知AIモデルを作成し、実際に使用してみたものがありますが今回はその様な時間のかかるAI学習モデルを作成するつもりわありません。シンプルに切り取っていくのみです。笑
文字領域切り取り用のAIモデルを作成する方法は下記記事をご参照ください。
文字領域を切り取ってOCR(グレースケール化も)
では切り取った画像ををOCR処理してみます。
まず切り取った後の様子は下記です。
OCRの結果がこちらです。
0 り|c①|(@】nk
ND)】ル世
検証ですねこれは笑。精度は下がっている様です。
ただ切り取った範囲が文字があった箇所だけですのでその範囲内のみのOCRができており、いらない行はなくなっております。
これはグレースケールに変換してもおそらく結果は悪いと予想できますが念のためやっておきます。
文字領域を切り取り2値化したものをOCR
pythonのopencvを使って画像を2値化する方法はこちら。
りWいtに |tる)n站ド )ウリ駅
んー。感じ部分が少しだけできてる他「ウ」のみうまく行ってるのかな?
ただ、ローマ字が完全にいかれてます。
結論
感じ部分にはおそらく「2値化」が有用だが、ローマ字がその分坐なりになる。
ローマ字はそのまあでもある程度OCR可能。
スクリプトによってどの箇所をどういった処理を行うかを指定していけば、可能はなくはない。。ただ、機械学習させた、学習モデルの方が精度的には高い。
以上です。
コメント