はるみちゃんのてっくぶろぐ

はるみちゃんのブログだよ。主に技術系の記事を書くよ。

再びtesseractでOCR

前回、高解像度の綺麗なデータを作る事ができたんや。 せやったらtesseract、結構いけるんちゃうか?って話やで。

(1)
f:id:deeptoneworks:20160927110906p:plain

(2)
f:id:deeptoneworks:20160927111006p:plain

(3)
f:id:deeptoneworks:20160927111010p:plain

(4)
f:id:deeptoneworks:20160927111030p:plain

(5)
f:id:deeptoneworks:20160927111035p:plain

(6)
f:id:deeptoneworks:20160927111043p:plain

(7)
f:id:deeptoneworks:20160927111047p:plain

(8)
f:id:deeptoneworks:20160927111101p:plain

(9)
f:id:deeptoneworks:20160927111106p:plain

(10)
f:id:deeptoneworks:20160927111114p:plain

(11)
f:id:deeptoneworks:20160927111136p:plain

(12)
f:id:deeptoneworks:20160927111141p:plain

(13)
f:id:deeptoneworks:20160927111200p:plain

番号 解答 正負
(1) 持 ち 家 o
(2) ー 0 3 1 113 x
(3) ー 773 0 53 5 3 x
(4) 5 o
(5) 252 o
(6) 27 o
(7) 230 o
(8) 257 o
(9) 285 o
(10) 453 788 x
(11) 1 o
(12) 98 o
(13) 6 o

やっぱ日本語は微妙やな。
数字はええ感じや!このサイズやったら問題ないっぽいな。 ただ「,」が認識できとらん。
小数点は認識できるんやろか?試してみよか。

(1)
f:id:deeptoneworks:20160927123411p:plain
(2)
f:id:deeptoneworks:20160927123412p:plain
(3)
f:id:deeptoneworks:20160927123413p:plain
(4)
f:id:deeptoneworks:20160927123414p:plain
(5)
f:id:deeptoneworks:20160927123415p:plain
(6)
f:id:deeptoneworks:20160927123416p:plain
(7)
f:id:deeptoneworks:20160927123417p:plain
(8)
f:id:deeptoneworks:20160927123418p:plain
(9)
f:id:deeptoneworks:20160927123419p:plain
(10)
f:id:deeptoneworks:20160927123420p:plain

番号 解答 正負
(1) 2,990 o
(2) ー 906 x
(3) 31. 5 o
(4) 33. 4 o
(5) 23. 8 o
(6) 23. 3 o
(7) 34. 6 o
(8) 30. 2 o
(9) 22. 9 o
(10) 24. 6 o

小数点もとれるっぽいな!ええ感じやん。
ただ1個取れてないのがあるなあ。

・・・お、こんな感じで数字の部分だけ切り取ったらちゃんと読み込んだわ! f:id:deeptoneworks:20160927125357p:plain

やっぱ数字の部分だけ切り取る処理を挟む必要がありそうやな。
さて、どう実装しよか。

凸包使うとかあるみたいやけど、数字は離れてるしなあ。 まあ、セルの一番左端と右端の白以外の画素の部分で切り取ったらええやろ!! 一応事前に2値画像に変えとるで!

left_pt = sys.maxsize
right_pt = 0
for row in imgray:
    for index,val in enumerate(row):
        if val == 255: continue
        if left_pt > index: left_pt = index
        if right_pt < index: right_pt = index

こんなんでええか。2重ループ嫌やけど、flatにしたらあかんからな。
で、実際には20pxくらいマージンを入れて切り取ったらこんな感じなるで。

f:id:deeptoneworks:20160928052939p:plain

ええ感じやな! 次は日本語はgoogleVisionAPIに、数字はこっちのOCRで振り分ける処理を書いて実験しなな。