【再掲載】【PyTorch】【EasyOCR】【Streamlit】わずか20行弱でOCRアプリを作成する

公開日:2022年7月9日
最終更新日:2022年8月29日

はじめに

1年以上前の記事の振り返りです。
touch-sp.hatenablog.com
PyTorchを1.12.1+cu116にアップデートしました。

EasyOCRは1.6.0になっています。

Streamlitは1.12.2になっています。

PC環境

Ubuntu 22.04 on WSL2
Python 3.10.4
CUDA 1.16.2



今回はUbuntu22.04を新規にインストールしてCUDAを入れるところから始めました。


全体を通して2か所つまづくポイントがありました。

つまづき①

CUDAのインストールはNVIDIA公式通りに行いました。


その際に以下のエラーが出ました。

The following packages have unmet dependencies:
 libcufile-11-6 : Depends: liburcu6 but it is not installable



liburcu6_0.12.2-1_amd64.debのインストールで解決しました。


こちらを参照して下さい。

つまづき②

後述するPythonスクリプトを実行した際に以下のエラーが出ました。

Could not load library libcudnn_cnn_infer.so.8. Error: libcuda.so: cannot open shared object file: No such file or directory
Please make sure libcudnn_cnn_infer.so.8 is in your library path!



以下の1行で解決しました。

sudo ln -s /usr/lib/wsl/lib/libcuda.so.1 /usr/local/cuda/lib64/libcuda.so



こちらを参照して下さい。

Python環境構築

すべてpipでインストール可能です。

pip install torch==1.12.1+cu116 torchvision==0.13.1+cu116 --extra-index-url https://download.pytorch.org/whl/cu116
pip install easyocr
pip install streamlit

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)



実行は以下の1行です。(上記スクリプトを「ocr.py」としています。)

streamlit run ocr.py

ライブラリのバージョン

altair==4.2.0
attrs==22.1.0
blinker==1.5
cachetools==5.2.0
certifi==2022.6.15
charset-normalizer==2.1.1
click==8.1.3
commonmark==0.9.1
decorator==5.1.1
easyocr==1.6.0
entrypoints==0.4
gitdb==4.0.9
GitPython==3.1.27
idna==3.3
imageio==2.21.2
importlib-metadata==4.12.0
Jinja2==3.1.2
jsonschema==4.14.0
MarkupSafe==2.1.1
networkx==2.8.6
ninja==1.10.2.3
numpy==1.23.2
opencv-python-headless==4.5.4.60
packaging==21.3
pandas==1.4.3
Pillow==9.2.0
protobuf==3.20.1
pyarrow==9.0.0
pyclipper==1.3.0.post3
pydeck==0.8.0b1
Pygments==2.13.0
Pympler==1.0.1
pyparsing==3.0.9
pyrsistent==0.18.1
python-bidi==0.4.2
python-dateutil==2.8.2
pytz==2022.2.1
pytz-deprecation-shim==0.1.0.post0
PyWavelets==1.3.0
PyYAML==6.0
requests==2.28.1
rich==12.5.1
scikit-image==0.19.3
scipy==1.9.1
semver==2.13.0
Shapely==1.8.4
six==1.16.0
smmap==5.0.0
streamlit==1.12.2
tifffile==2022.8.12
toml==0.10.2
toolz==0.12.0
torch==1.12.1+cu116
torchvision==0.13.1+cu116
tornado==6.2
typing_extensions==4.3.0
tzdata==2022.2
tzlocal==4.2
urllib3==1.26.12
validators==0.20.0
watchdog==2.1.9
zipp==3.8.1