80以上の対応言語と、ラテン文字、中国語、アラビア文字、デーヴァナーガリー文字、キリル文字など、すべての主要な書記体系をサポートする、すぐに使えるOCRです。
Gradioを使用してHuggingface Spaces 🤗に統合されています。Webデモをお試しください:
2024年9月24日 - バージョン1.7.2



pipを使用してインストール
最新の安定版リリースの場合:
pip install easyocr
最新の開発版リリースの場合:
pip install git+https://github.com/JaidedAI/EasyOCR.git
注1: Windowsの場合、最初にこちらの公式手順に従ってtorchとtorchvisionをインストールしてください: https://pytorch.org。pytorchのウェブサイトでは、お使いの環境に合った正しいCUDAバージョンを選択してください。CPUモードのみで実行する場合は、`CUDA = None`を選択してください。
注2: Dockerfileもこちらで提供しています。
import easyocr
reader = easyocr.Reader(['ch_sim','en']) # モデルをメモリにロードするため、これは一度だけ実行する必要があります
result = reader.readtext('chinese.jpg')
出力はリスト形式になり、各項目はそれぞれバウンディングボックス、検出されたテキスト、信頼度を表します。
[([[189, 75], [469, 75], [469, 165], [189, 165]], '愚園路', 0.3754989504814148),
([[86, 80], [134, 80], [134, 128], [86, 128]], '西', 0.40452659130096436),
([[517, 81], [565, 81], [565, 123], [517, 123]], '東', 0.9989598989486694),
([[78, 126], [136, 126], [136, 156], [78, 156]], '315', 0.8125889301300049),
([[514, 126], [574, 126], [574, 156], [514, 156]], '309', 0.4971577227115631),
([[226, 170], [414, 170], [414, 220], [226, 220]], 'Yuyuan Rd.', 0.8261902332305908),
([[79, 173], [125, 173], [125, 213], [79, 213]], 'W', 0.9848111271858215),
([[529, 173], [569, 173], [569, 213], [529, 213]], 'E', 0.8405593633651733)]
注1: ['ch_sim','en']は読み取りたい言語のリストです。複数の言語を同時に指定できますが、すべての言語を一緒に使用できるわけではありません。英語はすべての言語と互換性があり、共通の文字を持つ言語は通常互いに互換性があります。
注2: ファイルパスchinese.jpgの代わりに、OpenCVの画像オブジェクト(numpy配列)や画像ファイルをバイト列として渡すこともできます。生画像のURLも受け付けます。
注3: reader = easyocr.Reader(['ch_sim','en'])の行はモデルをメモリにロードするためのものです。時間はかかりますが、一度だけ実行すれば済みます。
また、より単純な出力を得るためにdetail=0を設定することもできます。
reader.readtext('chinese.jpg', detail = 0)
結果:
['愚園路', '西', '東', '315', '309', 'Yuyuan Rd.', 'W', 'E']
選択した言語のモデルの重みは自動的にダウンロードされます。または、モデルハブから手動でダウンロードして、'~/.EasyOCR/model'フォルダに配置することもできます。
GPUがない場合やGPUのメモリが少ない場合は、gpu=Falseを追加することでCPUのみのモードでモデルを実行できます。
reader = easyocr.Reader(['ch_sim','en'], gpu=False)
詳細については、チュートリアルとAPIドキュメントをお読みください。
$ easyocr -l ch_sim en -f chinese.jpg --detail=1 --gpu=True
認識モデルについては、こちらをお読みください。
検出モデル(CRAFT)については、こちらをお読みください。
reader = easyocr.Reader(['en'], detection='DB', recognition = 'Transformer')
アイデアは、最先端のモデルをEasyOCRに簡単にプラグインできるようにすることです。より優れた検出/認識モデルを作ろうとしている天才はたくさんいますが、私たちはここで天才になろうとしているわけではありません。私たちは彼らの研究を一般の人々がすぐに利用できるようにしたいだけです...無料で。(私たちは、ほとんどの天才が自分たちの研究にできるだけ早く、できるだけ大きくポジティブな影響を与えてほしいと願っていると信じています)パイプラインは下の図のようになるはずです。グレーのスロットは、交換可能な水色のモジュール用のプレースホルダーです。

このプロジェクトは、いくつかの論文とオープンソースリポジトリの研究とコードに基づいています。
すべての深層学習の実行はPytorchに基づいています。 ❤️
検出の実行には、この公式リポジトリとその論文のCRAFTアルゴリズムを使用しています(@clovaaiの@YoungminBaekに感謝)。また、彼らの事前学習済みモデルも使用しています。トレーニングスクリプトは@gmuffinessによって提供されています。
認識モデルはCRNN(論文)です。これは3つの主要なコンポーネントで構成されています: 特徴抽出(現在はResnetとVGGを使用)、系列ラベリング(LSTM)、およびデコード(CTC)。認識実行のためのトレーニングパイプラインは、deep-text-recognition-benchmarkフレームワークの修正版です。(@clovaaiの@ku21fanに感謝)このリポジトリは、もっと評価されるべき宝石のような存在です。
ビームサーチのコードは、このリポジトリと彼のブログに基づいています。(@githubharaldに感謝)
データ合成はTextRecognitionDataGeneratorに基づいています。(@Belvalに感謝)
そして、distill.pubのCTCに関する優れた記事はこちらです。
AIをすべての人が利用できるようにして、一緒に人類を前進させましょう!
貢献には3つの方法があります:
コーダー: 小さなバグや改善についてはPRを送ってください。大きな変更については、まずissueを開いて私たちと相談してください。'PR WELCOME'タグが付いたバグ/改善のissueリストがあります。
ユーザー: EasyOCRがあなたやあなたの組織にどのように役立っているかを教えてください。今後の開発を促進するのに役立ちます。また、今後のモデル改善のためにIssueセクションに失敗例を投稿してください。
テックリーダー/第一人者: このライブラリが役に立ったなら、ぜひ広めてください!(EasyOCRに関するYann Lecunの投稿をご覧ください)
新しい言語をリクエストするには、以下の2つのファイルを含むPRを送っていただく必要があります:
あなたの言語に独特な要素がある場合(例: 1. アラビア語: 文字が互いに接続されると形が変わる + 右から左に書く 2. タイ語: 行の上に配置する文字と下に配置する文字がある)、可能な限り私たちに教えてください、または役立つリンクを提供してください。実際に機能するシステムを実現するには、細部にまで注意を払うことが重要です。
最後に、私たちの優先順位が人気のある言語、または互いに文字の大部分を共有する言語のグループに向けられることをご理解ください(あなたの言語がその場合もお知らせください)。新しいモデルの開発には少なくとも1週間かかるため、新しいモデルのリリースまでしばらく待つ必要があるかもしれません。
開発中の言語のリストをご覧ください
リソースが限られているため、6か月以上前のissueは自動的にクローズされます。重要なissueがある場合は、再度issueを開いてください。
エンタープライズサポートについては、Jaided AIがカスタムOCR/AIシステムの実装、トレーニング/ファインチューニング、デプロイまでのフルサービスを提供しています。お問い合わせはこちらから。