<OCR, tesseract, python> 光学的文字認識をやってみた。
諸事情により、画像image
から、テキストを抽出をやってみた。
光学的文字認識Optical Character Recognition
というらしい。
自分の土俵でできるか、、だったが、幸いにmsys2
版があった。ラッキー。
で、必要なソフトのインストールからスタート。
このWiki
に従う。
Home · tesseract-ocr/tesseract Wiki · GitHub
>pacman -S mingw-w64-{i686,x86_64}-tesseract-ocr >pacman -S mingw-w64-{i686,x86_64}-tesseract-data-eng
mingw64を使ってこなかったが、ここで、大量にインストールが発生。
まあ、しょうがないので、進める。Go。
次。python
のパッケージのインストール。
>conda install pillow >pip install pyocr
で、環境変数設定。
export PATH=$PATH:/mingw64/bin export TESSDATA_PREFIX=/mingw64/share/tessdata
以上でインストール完了。
では、始めます。
In [7]: import pyocr In [8]: tool = pyocr.get_available_tools()[0] In [9]: tool Out[9]: <module 'pyocr.tesseract' from 'C:\\Anaconda3\\Lib\\site-packages\\pyocr\\tesseract.py'> In [10]: from PIL import Image In [14]: txt = tool.image_to_string( ...: Image.open('capture.PNG'), ...: lang='eng', ...: builder=pyocr.builders.TextBuilder(tesseract_layout=6) ...: )
できました。
できたtxt
を覗いてみましたが、、、 なんか、行けてない感じ。
単純な英語テキストなのに、完璧には変換できてない。ちと、がっかり感。
少しくぐると、
Google Cloud Vision API
というのがあって、こっちはすごいらしい。
次回試してみるかな。。。
<css> 線をひく
細い線を引きたい。
hr { height: 1px; border: none; border-top: 1px #000000 solid; }
solid まっすぐ dashed 点線 dotted 丸い点線
<ATOM> Proxy越しのアップデート、その2
Proxy越しのアップデート、その2。
久々に、アトムさんatom
のSetting
開いて、アップデートUpdate
しようとしたらこけた。
どうもプロキシさんが変わったので、設定しなおした。
ちと、はまったので、メモ。
その1...
atom
さんの設定ファイルは下記にある。
C:\\Users\\hage\\.atom\\.apmrc
その2...
設定ファイルの中身が正しく反映されているかは、下記コマンドで確認できる。
C:\Users\hage\.atom>apm config ls ; cli configs globalconfig = "C:\\Users\\hage\\.atom\\.apm\\.apmrc" user-agent = "npm/3.10.10 node/v6.9.5 win32 ia32" userconfig = "C:\\Users\\hage\\.atom\\.apmrc" ; environment configs node-gyp = "C:\\Users\\hage\\AppData\\Local\\atom\\app-1.23.3\\resources\\app\\apm\\bin\\\\..\\node_modules\\node-gyp\\bin\\node-gyp.js" ; userconfig C:\Users\hage\.atom\.apmrc http-proxy = "http://hagehage.hohoho.com:80" https-proxy = "http://hagehage.hohoho.com:80/" strict-ssl = false ; globalconfig C:\Users\hage\.atom\.apm\.apmrc cache = "C:\\Users\\hage\\.atom\\.apm" progress = false ; node bin location = C:\Users\hage\AppData\Local\atom\app-1.23.3\resources\app\apm\bin\node.exe ; cwd = C:\Users\hage\.atom ; HOME = C:\Users\hage ; "npm config ls -l" to show all defaults.
その3...
https-proxy
の設定のところは、プロキシの設定値を、https
でなくて、http
とs
を抜かないといけん。
これが一番はまった。
s
つけたままだと、アップデートのところで、次のエラーが発生した。
tunneling socket could not be established, cause=socket hang up
この人に助けられた。ありがとうです。
note.nkmk.me
昔の記事っす。
nekoyukimmm.hatenablog.com
<Python> 誰にも参照されない変数
誰にも参照されない変数...は_
らしい。
In [1]: for _ in range(10): ...: print('hage') ...: hage hage hage hage hage hage hage hage hage hage
<pandas, Python> 条件にあった行を削除する。
条件condition
にあった行Row
を削除drop
する。
まずは、お見本データフレームDataFrame
作成。
In [54]: data=''' ...: 1 2 3 4 5 ...: a b c d e ...: f g h i j ...: k l m n o ...: ''' In [55]: df = pd.read_table(io.StringIO(data), sep=' ') In [56]: df Out[56]: 1 2 3 4 5 0 a b c d e 1 f g h i j 2 k l m n o
で、行のドロップ。
インデックスindex
で指定すればよし。
In [58]: df.drop(1) Out[58]: 1 2 3 4 5 0 a b c d e 2 k l m n o In [59]: df.drop([1]) Out[59]: 1 2 3 4 5 0 a b c d e 2 k l m n o
で、列column
の場合はaxis=1
を指定。
In [61]: df.drop(['1'], axis=1) Out[61]: 2 3 4 5 0 b c d e 1 g h i j 2 l m n o
あとは、条件にあった行を見つける。
In [65]: df[['1', '3']].apply(lambda x: True if x[0] == 'f' and x[1] == 'h' else False, axis=1) Out[65]: 0 False 1 True 2 False dtype: bool In [66]: j = df[['1', '3']].apply(lambda x: True if x[0] == 'f' and x[1] == 'h' else False, axis=1) In [67]: j Out[67]: 0 False 1 True 2 False dtype: bool
で、True/False
のリストをデータフレームに突っ込めばオッケー。
In [68]: df[j] Out[68]: 1 2 3 4 5 1 f g h i j
が、、、こんな難しいことせんでも下記でよかった。。。
In [78]: df[(df['1'] == 'f') & (df['3'] == 'h')] Out[78]: 1 2 3 4 5 1 f g h i j
<mermaid> 後追いで、マーメイドの絵を出す。
JQuery.ajax()
とかで、後追いで、マーメイドmermaid
のソースsource
を読んで絵を作る方法。
mermaid.init()
をする。
うまくいった! すばらしい。
jsfiddle
で遊んでみた。
https://jsfiddle.net/3hx9ag6m/2/
すっごくお世話になったところ。助かりました。(vv)
naosim.hatenablog.jp