20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

RでOCRしてみる(Tesseractパッケージ)

Posted at

#はじめに
いつものようにr-wakalangをウォッチしていたら、気になる投稿を見つけました。
image.png

何それ?RでOCRできるの?やってみたい。善は急げだ、やってみよう。

Tesseractパッケージのインストールとテスト

OCRをするには、Tesseractパッケージを利用すればいいとのこと。
まずは、公式のドキュメントと思しきものを、読んでいきます。

ドキュメントでは、まず英語が書かれた画像からテキストを読み込む手順を行っています。
テストで利用する画像はコチラ

# パッケージのインストール
install.packages("tesseract")
library(tesseract)

text <- tesseract::ocr('http://jeroen.github.io/images/testocr.png', engine = eng)
cat(text)

This is a lot of 12 point text to test the
ocr code and see if it works on all types
of file format.

The quick brown dog jumped over the
lazy fox. The quick brown dog jumped
over the lazy fox. The quick brown dog
jumped over the lazy fox. The quick
brown dog jumped over the lazy fox.

凄い!なんともお手軽に画像からテキストを読み込むことが出来ました。
次に、web上に転がっている他の英語画像も試してみることにします。

web上の画像をOCRしていく

テストで行ったことと理屈は同じです。
が、文字の種類、量などで認識率が変わってくるのかなと思い、web上に転がっている画像をいくつか選択して、それぞれ試してみます。

企業ロゴ
image.png

text <- tesseract::ocr('https://assets.media-platform.com/lifehacker/dist/images/2015/09/150914mediagene_gizmodo-w960.jpg', engine = eng)
cat(text)

Google

これは完璧。

英語の短文
image.png

text <- tesseract::ocr('https://images-fe.ssl-images-amazon.com/images/I/41V6tXnfTuL._SL200_.jpg', engine = eng)
cat(text)

DO NOT
LEAVE
DIRTY
DISHES
IN SINK

こちらも完璧。

英語長文(日本語まじり)
image.png

text <- tesseract::ocr('http://www.manecco.net/wp-content/uploads/%E8%8B%B1%E8%AA%9E%E9%95%B7%E6%96%87%E5%95%8F%E9%A1%8C%E7%B2%BE%E8%AC%9B_01.jpg', engine = eng)
cat(text)

28 PARTI fi¥i20H

ROKER, SEOMMICBAL.

Tuppence was staring at a picture over the mantelpiece. It was a
small oil painting representing a pale pink house standing close to a
canal spanned by a small bridge. There was an empty boat
drawn up under the bridge against the bank of the canal. In the dis-

5 tance were two poplar trees. It was a very pleasant little scene but,
nevertheless, Tommy wondered why Tuppence was staring at it
with such earnestness.

How funny, murmured Tuppence.

Tommy looked at her enquiringly. (a) The things that Tuppence

10 thought funny were, he knew by long experience, not really to be
described by such an adjective at all.

What do you mean, Tuppence?

It is funny. | never noticed that picture when | was here
before. But the odd thing is that | have seen that house somewhere.

15 Or perhaps its a house just like that that | have seen. | remember it
quite well ... Funny that | cant remember when and where.

(p) | expect you noticed it without really noticing you were
noticing, said Tommy, feeling his choice of words was rather
clumsy and nearly as painfully repetitive as Tuppences repetition of

20 the word funny.

Did you notice it, Tommy, when we were here last time?

No, but then | didnt look particularly.

Oh, that picture, said Miss Packard. No, | dont think you
would have seen it when you were here the last time because Im

25 almost sure it wasnt hanging over the mantelpiece then. Actually it
was a picture belonging to a certain old lady, and she gave it to your

元のテキストの書体、画像の状態にもよると思いますが、長文になると多少誤りが出てくる様子です。
途中含まれる日本語の文字化けは除くとして、

  • 行数を表す数字も含まれてしまう(むしろ精度が良いということか?)
  • I が | になっている。
  • (A)が(a)に、(B)が(p)になっている。

くらいでしょうか?
それを踏まえても、かなり精度が高いと思える結果です。

手書き+筆記体
image.png

text <- tesseract::ocr('http://kayokoyamashita.com/wp-content/uploads/image/cursive.jpg', engine = eng)
cat(text)


Dear Mes Yanushita ,
ts yo te ll Haak aa a

Ya / AM (uag veh
oth leaned san mere le of infin

~ ation frm ou, about Japan.

Lie loarred. the J. Dpapsse Ault ue
And thet Japan eis for lochoclat. Ne
tL leained that CATR) pan eheetranie th 17.8
sane Very schotp. The costume that you dea s2 .
M Ins K lagehoa lacks fosecnaling,

L Jou \ muth listertn ls
splondid ee ke Tk - ean wh Ce
brengeng. nmerqus aumaurt Ld j 5 xu s to Shaw
va. ORs Agi Thankyou dor Lorin be if -our
ached and Quy uX cant educatianal presenta

Yee S cneenely, eee

うーむ、、、
手書きの綺麗さにもよると思いますが、かなり精度は落ちています。
OCRを行うなら、コンピューターで打ち込んだ文字の方が良いでしょう。

日本語の画像からテキストを読み込む

ここまでは英語の画像を扱ってきましたが、日本語の画像をOCRできるのが理想です。
ということでやってみましょう。

インストールされている言語データの確認

tesseractは、デフォルトでは英語の言語データのみインストールしています。
現在インストールされている言語データの確認方法は下記。

tesseract_info()

$`datapath`
[1] "D:\\Users\\*******\\AppData\\Local\\tesseract4\\tesseract4\\tessdata/"

$available
[1] "eng" "osd"

$version
[1] "4.0.0"

$configs
 [1] "ambigs.train"     "api_config"       "bigram"           "box.train"       
 [5] "box.train.stderr" "digits"           "hocr"             "inter"           
 [9] "kannada"          "linebox"          "logfile"          "lstm.train"      
[13] "lstmdebug"        "makebox"          "pdf"              "quiet"           
[17] "rebox"            "strokewidth"      "tsv"              "txt"             
[21] "unlv"   

$availableengの文字が確認できますね。
続いて、日本語の言語データのダウンロードをしてみましょう。

# 日本語データのダウンロード
tesseract_download('jpn')
Downloaded: 2.36 MB  (100%)
[1] "D:\\Users\\*******\\AppData\\Local\\tesseract4\\tesseract4\\tessdata\\/jpn.traineddata"

# インストールされたか確認
tesseract_info()
$`datapath`
[1] "D:\\Users\\*******\\AppData\\Local\\tesseract4\\tesseract4\\tessdata/"

$available
[1] "eng" "jpn" "osd"  # 'jpn'が追加されている

$version
[1] "4.0.0"

$configs
 [1] "ambigs.train"     "api_config"       "bigram"           "box.train"       
 [5] "box.train.stderr" "digits"           "hocr"             "inter"           
 [9] "kannada"          "linebox"          "logfile"          "lstm.train"      
[13] "lstmdebug"        "makebox"          "pdf"              "quiet"           
[17] "rebox"            "strokewidth"      "tsv"              "txt"             
[21] "unlv"   

無事に日本語データのインストールが行えました。
早速同じ手順で日本語画像のOCRを行ってみます。

短文
image.png

text <- tesseract::ocr('https://www.kanken.or.jp/bjt/sample/images/sample_sample03_pic_sec01_01_pc.jpg', engine = 'jpn')
cat(text)

Q : やれやれやっと終わったか
みんなががんばってくれた       
納期に間に合いそうだよ

凄い!ちゃんと出来ていますね。

長文(日本語、英語混在)
image.png

text <- tesseract::ocr('https://www.kanken.or.jp/bjt/sample/images/sample_sample03_pic_sec03_02_pc.jpg', engine = 'jpn')
cat(text)

0 : 次のような電子メールが届まました
アドバルーン工業の製品が今回採用されなかった理由は何ですか

From: Munakata <munakata@eb.hicojp>
To lsomura <isomura@adobaloon.cojp>
Cc: Inada <inada@eb.hi.cojp>                                                            ]
Date: Tue, 19 June 〇〇OO 09:06:36 +0900                                            |
 Subject:Re: アドバルーン社の製品ご紹介
アドバルーン工業株式会社 磁材一郎
お世話になります
UW製品の件ですが
確かにL社より安いのですがサンプブル 5 どの位で納品できるかおききし
たところ約1ヶ月とのお答えでありまた量彦品はご相談ということでし
不社の日程が 1 ヶ月後には量産に入る予定だったため今回お断りした次
第です
また語定するためには矢類等の提出が必要ですがその点L社の物は既に
使用した実績があり書類の提出も容易です安定した製品出荷が可能か 部品
認定での番類 (回中較 部品リスト, 各種認定書類等をど) がスムーズに出せ
るか品質はどのレベルかが採用には重要な要素ですご了承下さい
以上
宗像  Hitech, Ltd.コンピュータ事業開発部

ところどころ認識出来ていない箇所があります(届きました→届まました hi.co.jp→hicojp 量産品→量彦品 etc)。
が、殆どはしっかり認識しているのではないでしょうか?
また、英語もしっかり認識しているのは、日本語データを使う上での良い部分と言えそうです。

縦書き
image.png

text <- tesseract::ocr('https://sitebk.com/wp-content/uploads/eye3.png', engine = 'jpn')
cat(text)

格で無
書き料
体るダ
22  1
RS
0
  |
  
 

え、、、うーん。
これは使い物にならなさそうですね。
誤った認識が散見されますし、縦書き特有のレイアウトにも対応しきれていない印象です。

ローカルに保存している画像データの読み込み

ここまではネット上にある画像のURLを指定し、そこにある画像をOCRにかけていました。
ただ、目的の画像がネット上ではなく自分のPCやサーバーなどに保存されていることもあります。
試しに、PCのデスクトップにある画像についても同じようにOCRできるのかやってみましょう。

試した画像は、「長文(日本語、英語混在)」でも利用したコチラの画像です。
この画像を、pic.jpgというファイル名でデスクトップ上に保存しました。

text <- tesseract::ocr('D:/Users/*****/Desktop/pic.jpg', engine = 'jpn')
cat(text)

0 : 次のような電子メールが届まました
アドバルーン工業の製品が今回採用されなかった理由は何ですか

From: Munakata <munakata@eb.hicojp>
To lsomura <isomura@adobaloon.cojp>
Cc: Inada <inada@eb.hi.cojp>                                                            ]
Date: Tue, 19 June 〇〇OO 09:06:36 +0900                                            |
 Subject:Re: アドバルーン社の製品ご紹介
アドバルーン工業株式会社 磁材一郎
お世話になります
UW製品の件ですが
確かにL社より安いのですがサンプブル 5 どの位で納品できるかおききし
たところ約1ヶ月とのお答えでありまた量彦品はご相談ということでし
不社の日程が 1 ヶ月後には量産に入る予定だったため今回お断りした次
第です
また語定するためには矢類等の提出が必要ですがその点L社の物は既に
使用した実績があり書類の提出も容易です安定した製品出荷が可能か 部品
認定での番類 (回中較 部品リスト, 各種認定書類等をど) がスムーズに出せ
るか品質はどのレベルかが採用には重要な要素ですご了承下さい
以上
宗像  Hitech, Ltd.コンピュータ事業開発部

問題なく出来ていますね!

まとめ

tesseractパッケージを利用することで、画像に含まれる日本語(や英語)を手軽にテキスト化することが出来ました。
ドキュメントを見ると、PDFからテキストを読み込む、画像の範囲を指定して読み込む、といったことも実現できるようです。
気になる人はチェックしてみましょう!
(チェックしたら記事にしてくださいっ!)

「OCRをする」って言葉が正しいのかよくわからないまま、記事を綴ったのでした。。

というわけで今日は以上でした。ばいばーい!

20
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?