【改訂】【Python】【EasyOCR】【Streamlit】わずか20行弱でOCRアプリを作成する EasyOCR 1.2.x から 1.3.xにアップデート

はじめに

EasyOCR が1.2から1.3にバージョンアップしています。
変更点の一つにこのようなものがあります。

Add support for PIL image

以前はPILで画像を開いてnumpy配列に変換していましたがこの過程が不要になります。さっそく過去のスクリプトで試してみました。
touch-sp.hatenablog.com

変更できるところ

変更前

result = reader.readtext(np.array(pil))

変更後

result = reader.readtext(pil)

これによってnumpyのインポートが必要なくなります。1行少なくできました。

修正後のPythonスクリプト

from PIL import Image, ImageDraw
import easyocr
import streamlit as st

reader = easyocr.Reader(['ja','en'])
selected_image = st.file_uploader('upload image', type='jpg')

original_image = st.empty()
result_image = st.empty()

if (selected_image != None):
    original_image.image(selected_image)
    pil = Image.open(selected_image)
    result = reader.readtext(pil)
    draw = ImageDraw.Draw(pil)
    for each_result in result:
        draw.rectangle(tuple(each_result[0][0] + each_result[0][2]), outline=(0, 0, 255), width=3)
        st.write(each_result[1])
    result_image.image(pil)

たったこれだけですか?はい、その通りです。
Python環境に「easyocr」と「streamlit」をpipでインストールするだけで実行できます。
GPU非搭載のノートPCで動かすと少し時間がかかりましたが問題なく動作します。
実行は以下の1行。(上記スクリプトを「ocr.py」としています。)

streamlit run ocr.py

Python環境

altair==4.1.0
argon2-cffi==20.1.0
astor==0.8.1
async-generator==1.10
attrs==21.2.0
backcall==0.2.0
base58==2.1.0
bleach==3.3.0
blinker==1.4
cachetools==4.2.2
certifi==2021.5.30
cffi==1.14.5
chardet==4.0.0
click==7.1.2
colorama==0.4.4
cycler==0.10.0
decorator==4.4.2
defusedxml==0.7.1
easyocr==1.3.2
entrypoints==0.3
gitdb==4.0.7
GitPython==3.1.17
idna==2.10
imageio==2.9.0
ipykernel==5.5.5
ipython==7.24.1
ipython-genutils==0.2.0
ipywidgets==7.6.3
jedi==0.18.0
Jinja2==3.0.1
jsonschema==3.2.0
jupyter-client==6.1.12
jupyter-core==4.7.1
jupyterlab-pygments==0.1.2
jupyterlab-widgets==1.0.0
kiwisolver==1.3.1
MarkupSafe==2.0.1
matplotlib==3.4.2
matplotlib-inline==0.1.2
mistune==0.8.4
nbclient==0.5.3
nbconvert==6.0.7
nbformat==5.1.3
nest-asyncio==1.5.1
networkx==2.5.1
notebook==6.4.0
numpy==1.20.3
opencv-python==4.5.2.52
packaging==20.9
pandas==1.2.4
pandocfilters==1.4.3
parso==0.8.2
pickleshare==0.7.5
Pillow==8.2.0
prometheus-client==0.11.0
prompt-toolkit==3.0.18
protobuf==3.17.2
pyarrow==4.0.1
pycparser==2.20
pydeck==0.6.2
Pygments==2.9.0
pyparsing==2.4.7
pyrsistent==0.17.3
python-bidi==0.4.2
python-dateutil==2.8.1
pytz==2021.1
PyWavelets==1.1.1
pywin32==301
pywinpty==1.1.1
PyYAML==5.4.1
pyzmq==22.1.0
requests==2.25.1
scikit-image==0.18.1
scipy==1.6.3
Send2Trash==1.5.0
six==1.16.0
smmap==4.0.0
streamlit==0.82.0
terminado==0.10.0
testpath==0.5.0
tifffile==2021.4.8
toml==0.10.2
toolz==0.11.1
torch==1.8.1
torchvision==0.9.1
tornado==6.1
traitlets==5.0.5
typing-extensions==3.10.0.0
tzlocal==2.1
urllib3==1.26.5
validators==0.18.2
watchdog==2.1.2
wcwidth==0.2.5
webencodings==0.5.1
widgetsnbextension==3.5.1

2021年11月19日追記(easyocr 1.4.1)

以下の環境(RTX 3060 Laptop)で動作確認できました。

easyocr==1.4.1
streamlit==1.2.0
torch==1.10.0+cu113
torchvision==0.11.1+cu113

2022年3月18日追記(easyocr 1.4.1)

以下の環境で動作確認できました。
「opencv-python-headless」は4.5.5.64から4.5.4.60にダウングレードする必要がありました。

Windows 11

Windows 11
python 3.9.10
easyocr==1.4.1
streamlit==1.7.0
torch==1.11.0+cu113
torchvision==0.12.0+cu113
opencv-python-headless==4.5.4.60

Ubuntu 20.04 on WSL2

Ubuntu 20.04 on WSL2
python 3.9.5
easyocr==1.4.1
streamlit==1.7.0
torch==1.11.0+cu113
torchvision==0.12.0+cu113
opencv-python-headless==4.5.4.60

2022年4月26日追記(easyocr 1.4.2)

以下の環境で動作確認できました。

Ubuntu 22.04 on WSL2

Ubuntu 22.04 on WSL2
python 3.10.4
easyocr==1.4.2
streamlit==1.8.1
torch==1.11.0+cu113
torchvision==0.12.0+cu113

2022年7月9日追記

新しい記事を書きました。
touch-sp.hatenablog.com