Raspberry Pi 2に接続されたUSBカメラをOpenCVを入れてpython3で動作させるに至るまでとにかくErrorで長時間ハマってしまった…他にも同じことで苦しんでいる人がいるかもと思い,とりあえず覚えている範囲でメモ.
背景
以前の記事で,師匠への誕生日プレゼントとして畑監視システムを作ることになり,USBカメラの動作確認をとりあえず行った.
www.eletech.work
USBカメラの動作確認では,fswebcamというパッケージをインストールして,ターミナルでコマンドを実行することで撮影を行ったが,最終的な畑監視システムのプログラムはpython3系で組もうと思っている.理由は,会社で信号処理などを行うときに使用しているのがpython3系だからというそれだけ.でも,この縛りのせいで結構ハマってしまった…
OpenCVのインストール
USBカメラをpythonで制御する上では,OpenCVを使用するのが良さそうだった.色んなWebページを見ていると,以下の二つのパッケージをインストールすれば良さそうであった.
pi@raspberrypi:~ $ sudo apt install libopencv-dev pi@raspberrypi:~ $ sudo apt install python-opencv
がしかし,これでOpenCVをpython3プログラム上では"impot cv2"として呼び出すのだが,以下のようなエラーが出た.
ImportError: No module named 'cv2'
そうか,python3へインストール出来ていないからと思い,pip3で再度インストールする(pip3がインストールされていない場合はapt-getでまずpip3をインストールする).
pi@raspberrypi:~ $ sudo pip3 install opencv-python
すると,今度は何やらライブラリが足りないとのエラーが…
from .cv2 import * ImportError: libcblas.so.3: cannot open shared object file: No such file or directory
ということで,libatlasに関するライブラリをインストール.
pi@raspberrypi:~ $ sudo apt install libatlas-base-dev
が,まだ不足のものがあるような感じのエラー.
mportError: libQtGui.so.4: cannot open shared object file: No such file or directory
なので,このQt関連のライブラリをまたまた追加でインストール.
pi@raspberrypi:~ $ sudo apt install libqt4-dev
と,私の場合はここまでインストールした時点でやっとこそエラーが消え,動作することができました.とりあえず私と同じような境遇の人は,pip3でOpenCVをインストールして,cv2をimportして出るライブラリの不足に関するエラーを一つずつ潰していくとゴールにたどり着けると思う.
python3でのテストプログラム
OpenCVをつかってpython3でUSBカメラを使用するプログラムは以下の通り.(cap.release()とcv2.destroyAllWindows()がないと,一回プログラムを実行したのち再度実行しようとすると何かしらのエラーでRaspberry Piを再起動しなければUSBカメラを使用できなくなることがあるので注意.少なくとも私はそうだった…)
import cv2 cap = cv2.VideoCapture(0) r, img = cap.read() cv2.imwrite('test.jpg', img) cap.release() cv2.destroyAllWindows()
で,これをターミナル上で実行.
pi@raspberrypi:~ $ sudo python3 farm_camera.py farm_camera
無事,私が最近好んで飲んでいるレモンティーの撮影に成功.長い道のりであった…以前はUSBカメラではなくRaspberry Pi向けのPiCameraを使用したのでこんなややこしいことはなかったが,今回は本当にドハマりしてしまった…