この記事はユニークビジョン株式会社 Advent Calendar 2019の22日目の記事です。
はじめに
本記事では、tesseractを使用して名刺のOCRを行います。
インストール
基本的にはGitHubのインストール手順に従います。
最新版のインストールにはPPAを登録する必要があります。
また、tesseractのインストールと同時に日本語用のデータもインストールします。
$ add-apt-repository ppa:alex-p/tesseract-ocr-devel -y
$ apt update
$ apt install -y tesseract-ocr libtesseract-dev tesseract-ocr-jpn
バージョンを確認します。無事、5.00 Alphaがインストールされています。
$ tesseract -v
tesseract 5.0.0-alpha-582-g60b07
leptonica-1.78.0
libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.2) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.3.0
Found AVX2
Found AVX
Found FMA
Found SSE
Found OpenMP 201511
Found libarchive 3.2.2 zlib/1.2.11 liblzma/5.2.2 bz2lib/1.0.6 liblz4/1.7.1
ついでに、日本語が使用できることを確認します。
$ tesseract --list-langs
List of available languages (3):
eng
jpn
osd
試してみる
GitHubの使用方法によれば、日本語のOCRは以下のようなコマンドで実行できるようです。
$ tesseract imagename outputbase -l jpn
上記画像をmeishi.jpg
という名前で保存し、tesseractを実行します。
$ tesseract meishi.jpg meishi -l jpn
Tesseract Open Source OCR Engine v5.0.0-alpha-582-g60b07 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 219
すると、以下のようなファイルが生成されると思います。
Kazumasa YAMAMOTO
ユニークビジョン株式会
〒160-0022 東京都新宿区新宿2- 1 -12 PMO新宿御苑前4F
http://www.uniquevision.coJp/
TEL : 03-6434-9993
E-mail : yamamoto_kazumasa@uniquevision.coJDp
肝心の名前が取れていなかったり、co.jp
が誤認識されていたりしますが概ね良さそうな気がします。
ちなみに、解析する言語は複数指定することが出来ます。試しに、英語+日本語で先ほどの名刺を解析すると以下のようになります。
$ tesseract meishi.jpg meishi -l eng+jpn
Tesseract Open Source OCR Engine v5.0.0-alpha-582-g60b07 with Leptonica
Warning: Invalid resolution 0 dpi. Using 70 instead.
Estimating resolution as 219
Kazumasa YAMAMOTO
ユニ ー ク ビジ ョ ン 株 式 会
〒160-0022 東京 都 新宿 区 新宿 2- 1 -12 PMO 新 宿 御苑 前 4F
http://www.uniquevision.co.jp/
TEL : 03-6434-9993
E-mail : yamamoto_kazumasa@uniquevision.co.jp
日本語の解析結果に不自然なスペースが含まれてしまいましたが、URLやメールアドレスは正しく認識されるようになりました。
CLI以外の方法で実行する
GitHubのWikiにまとまっていました。
本記事では取り扱いませんが、各言語で使用できるラッパーも紹介されており、例えば大量の名刺を自動でOCRするスクリプトなども簡単に書けるかもしれません。
まとめ
本記事ではtesseractを使用したOCRを試しました。
簡単に導入することができるので、業務効率化などに使いやすいと感じました。
今後はプログラムからの実行も試せたらと思います。