ハピタス登録で1,000円分になるURL
ラズパイでQRコードを読む
これやりたい。
カメラはメルカリでGETした。
$ sudo apt install libavutil56 libcairo-gobject2 libgtk-3-0 libqtgui4 libpango-1.0-0 libqtcore4 libavcodec58 libcairo2 libswscale5 libtiff5 libqt4-test libatk1.0-0 libavformat58 libgdk-pixbuf2.0-0 libilmbase23 libjasper1 libopenexr23 libpangocairo-1.0-0 libwebp6
$ sudo pip3 install opencv-python
やたら時間かかる。opencvはやっぱ重いのか→なぜか固まった。待てなくて電源ブチで再起動。やり直す。
今度は負荷計測しながらやる。Load averageはそんなでもないが…
16分経過したところでCPU使用率が4コア全部100%近くになった。
ハングしてるよなこれ。
VNCして直接pi上でやってみるか。
この「Running setup.py bdist_wheel for...」で固まるんだよな。
負荷はそれほどではないぽいが。VNCもちゃんと動いてるし…しかしインストールが進まない。
そもそもbdist_wheelって何よ
うーん、わからん。
そうか。apt update してないから?いったんキャンセルして(sudo apt updateしてから)やり直す。
$ sudo apt upgrade
$ sudo apt update
upgradeが大量にある。これか原因は。
upgrade後に再度opencvのインストール。
$ sudo pip3 install opencv-python
やはり固まった?かと思うくらい時間かかった(sshも通じない、pingだけは通る)状態が続いたが、まる1日放っておいたらコンソールが返ってきた。
しかし、python3上げてimport cv2してもNo module named 'cv2'エラーになってしまう
バージョン指定でopencvをインストールし直してみる
$ sudo pip3 install opencv-python==4.1.0
$ sudo pip3 install opencv-python==4.6.0.66
あれ!?数分でインストール成功した!
最新バージョン(4.7.0.68)がバグってだだけか!一個前の(4.6.0.66)でインストールできたっぽい!
と思ったが…
$ python3
>>> import cv2
またimport cv2がエラーに。
ImportError: libcblas.so.3 で調べる。
こうかな。
$ sudo apt-get install libatlas-base-dev
$ python3
>>> import cv2
またエラーか…が、まだまだ諦めない。
ImportError: numpy.core.multiarray でググる。
時間かかる…結局またbdist_wheelか…しかし今回はsshは固まらないので進んでるっぽい。
Webにも似たような経験談。
htopでモニタリングしたら負荷が凄いことに。
$ htop
Load averageが20超えてる。こりゃ固まって見えるわけだ…(かろうじて数分に1回画面が更新されるのでhtop自体は生きてる。numpyのインストールが重すぎるだけか)
…(gccに丸2日かかった…)
$ python3
>>> import cv2
まだダメ…だと…
numpyのバージョンチェック。
$ python3
>>> import numpy as np
>>> print(np.__version__)
>>> print(np.__path__)
ふむ。
ここで発想を変えてみよう。既にコンパイル済みのopencv2のバイナリがあればいいのではないか。
これか。
今のOSバージョンはbusterなんだが…Bullseyeって何…
いいや。OSの違いは無視。入れてみる。ままよ。
$ wget https://github.com/prepkg/opencv-raspberrypi/releases/latest/download/opencv.deb
ダメね。
そうか、コンパイル済みのopencvやnumpy取ってきても意味ないのか。要はインストールされてるpython3にマッチしたopencv&numpyを組み上げなきゃいけないんだから、やっぱpip3 numpy --upgradeしてnumpyのコンパイル走らせる必要があるのかも。
エラーをもっかいよく見てみる
これか。
$ sudo pip install numpy --upgrade --ignore-installed
いったんキャンセル。
今のnumpy 1.16.2
入るnumpy 1.16.6
状況は分かった。
再開。
$ sudo pip3 install numpy --upgrade --ignore-installed
あれ?pip3だと
今のnumpy 1.16.2
入るnumpy 1.21.6
になる。なんかpipかpip3かでnumpyが違う。このへんが原因なのか?
$ pip3 uninstall numpy
$ pip3 uninstall python3-numpy
どちらもそんなパッケージ無いってエラーになる。なぜ。
$ sudo apt purge python3-numpy
む。これでやっと python3-numpy(バージョン1.16.2)を消せたらしい。
どうにかし新たに python3-numpy(バージョン1.21.6)を入れたい。
$ pip3 list | grep numpy
$ python3 -m pip freeze | grep numpy
$ python3 -m pip3 freeze | grep numpy
$ dpkg -l numpy
$ dpkg -l python3-numpy
$ pip3 list | grep opencv-python
$ python3 -m pip freeze | grep opencv-python
$ python3 -m pip3 freeze | grep opencv-python
$ dpkg -l python3-opencv-python
$ sudo apt purge opencv-python
$ pip3 uninstall opencv-python
$ sudo pip3 uninstall opencv-python
$ python3
>>> import numpy
>>> import opencv
いずれも No module エラー。これで完全にアンインストールできたはずだ。
$ pip3 list | grep pip
$ pip3 list | grep setuptools
$ python3 -m pip3 install --upgrade pip3 setuptools
pip3とsetuptoolsが古い。どうもこれがすべての原因ぽい。
$ pip3 install --upgrade pip3 setuptools
$ pip3 install --upgrade pip setuptools
$ pip3 list | grep pip
$ pip3 list | grep setuptools
どうやら pip3をコマンドとして直接使うのはもう良くないようで、python -m pipのようにpythonのモジュールとして呼んで使うのが正しいようだ。
pip3は消え去って、pipを使う
$ pip --version
$ pip -V
pipコマンドじゃなくて python3 -m pip ... として使うのが今後のお作法っぽい。
これで晴れてnumpyとopencvの最新版をインストール試す。
とはいえ
$ python3 -m pip install numpy とはせずに
$ python3 -m pip install opencv ともせずに
以下で試す。
$ python3 -m pip install opencv-python
お!numpyがインストールされてるうえに、最新のバージョンnumpy-1.21.6が選ばれてる!
コレはうまくいく予感。
インストールに時間はかかってるが負荷もマトモでコンソールも固まったりしない。
途中から負荷が上がってきたが、コンソール固まらずsshも繋がったままだ。
gccが重いのか。
やっぱ途中からコンソールが固まり始めた。sshはかろうじてつながっているが。
負荷がすごい。Load averageが25を超え始めている。snapdが激重らしい。