Mac端末上でpytesseractを使って画像文字認識(英語、日本語)を試してみた
こんにちは、CX事業本部 IoT事業部の若槻です。
pytesseractは、文字認識(OCR)エンジンおよびそれを使用するためのCLIを提供するTesseractのPython実装です。
今回は、Mac端末上でpytesseractを使って画像文字認識(英語および日本語)を試してみました。
やってみた
環境
端末はM1 MacBookとなります。
$ sw_vers ProductName: macOS ProductVersion: 12.5 BuildVersion: 21G72
最初にPythonが未導入だったのでインストールします。
brew install python
インストールできました。
$ python3 -V Python 3.8.9 $ pip3 -V pip 20.2.3 from /Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/site-packages/pip (python 3.8)
Tesseractの導入
Tesseractは、まずBrewで本体をインストールした後にpipでpytesseractをインストールします。
(いきなりpip3 install pytesseract
しようとするとエラーとなる)
brew install tesseract pip3 install pytesseract
英語の文字認識してみる
まず英字が写った画像(string.png
)を認識させてみます。
$ python3 >>> import pytesseract >>> from PIL import Image >>> str_img = Image.open('string.png') >>> str = pytesseract.image_to_string(str_img) >>> print(str) Classmethod Providing continuous support of creative activities to all people
一字一句正確に文字認識できていますね!
次に表形式に英語および数字が記載された画像(numbers.png
)を認識させてみます。
>>> num_img = Image.open('numbers.png') >>> num = pytesseract.image_to_string(num_img) >>> print(num) FY2018 FY2019 FY2020 FY2021 FY2022 7,414 13,199 21,678 30,486 42,710
こちらも正確に文字認識できています!
日本語対応させてみる
Tesseractは既定のパッケージでは日本語に対応していません。
>>> pytesseract.get_languages() ['eng', 'osd', 'snum']
調べてみるとtesseract-ocr-jpn
をHomebrewでインストールすれば良さげな情報が出てきますが、現時点でFormulaeに登録が無いようで失敗します。
## エラーとなる $ brew install tesseract-ocr-jpn Warning: No available formula with the name "tesseract-ocr-jpn". Did you mean tesseract? ==> Searching for similarly named formulae... This similarly named formula was found: tesseract ✔ To install it, run: brew install tesseract ✔ ==> Searching for a previously deleted formula (in the last month)... Error: No previously deleted formula found. ==> Searching taps on GitHub... Error: No formulae found in taps.
さらに他の方法を調べたところ次の記事が参考になりました。
まず日本語の訓練データを下記よりダウンロードします。
対象は以下の2つです。後者は縦書き対応のデータとなります。
[Download]ボタンでダウンロードできます。
これらのダウンロードした訓練データをTesseractのshare/tessdata/
パス配下に配置します。パスはbrew list tesseract
で確認できます。
$ brew list tesseract /opt/homebrew/Cellar/tesseract/5.2.0/bin/tesseract /opt/homebrew/Cellar/tesseract/5.2.0/include/tesseract/ (12 files) /opt/homebrew/Cellar/tesseract/5.2.0/lib/libtesseract.5.dylib /opt/homebrew/Cellar/tesseract/5.2.0/lib/pkgconfig/tesseract.pc /opt/homebrew/Cellar/tesseract/5.2.0/lib/ (2 other files) /opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata/ (35 files)
確認したパスに2つの訓練データを配置します。
mv ~/Downloads/jpn.traineddata /opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata/jpn.traineddata mv ~/Downloads/jpn_vert.traineddata /opt/homebrew/Cellar/tesseract/5.2.0/share/tessdata/jpn_vert.traineddata
Pythonのプロセスを再起動して利用可能な言語一覧を再度確認すると、jpn
およびjpn_vert
が追加されています!
$ python3 >>> import pytesseract >>> pytesseract.get_languages() ['eng', 'jpn', 'jpn_vert', 'osd', 'snum']
それでは日本語が写った画像(string_jp.png
)を認識させてみます。
pytesseract.image_to_string
でlang
オプションを指定すると、文字認識させられました。
>>> from PIL import Image >>> str_jp_img = Image.open('string_jp.png') >>> str_jp = pytesseract.image_to_string(str_jp_img, lang="jpn") >>> print(str_jp) 私 た ち は 新 し い テ クノ ロジ ー に よる 「 課 題 解 決 」 と 「 価 値 創 造 」 で 企業 の 競争 力 を 高め ます
余計なスペースは入っていますが、文字の認識の誤りはなく精度は高そうです!
おわりに
Mac端末上でpytesseractを使って画像文字認識(英語および日本語)を試してみました。
日本語対応をさせるのに結構手間取りましたが出来てよかったです。
参考
以上