意外に画像から文字起こししたい需要があるのだった。 OCRできるソフトに Tesseract というのがあってこれを使うとしたい。
1. tesseract
tesseractはhomebrewで入る(
$ brew install tesseract
)。
2. pytesseractとpyocr
pythonからはwrapper経由で呼び出すが二種類あった。
どちらもpipで入る(
$ pip install pytesseract
、
$ pip install pyocr
)。
英語の画像から
まず英文の画像ファイルを文字起こししてみる。
どちらも問題なし。
日本語対応 - tesseractから
tesseractがそのままでは日本語に対応しない。
確認する。
$ python
>>> import pytesseract
>>> pytesseract.get_languages()
['eng', 'osd', 'snum']
>>>
tesseract-ocr-jpnをbrewでインストールできるらしいがうまくいかない。
$ brew install tesseract-ocn-jpn
==> Downloading https://formulae.brew.sh/api/formula.jws.json
==> Downloading https://formulae.brew.sh/api/cask.jws.json
Warning: No available formula with the name "tesseract-ocn-jpn". Did you mean tesseract?
といわれてしまう。 学習データがインストールされてないらしい。 ので手動インストール試行。
学習データは" Best (most accurate) trained LSTM models. "となってて、ここから日本語対応のデータをダウンロードする。jpn.traineddataとjpn_vert.traineddataが必要、ということは用意すれば縦書きにも対応するかな?
$ brew list tesseract
で確認するとtessdataは、
/usr/local/Cellar/tesseract/5.3.3/share/tessdata/
にあるようなので、
ここにファイルを置く。
pythonで再確認すると追加された模様。
$ python
>>> import pytesseract
>>> pytesseract.get_languages()
['eng', 'jpn', 'jpn_vert', 'osd', 'snum']
>>>
日本語文の画像を用意して試してみる。
どちらも日本語の認識はしてくれた。 pyocrの縦書きがおかしいので、当面pytesseractをベースにする。
入出力をクリップボード経由で
使い方を考えてクリップボードから読み込んだデータを文字起こしした後、 テキストをクリップボードに書き出すことにする。
言語を示すパラメータを引数で渡す。
クリップボードからの入力はPIL.ImageGrab、出力はpyperclipを使用。
完璧。