ndlocrよくわからんかった話

## やりたいこと

国会図書館プロジェクトの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まではおそらくうまくいった。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246150/0569d310-df44-41aa-8c31-9548d01ea25b.png)
ただ、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コンテナ内での実行結果と出力結果がかなり異なる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/246150/6387d0bd-0e8c-4670-89c6-af1d0e3dbca8.png)

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を導入してマークダウン簡単やん！という知見を得た