Dockerでtesseractを使えるようになったキャッキャッと喜んでいたのも昔。
認識率やら取り回しやらの問題で最新版のTesseractをRasPiに組んで動かす事になりました……。
実際のところ
aptで導入できるtesseractはバージョンがやや古い
$ tesseract --version tesseract 4.1.1 leptonica-1.79.0 libgif 5.1.9 : libjpeg 6b (libjpeg-turbo 2.0.6) : libpng 1.6.37 : libtiff 4.2.0 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.4.0 Found libarchive 3.4.3 zlib/1.2.11 liblzma/5.2.5 bz2lib/1.0.8 liblz4/1.9.3 libzstd/1.4.8
必要なライブラリ群の入手
例のごとく、ビルドに必要な諸々を入手。
$ sudo apt install -y g++ autoconf automake libtool pkg-config libpng-dev libtiff5-dev zlib1g-dev
ソースコードの入手とビルド
Releases · tesseract-ocr/tesseract · GitHub
より最新版を入手。
執筆時点では5.3.0が最新なので
$ wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.0.zip
回答してcd
$ unzip 5.3.0.zip $ cd 5.3.0
指示通り、ビルドに必要な諸々をそろえてくれるシェルスクリプトを実行
$ ./autogen.sh $ ./configure --prefix=$HOME/local/
お楽しみのビルド。
RasPi4Bでは一時間ほどかかりました。
$ make $ sudo make install
$ sudo ldconfig
学習済みファイルの導入
ビルドした状態では一切の学習データが入っていないので、外からもってきます。
https://github.com/tesseract-ocr/tessdata_bestに学習済みデータが入ってるので、必要な言語のものを入手。
私は英語のみ用があったので
$ wget https://github.com/tesseract-ocr/tessdata_best/raw/main/eng.traineddata $ sudo mv eng.traineddata /home/user/local/share/tessdata/
ちゃんと認識されたか確認
$ /home/user/local/bin/tesseract --list-langs List of available languages in "/home/user/local/share/tessdata/" (1): eng
実験
deadbeef.jpg
$ convert -threshold 20000 deadbeef.jpg bindeadbeef.jpg
ためしに実行すると……カメラ越しのものが、ようやく認識できるように……。
$ /home/user/local/bin/tesseract bindeadbeef.jpg - -l eng DEAD BEEF