私的AI研究会 > EasyOCR
実用的な AI開発に向けて、文字認識エンジン「EasyOCR」を試してみる。
帳票OCRプログラム「FormOCR」で使用した Anaconda プラットホームを利用する。
Form OCR Program 環境構築
Windows/Linux 環境共通(以下は Linux の例)
(py37) $ conda info -e # conda environments: # base /home/mizutu/anaconda3 py37 * /home/mizutu/anaconda3/envs/py37 (py37) $ pip install easyocr Collecting easyocr Downloading easyocr-1.4.2-py3-none-any.whl (70.8 MB) |████████████████████████████████| 70.8 MB 9.5 kB/s Collecting scikit-image Downloading scikit_image-0.19.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (13.5 MB) |████████████████████████████████| 13.5 MB 118 kB/s : : Successfully installed Pillow-9.1.0 PyWavelets-1.3.0 easyocr-1.4.2 imageio-2.19.0 networkx-2.6.3 opencv-python-headless-4.5.4.60 python-bidi-0.4.2 scikit-image-0.19.2 tifffile-2021.11.2
(py37) $ pip list Package Version ----------------------- --------------------- : onnxruntime 1.7.2 opencv-python-headless 4.5.4.60 packaging 21.0 :・パッケージの削除
(py37) $ pip uninstall opencv-python-headless Found existing installation: opencv-python-headless 4.5.4.60 Uninstalling opencv-python-headless-4.5.4.60: Would remove: : Proceed (y/n)? y Successfully uninstalled opencv-python-headless-4.5.4.60・削除されていることを確認
(py37) $ pip list Package Version ----------------------- --------------------- : onnxruntime 1.7.2 packaging 21.0 :
$ conda activate py37 (py37) $ cd ~/workspace_py37/ (py37) $ mkdir easyocr
(py37) $ cd ~/workspace_py37/easyocr (py37$ vi easy_test1.py import easyocr reader = easyocr.Reader(['ja', 'en'], gpu=False) result = reader.readtext('images/japanese.jpg') print(result)
(py37) mizutu@ubuntu-vbox:~/workspace_py37/easyocr$ python3 easy_test1.py Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. [([[71, 49], [489, 49], [489, 159], [71, 159]], 'ポイ橋て禁止』', 0.37951311955253036), ([[95, 149], [461, 149], [461, 235], [95, 235]], 'NOLTTB', 0.4456565916559547), ([[80, 232], [475, 232], [475, 288], [80, 288]], '清潔できれいな港区を', 0.6969815870208245), ([[109, 289], [437, 289], [437, 333], [109, 333]], '潜 区 MNATOCITY', 0.7553704468017064)]
(py37) $ cd ~/workspace_py37/easyocr (py37$ vi easy_test2.py import easyocr reader = easyocr.Reader(['ja', 'en'], gpu=False) result = reader.readtext('images/japanese.jpg') for obj in result: p0, p1, p2, p3 = obj[0] text = obj[1] confidence = obj[2] print(p0, p1, p2, p3, text, confidence)
(py37) $ python3 easy_test2.py Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. [71, 49] [489, 49] [489, 159] [71, 159] ポイ橋て禁止』 0.37951311955253036 [95, 149] [461, 149] [461, 235] [95, 235] NOLTTB 0.4456565916559547 [80, 232] [475, 232] [475, 288] [80, 288] 清潔できれいな港区を 0.6969815870208245 [109, 289] [437, 289] [437, 333] [109, 333] 潜 区 MNATOCITY 0.7553704468017064
イメージオブジェクトを入力とする。
(py37) $ cd ~/workspace_py37/easyocr (py37$ vi easy_test3.py import easyocr import cv2 reader = easyocr.Reader(['ja', 'en'], gpu=False) frame = cv2.imread('images/japanese.jpg') result = reader.readtext(frame) for obj in result: p0, p1, p2, p3 = obj[0] text = obj[1] confidence = obj[2] print(p0, p1, p2, p3, text, confidence)
(py37) $ python3 easy_test3.py Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. [70, 46] [489, 46] [489, 161] [70, 161] ポイ橋て禁止』 0.23787610630466707 [95, 149] [461, 149] [461, 235] [95, 235] NOLTTB 0.4473010669317903 [80, 232] [475, 232] [475, 288] [80, 288] 清潔できれいな港区を 0.6657611839453549 [109, 289] [439, 289] [439, 331] [109, 331] 潜 区 MNATOCITY 0.5209840622583983
イメージオブジェクトを入力とする。
(py37) $ cd ~/workspace_py37/easyocr (py37$ vi easytest_cam.py import cv2 import sys import easyocr capture = cv2.VideoCapture(0) last_txt = "" reader = easyocr.Reader(['ja', 'en'], gpu=False) while True: ret, frame = capture.read() orgHeight, orgWidth = frame.shape[:2] size = (int(orgWidth/2), int(orgHeight/2)) glay = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) image = cv2.resize(glay, size) result = reader.readtext(image, detail = 0) print(result) cv2.imshow("Capture", image) if cv2.waitKey(33) >= 0: break cv2.destroyAllWindows()
(py37) $ python3 easytest_cam.py Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. ['Interiac', 'Aは国めC付き', '新画劇処理', '川町', '山りロe'] ['Interfac', '山~鹿国め CD付き', '新画劇処理1', '川町', '川りocr'] ['Interfac', '山av国C付き', '新画劇処理', '川町', 'rりuc'] ['Interfac', 'Aんv国め C付き', '新画劇理1', '山', '田ワワにし'] ['Interfac', '山av国C付き', '新画劇理', '一19', 'りこ'] :
コマンドオプション | デフォールト設定 | 意味 |
-h, --help | ヘルプ表示 | |
-i, --image | test1.png | 入力画像ファイル |
-p, --process | n | 前処理(グレイスケール変換/2値化)フラグ (y/n) |
-d, --linedel | n | 前処理(罫線消去)フラグ (y/b/n) b=バックグラウンド実行 |
--maxsize | 0 | 処理画像の最大ピクセル(0=リサイズしない) |
--log | n | 詳細ログ出力フラグ (y/n) |
-t, --title | y | タイトル表示 (y/n) |
-o, --out | non | 処理結果を出力する場合のファイルパス |
(py37) $ cd ~/workspace_py37/easyocr/ (py37) $ python3 easy_test4.py --- OCR Test with easyocr --- OpenCV version 4.5.2 OCR Test with easyocr: Starting application... - Image File : images/japanese.jpg - Preprocessing: n - Line delete : n - Max size : 0 - Log frag : n - Program Title: y - Processed out: non Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. --------------------------- ポイ橋て禁止』 NOLTTB 清潔できれいな港区を 潜 区 MNATOCITY ---------------------------
(py37) $ python3 easy_test4.py -i images/test.png --- OCR Test with easyocr --- OpenCV version 4.5.2 OCR Test with easyocr: Starting application... - Image File : images/test.png - Preprocessing: n - Line delete : n - Max size : 0 - Log frag : n - Program Title: y - Processed out: non Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. --------------------------- Tesseract 〔テッセラクトノは さまざまなオペレーティングシステム上で動作 する光学式文字認識エンジン3 名称のTesseractとは四次元超立方体の意で ある。 Apache Licenseの下でリリースされたフリーソフトウェアである145 文字認識を行うライブラリと それを用いたコマンドラインインターフェ イスを持つ。 もともとはっ98年代にプロプライエタリソフトウェアとしてヒユーレット- パッカードガ開発していたが 20の5年にオープンソースとしてリリースさ れ 開発はzoの6年からGoogleガ後援しているら 2006年 Tesseractは当時入手可能な最も正確なオープンソースのCエンジン の1つと見なされた5 歴史 Tesseractエンジンは 1985年からェ994年にかけて、 英国ブリストルとコロラ ド州グリーリーにあるヒユーレット・パッカードラボでプロプライエタリソ フトウェアとして開発されていた。 1996年にさらに変更が加えられて 「Nindowsへ移植され 1998年にCからC++に移行した。 コードの多くはcで 記述されており 部分的にC+-で記述されている。 それ以来 すべてのコード は少なくともC++コンパイラでコンパイルするように変換されている4 次の 1年間はほとんど変更ガなかつた。 その後 2095年にヒユーレット・バッカ 一ドとネバダ大学ラスベガス校 (UNLV) によってオープンソースとしてリリ 一スされた。 Tesseractの開発はzのの6年からGoogleガ後援している6 特徹 Tesseractlす 1995年の時点で文字認識精度ガ良い上位zつののCエンジンの うちの一つだった8 TesseractldLinux WNindows IIac OSxで利用できる が 開発リソースの制限により WNindowsとUbuntの開発者によってのみ厳 格なテストガ行われている45 バージョンュまでのTesseractは; 単純な1列のテキストのTIFF画像のみの入力 が可能だった 初期のバージョンにはレイアウト分析が合まれていなかったた め 複数列のテキスト、 画像 数式を入力すると 文字化けした出力ガ生成さ れた。 バージョン3oo以降 Tesseractは出力テキストのフォーマット、 hoCR 位置情報 ページレイアウト分析に対応した』 また Leptonicaライ ブラリの使用により いくつかの新しい画像形式に対応した。 Tesseractで は テキストが等幅かプロボーショナルかを検出することができる5 ---------------------------・ゴシック体のサンプル
(py37) $ python3 easy_test4.py -i images/test-g.png --- OCR Test with easyocr --- OpenCV version 4.5.2 OCR Test with easyocr: Starting application... - Image File : images/test-g.png - Preprocessing: n - Line delete : n - Max size : 0 - Log frag : n - Program Title: y - Processed out: non Using CPU. Note: This module is much faster with a GPU. [W NNPACK.cpp:80] Could not initialize NNPACK! Reason: Unsupported hardware. --------------------------- ディーブラーニングは (人工知能〕 実現方法の一つである機械学晋分類される方式である_ ディーブラーニングは 人が一つひとつルールを実装するのではなく_ 生物の の一部機能を模擬したニューラルネッ ワークに基本的な学習アルゴリズムを実装し 適切なデータを与えることで コンピュータが-データの特微を自動で学 習 見つけ出し 従来手法以上に高性能な識別や処理などができるようになるものである。 学習フェーズ 現在 ディーブラーニングを活用して 画像処理 音声処理 言語処理 予測処理などが従来手法よりも大きな成果を 上げているが 現時点では学習に必雲なアルゴリズムやブラットホームは発展途上にあり_ 用途による向き不向きや _ 勝手の良しあし 精度と処理速度などが大きく異なる ディーブラーニングで学晋させるためには大きなマシンバワー が必要であり 実装は容易ではなし 推論フェーズ 部の学習結果について オーブンソース・モデルとして 事前学習済みモデルと呼ばれるディーブラーニング学習済 みの結果が公開されている の学習済みモデルを利用すると カメラ画像やビデオデーター 写真データなどに対して比 軟的容易に画像認識や音声認識などを行うことが可能になる_ ---------------------------・その他のサンプル
(py37) $ python3 easy_test4.py -i images/test1.png (py37) $ python3 easy_test4.py -i images/yokogaki.png (py37) $ python3 easy_test4.py -i images/test_color.png (py37) $ python3 easy_test4.py -i images/sample0.png
言語 | 略称 | 言語 | 略称 | 言語 | 略称 | |||
アフリカーンス語 | Afrikaans | af | アゼルバイジャン語 | Azerbaijani | az | ボスニア語 | Bosnian | bs |
チェコ語 | Czech | cs | ウェールズ語 | Welsh | cy | デンマーク語 | Danish | da |
ドイツ語 | German | de | 英語 | English | en | スペイン語 | Spanish | es |
エストニア語 | Estonian | et | フランス語 | French | fr | アイルランド語 | Irish | ga |
クロアチア語 | Croatian | hr | ハンガリー語 | Hungarian | hu | インドネシア語 | Indonesian | id |
アイスランド語 | Icelandic | is | イタリア語 | Italian | it | 日本語 | Japanese | ja |
韓国語 | Korean | ko | クルド語 | Kurdish | ku | ラテン語 | Latin | la |
リトアニア語 | Lithuanian | lt | ラトビア語 | Latvian | lv | マオリ語 | Maori | mi |
マレー語 | Malay | ms | マルタ語 | Maltese | mt | オランダ語 | Dutch | nl |
ノルウェー語 | Norwegian | no | ポーランド語 | Polish | pl | ポルトガル語 | Portuguese | pt |
ルーマニア語 | Romanian | ro | スロバキア語 | Slovak | sk | スロベニア語 | Slovenian | sl |
アルバニア語 | Albanian | sq | スウェーデン語 | Swedish | sv | スワヒリ語 | Swahili | sw |
タイ語 | Thai | th | タガログ語 | Tagalog | tl | トルコ語 | Turkish | tr |
ウズベク語 | Uzbek | uz | ベトナム語 | Vietnamese | vi | 中国語 | Chinese | zh |
※ 42ヶ国語対応 出典:JaidedAI