面倒なので自動化するよ!~画像自動読み込み失敗編~


こんにちは!

今回、年始の目標立案のために価値観リストを活用したいが、質問項目が画像のばかりみつかり打ち込むのが吐くほど面倒...
なので、文字の抽出を自動で行たいとおもいます。

実行環境

mac
python3
環境anaconda

画像を読み込む方法

・PIL(pillow)
・OpenCV
・scikit-image

一番使われるのがPLIらしい。
pillowはpythonで代表的な画像処理ライブラリで、画像のリサイズや描画を容易に行うことができます。

form PIL import Image,ImageFilter
im = Image.open('画像ファイル名')

テキストに変換する方法

・画像をテキストに変換する技術をOCR(Optical Character Recoding)という。
・OCRはOCRエンジンというソフトを使い、画像データからテキストを抽出する。
・今回はオープンソースのTesseract OCRを使用

・また、PythonからOCRエンジンを使えるようにする代表的なライブラリがPyOCRです。

txt = tool.iamge_to_string(
    Image.open('画像ファイル名')
    lang=言語名,
    builder=pyocr.builders.TextBuilder()
)

実際にpng画像をテキストに変換してみる

brew install tesseract

pyocrの日本語学習モデル取得のためにwgetもインストール

brew install wget

jpn.traineddataを取得

wget https://github.com/tesseract-ocr/tessdata/raw/4.00/jpn.traineddata
mv jpn.traineddata /usr/local/Cellar/tesseract/4.1.1/share/tessdata

※Pathが存在しない場合、以下コマンドでtesseractのpathとバージョン確認

which tessaract
tessaract -v

・コード実行

from PIL import Image
import sys

import pyocr
import pyocr.builders

tools = pyocr.get_available_tools()
if len(tools) == 0:
    print("No OCR tool found")
    sys.exit(1)

# The tools are returned in the recommended order of usage
tool = tools[0]
print("Will use tool '%s'" % (tool.get_name()))
# Ex: Will use tool 'libtesseract'

langs = tool.get_available_languages()
print("Available languages: %s" % ", ".join(langs))
lang = 'jpn'
print("Will use lang '%s'" % (lang))
# Ex: Will use lang 'fra'
# Note that languages are NOT sorted in any way. Please refer
# to the system locale settings for the default language
# to use.

txt = tool.image_to_string(
    Image.open('target.png'),
    lang=lang,
    builder=pyocr.builders.TextBuilder()
)
# txt is a Python string

print(txt)

変換元

変換結果

python3 Image-To-Text.py
Will use tool 'Tesseract (sh)'
Available languages: eng, jpn, osd, snum
Will use lang 'jpn'
       ⑧②        

⑧②            

          a  

I          M   

BAMN    

H            fW  

    Au  ⑧②  Aea

        D      

HR&⑦⑥④    a 

iams aaliitcdiits

           $   

EROEREfaiR ezRtd

 @    B   igu   o

   i   Ma

①⑧f          

       M   

GEiESimEreiirimeikid

IR    W        

       aREe

⑧②          

IIN   M  00      aa
    BA         

       0  i  k   
       h 

ERte itha taiii

Reaeimtiisaci

R    0  mmWk   

N   f       

IR  Mi+S     

       

⑧②0  A     

⑧②            B   

⑧②             

R  R   M 

   IM     

HA    z   

      E    

       W    

   R    $  

  M         m   

H&lcmtg  A    $  

⑧②0       0 

きびしいですね...
画像の画質もあるのでしょうか、それともライブラリの問題でしょうか、どちらにせよ読めません...

(追記)Cloud Vision APIの方が断然精度がよいです...

GoogleのAPI、さすが精度がよいですね。
時間を見つけて実装し直していきたいです。

参考

https://aitanu.com/kachikan-list/
https://qiita.com/seigot/items/7d424000c8d35e5146e4
https://punhundon-lifeshift.com/tesseract_ocr
https://webkaru.net/dev/mac-wget-command-install/
https://cloud.google.com/vision/?hl=ja