前回全然日本語や数字認識ができなかったtesseract、せめて数字だけでも認識できひんか?と思って再チャレンジ。
前回はあまりに工夫がなさすぎた。
今回実験に使うセルはこれ。
pyocrのbuilderを変えてみる
どうやら、数字だけの認識に対応したbuilderがあったらしいのでそれを使う。
(before)
txt = tool.image_to_string(
Image.open(‘./img_file_path.png’),
lang="jpn+eng",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
(after)
#一応2つとも試す
txt = tool.image_to_string(
Image.open(‘./img_file_path.png’),
lang="jpn+eng",
builder=pyocr.builders.TextBuilder(tesseract_layout=6)
)
print(txt)
txt = tool.image_to_string(
Image.open(‘./img_file_path.png’),
lang="jpn+eng",
builder=pyocr.tesseract.DigitBuilder()
)
print(txt)
結果
あかん!どっちも何もでえへん!!
数字の部分だけを切り取る
多分、隅っこに数字があるからあかんのや!! せや!!いい感じに切り取ったろ!!
image = cv2.imread(‘./image.png’)
image = image[10:,120:]
結果
(テキスト)鵬
(数字)何も出ない
あかんやん!
数字の部分を拡大する
いい感じに数字だけ抜き取れたけど、やっぱり画像が小さすぎるんや!
拡大したろ!!
image = cv2.resize(image, (200,200))
(結果)
(テキスト)38
(数字)何も出ない
おおおおおお!!!!うまくいっとる!
こんなぼやけた数字でもうまくいくんやなあ・・。でもDigitBuilderあかんやん!まあええか。
他の数字でも実験
38が偶然うまくいっただけかもしれん。他の数字でも試してみるで。
画像は貼るのだるいから結果だけ書いとくわ。
正解 | 結果 |
---|---|
5 | - |
252 | 252 |
27 | - |
230 | 230 |
257 | 257 |
285 | 285 |
1 | - |
98 | - |
6 | - |
93 | - |
99 | - |
2 | - |
102 | 102 |
・・・あかんやん!!
3桁の数字は良好やな!問題は1桁と2桁や!!
っていうか38はやっぱ偶然やったんか!!!!
画像をもっとはっきりさせる
やっぱ拡大してボヤけてるんがまずいんちゃうか? 次は「5」の画像でテストするで。
ちなみに先の実験に使った5の画像はこれや。ぼやけすぎやな。何がなにかわからん。
はっきりさせてみるで。閾値を定めて2値化や!
image = cv2.threshold(image,180,255,cv2.THRESH_BINARY)[1]
なんか微妙やな・・でもこれが限界やったわ。
(結果)
5
おおお!うまくいっとる!さて、先と同じように他のデータでも実験してみるで。
正解 | 結果 |
---|---|
5 | 5 |
252 | |
27 | - |
230 | - |
257 | 0 |
285 | - |
1 | - |
98 | - |
6 | - |
93 | - |
99 | - |
2 | - |
102 | 102 |
悪化しとるやん!!!!
2値化した画像を1つずつ見ていくと、なんか2つの数字がくっついたりしとった!!
でもチューニングも限界なんや・・・。
ちなみに
image = cv2.adaptiveThreshold(image,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,11,6)
とかでいい感じに先鋭化して2値化しようとしたけどこれもダメやった・・。
結論
多分、1個1個チューニングしていったら全部判別はできるんやろうな・・。
そんなんやったら全部自分でラベリングするわ!!!
あと自分のチューニング方法も悪いんやろな・・。
正直俺でも5か6かわからんわ!って感じやしな。
ボヤけた画像をシャープにする方法、もっと他にあるはずや。
DeepLearningで画像を高画質にするやつとかあったやろ?俺にはよくわからんわ・・・。
mnistとかを元に自分で分類器作るか・・?でもmnistの数字は綺麗すぎるし、だめそうやなあ・・。
だから、自分でボヤけた数字データセットを作って分類器つくるんかな。
方針としては以下のどっちかかな。
1)ボヤけた画像をDeepLearningにより高画質化(どうすんねん)
2)ボヤけた画像を教師データとして分類器を作成(データセットつくるのだっるいなあ・・)
でもその前に試してみたいやつがあるんや、それは次回やるで。