やりたいこと
国会図書館プロジェクトのOCRをやってみる
動機付けはここから
https://qiita.com/yanosen_jp/items/9d3852c29c80dbb952f2
環境がWindowとのことで、こちらはUbuntuでしかやる予定が無いので後々参考外
国会図書館のNDL-OCRのgitページ
https://github.com/ndl-lab/ndlocr_cli
具体的に、詳細に
・米Amazonにのみ存在するKindle本を買ってAIに投げ込んで翻訳する
・日Amazon本のイメージファイルを文字起こししてデータ活用
・対象のデータを音声に起こしてリスニング学習する
(読み聞かせによる強制力)
・自宅の書籍を自炊して処分する
前提とする環境はVSCode上のWSL,ディストリビューションはUbuntuの最新。
環境構築はじめ(リポジトリのクローン、コンテナビルド)
まずはNDL_OCRをクローン
CLIとsubmoduleで構成されているらしく、以下で一括で取得できる。
git clone --recursive https://github.com/ndl-lab/ndlocr_cli
gitのreadmeに従いビルドを行う。
今回はLinuxで行うので以下を実施
cd ndlocr_cli`
sh ./docker/dockerbuild.sh`
**出力**
30.79 ERROR: This script does not work on Python 3.8. The minimum supported Python version is 3.9. Please use https://bootstrap.pypa.io/pip/3.8/get-pip.py instead.
コンテナのビルドに失敗。pythonのバージョンに問題があるようだ。
環境構築沼る(pyenv導入失敗)
バージョンを確認し、3.8以降になっていることを確認
python3 --version
Python 3.12.3
再度実行しても同様のメッセージ
出力
26.22 ERROR: This script does not work on Python 3.8. The minimum supported Python version is 3.9. Please use https://bootstrap.pypa.io/pip/3.8/get-pip.py instead.
ERROR: failed to solve: process "/bin/sh -c set -x && apt -y install python3.8 python3.8-dev && ln -s /usr/bin/python3.8 /usr/bin/python && apt -y install wget python3-distutils && wget https://bootstrap.pypa.io/get-pip.py && python get-pip.py && python -m pip install --upgrade pip==24.0" did not complete successfully: exit code: 1
get-pip.pyの冒頭のスクリプトによるエラーが起きており、環境のpythonバージョンと3.8を比較して未達であればキックしているもの。
それ自体は正しく記述されてそうで、しかしながら環境のpythonバージョンは3.12
コンテナを落としてきており、そこのpythonバージョンが狂っているのかな?
実行環境のpythonバージョンを3.9にしてどうなるか見てみる。
pyenvで切り替えられるらしいのでインストール
sudo apt install pyenv
**出力**
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
E: Unable to locate package pyenv
なんかインストールできない
環境構築沼る(uvを試そうとしたけどこれで解決無理目)
uvがいいらしいので試す
https://qiita.com/ssc-ksaitou/items/9da75058489ebe8c2009
#Cargo (Rustのパッケージマネージャ)
sudo apt install cargo
cargo install --git https://github.com/astral-sh/uv uv
cannot install package `uv 0.7.2`, it requires rustc 1.84 or newer, while the currently active rustc version is 1.75.0
rustcのバージョンが古いらしい
sudo apt upgrade rustc
uvを使う場合python実行の命令を書き換える必要がある(ハズ)
実行されるget-pip.py自体は.shで引っ張ってきたものなので、これを書き換えるのは無理(没)
環境構築沼る(dockerコンテナ)
VSCode上のDockerでGUIにてpython3.9コンテナをちょろっと作って(簡単に作れた)
その中で実行したらget-pip.pyまではおそらくうまくいった。
ただ、dockerがインストールされていないっぽいのでdockerコマンドは通っていない。(dockerの中のdockerってどう起動するんだろう。)
コンテナ内でdockerコマンドも受け付けてもらえず、vscodeのextensionで追加しても同じ。
コンテナinコンテナの環境も面倒そうなので一旦検討辞める。
pyenvの導入に成功
これを参考にUbuntu上にpyenvのPythonビルドの依存関係をインストール
https://zenn.dev/tigrebiz/articles/2822fb4de256d8#venv%E3%81%A7%E3%81%AE%E4%BB%AE%E6%83%B3%E7%92%B0%E5%A2%83%E6%A7%8B%E7%AF%89
sudo apt update
sudo apt install -y build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev curl libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev
pyenvが機能しなかったのは依存関係が入っていなかったかららしい
これで以下のpyenvコマンドが機能することが確認取れたのでpython3.9をインスコしていく
pyenv install -l | less
仮想環境上にpython3.9はインストールできており、これをアクティベートできた。
それでもget-pip.pyは実行が通らない。そもそもdockerコンテナ内での実行結果と出力結果がかなり異なる。
ChatGptに聞いてみる
get-pip.pyスクリプトは本日時点でpython3.8では以下のメッセージにより本来の機能を果たせていません。
「ERROR: This script does not work on Python 3.8. The minimum supported Python version is 3.9. Please use https://bootstrap.pypa.io/pip/3.8/get-pip.py instead.」
過去のいずれかの時点でpython3.8で実行可能だったか調べてください。
また、get-pip.pyスクリプトの更新履歴とその内容を調べてください。
🕰 過去の Python 3.8 対応状況
get-pip.py は、Python 3.8 が現役サポートされていた期間(2019年10月〜2024年10月)には、Python 3.8 環境で正常に動作していました。
しかし、Python 3.8 のサポート終了に伴い、get-pip.py のメインスクリプトも更新され、Python 3.8 では使用できなくなりました。
ndlocr_cliリポジトリはpython3.8を前提としているが、ここで用いるget-pip.pyは外部リポジトリのスクリプトであり、このスクリプトが更新された結果、ndlocr_cliの環境構築ができなくなっている、と理解。最終更新は2023年であり、その影響もあるだろうか。
成果はあったのか
・pyenvの使い方を理解した
・pythonの依存関係問題を見た気がする
・Qiitaに残すためにマークダウンを書く必要に迫られ、Typoraを導入してマークダウン簡単やん!という知見を得た