【Mac】メモをとる? スクショでいいじゃん

2021年2月23日

tesseract でスクショの文書化

ネットでなにかを注文すると、手続きの最後のほうでこんな場面に出くわすことがある。

お申し込み番号

これをコピペしてテキストかなんかに保存するのはいかにもダルい。
 多くのひとが command + shift + 4 でスクショを取るのではなかろうか。
 ファイル名などを決める必要もなくデスクトップに保存されるし、スタックを使用していればデスクトップもさほど散らからない。

撮ったスクショの数字を取り出す

この方法は楽だが、いざ本当にお問い合わせしなきゃならない時、ちょっと面倒くさい。電話で画像を見ながら数字を読み上げるならともかく、メールなどで問い合わせる場合である。
 画像だと、お問い合わせ番号を選択してコピペしたりできないからだ。
 しょうがないから画像を見ながら打ちこんじゃったりして、間違ってないか見直したりなんかするわけだ。

そんな時の強い味方がテッセラクトだ。光学文字認識エンジン tesseract(テッセラクト)を用いれば画像の文字を取り出し、テキストに出来るのだ。世にいう OCR とかいうやつだろう。

tesseract は確か ffmpeg か、imagemagick か、youtube-dl かなんかを Homebrew でインストールすると、一緒にインストールされたりする。

$ which tesseract
/opt/homebrew/bin/tesseract

仮にインストールされてなくても、Homebrew で簡単にインストールできる。

brew install tesseract

使い方は、読みこみたい画像を入れ、書き出したいテキスト名を決め、必要なら L で言語を指定する。

tesseract INPUT_IMG OUTPUT_TXT -l LANG

という感じ。アウトプットテキスト名を書かずに、- とすると標準出力でターミナル内に結果を表示してくれる。
 上掲した画像を試してみる。

$ tesseract mousikomi.png - -l eng
SHRLAAERAGELES

BH LIAABS : M123456

* SHWADtOMC, SFETICSRLAABS Se CARS ES.

日本語の部分は読み取れていないが、お申し込み番号「M123456」は取り出すことが出来る。

日本語を読み取る

この tesseract、日本語も読み取れるように出来るのだが、あまり精度がよろしくない……と思っていた。
 知らない間になんか凄く良くなっているのである。

🔗 MacでTesseract OCRを使って画像内のテキストを取り出してみる – 株式会社ルーター

上記の記事で勉強させていただきました。詳しくはリンク先の記事をごらんください。
 上記の記事にある通り、Ubuntu の apt-get でインストールされる jpn.traineddata を使うのである。
 以下は 2021 年 2 月現在の状況だ。

ubuntuのjpn.traineddata

🔗 Ubuntu – focal の tesseract-ocr-jpn パッケージに関する詳細

「tesseract-ocr-jpn のダウンロード」にある「all」をクリック。

ダウンロードサイト

ミラーサーバがたくさん表示されるので、どれかでダウンロードする。

ダウンロードされる

.deb というファイルがダウンロードされるので、‎The Unarchiver などで解凍する。
解凍したフォルダの中にある「data.tar.xz」というファイルをさらに解凍すると「usr」というフォルダがあらわれるはずだ。
 その中のフォルダをいくつか開いていくと目的のブツがある。
 /usr/share/tesseract-ocr/4.00/tessdata/jpn.traineddata
 というのがファイルの場所となっている。

インストール先は、Homebrew 3.0 だと、
 /opt/homebrew/Cellar/tesseract/4.1.1/share/tessdata/
 となっている。インストール場所は、上記のリンク先の記事で詳しく解説してくれている。
 簡単にいうと、brew list tesseractで表示される関連フォルダを、ls などで調べ、eng.traineddataが入っているところと同じ場所にファイルを移動する、という感じ。

mv jpn.traineddata /opt/homebrew/Cellar/tesseract/4.1.1/share/tessdata/

なお、「jpn_vert.traineddata」というファイルもかつてはあったようだ。2021 年 2 月現在、「jpn_vert.traineddata」はダウンロードしたパッケージに含まれていない。なくてもひとまずは動く。
「jpn_vert.traineddata」はおそらく、縦書きの日本語の読みこみに関係している。

tesseract --list-langsとやれば、使用できる言語を確認できる。「jpn」が追加されていれば成功だ。

冒頭の画像でテストしてみた。

$ tesseract mousikomi.png - -l jpn
お申し込みを受付けました。

お申し込み番号 : M123456

* お問い合わせの際には、お手元にお申し込み番号をご用意ください。

完璧。
 ほかにもいろいろ試したが、精度はかなり高いという印象だ。強いていうなら記号関連がやや弱いか。それでもカギカッコとかは余裕で読み取る。
 どうであれ、これでもう、スクショしまくりである。ブラウザのテキストを選択してコピーし、エディタやメモソフトにペーストする、というわずかな手間を惜しめるわけだ。