adbird(広告鳥) 備忘録

ubuntuで画像から日本語OCRでテキスト抽出

Googleドライブ、Googleドキュメントを使って日本語OCRはできるのだけど、いちいち画像をアップロードしたりと面倒なので、精度は落ちるらしいけどサクッと日本語OCRをやりたかったので、やってみた。

tesseract 本体をインストール

 $ sudo apt-get install tesseract-ocr

日本語を読めるようにする。

 $ sudo apt-get install tesseract-ocr-jpn

のはず…。実は下記の、手動で日本語データをダウンロードする方法でやった後で、上記の方法を知ったので試していない。

手動でダウンロードする場合は、

ダウンロードフォルダ内で端末を開いて、日本語を読み取るためのデータ(jpn.traineddata)をダウンロードして、必要な場所にコピー。

$ wget https://github.com/tesseract-ocr/tessdata/raw/master/jpn.traineddata
$ sudo cp jpn.traineddata /usr/share/tesseract-ocr/4.00/tessdata/jpn.traineddata

※追記:縦書き対応

$ sudo apt install tesseract-ocr-jpn-vert

実行

以下はtest.pngを読み取って、test.txtを生成。出力先に拡張子(.txt)はいらない。

$ tesseract test.png test -l jpn

縦書きの文章をOCRする場合は

$ tesseract test.png test -l jpn_vert

スクリプト1

半角スペースを削除したり、「,」を「、」に変えたりしたかったので、スクリプト ocr.sh を作った。

tesseract $1 $2 -l jpn
sed -i -e 's/ //g' $2.txt
sed -i -e 's/,/、/g' $2.txt

実行

sh ocr.sh 入力.png 出力名(拡張子なし)

スクリプト2

上記スクリプト1だと、入力名と出力名の2つを打ち込まないといけないので、少し面倒くさい。

出力ファイル名(〇〇.txt)を入力ファイル名(〇〇.png)と同じにしていいのなら、以下のスクリプトを使う。

ただし、こちらは入力画像ファイル名の拡張子をスクリプトの方で設定してあげる必要がある。

tesseract $1.png $1 -l jpn
#tesseract $1.jpg $1 -l jpn
sed -i -e 's/ //g' $1.txt
sed -i -e 's/,/、/g' $1.txt

実行

sh ocr.sh 入力ファイル名(拡張子なし)

参考リンク