![]()
18.カメラ(オプション)の使用 (2021.6.13)
RasPiにはオプションのカメラが用意されていて、基板上にも接続するためのコネクタが付いています。カメラを使用すれば色々な応用に使えるため、いつか実験してみたいと考えていましたが、ようやく実物を入手することができたので接続して動作を確認してみたいと思います。カメラは写真のようなもので、amazonで1500円程でした。ケース付のキット(基板は完成品)になっていて組み立てて使用します。そのまま置いて使えるので実験に便利だと思ったのですが、軽過ぎてケーブルに引っ張られて安定は良くありません。両面テープで置く場所に固定するかおもりを付ける必要があります。組み立ては簡単に見えますが、実は不安定なパーツを組み合わせてビス留めがしにくく難儀します。組み立ててしまえば写真のようになかなか良い感じです。写真では大きさはわからないと思いますが、実物はかなり小さくて手の平に楽々乗るほどです。

まずはRasPiでカメラが使用できるように準備をします。接続先のRasPiは旧型のモデルAで、フレキシブルケーブル用のコネクタが2個付いています(モデルB等も配置は同様)。先端側(SDカードコネクタの上)は液晶パネル用で、カメラ用はHDMIコネクタの近くの方です。同じ形状なので間違えないようにしましょう。本来はミスを避けるための設計が必要ですが、RasPiでは何も考慮されていません。カメラを使用するために、Raspberry Piの設定の項目で、カメラ(一番上の項目)を有効にして再起動すればOKです。

カメラのチェックはターミナル上で行います。次のようにすれば、test.jpgの名でカメラで撮影した静止画が保存されます。
![]()
カメラモジュール自体は小さくてオモチャのように見えますが、画質は思ったよりは鮮明できれいな印象です。カメラの画素数が2592×1944なので、かなり高密度な写真が撮れます。室内の蛍光灯の下で撮影したのが下の写真です。明るさが不足しているようで全体的に暗く、やや青っぽい画質になっています。ホワイトバランスが不十分なのでしょう。きちんと照明を当ててやれば、もっときれいに撮影できると思います。個体差があるかもしれませんが、使用に当たっては補正が必要になるかもしれません。

フォトレタッチソフトで明るさ等を調整してみました。これなら普通に見られます。

原寸で一部を切り出して見ると、ピントが甘い感じです。ピント調整はもちろん付いていないので、こんなものかもしれません。十分に明るい場所ならより鮮明になると思います。

古い時代のPythonで無ければ、カメラ用のライブラリ(python-picamera)があらかじめインストールされているとのことです。テキストもこのライブラリを使って実験しているので、詳細はそちらを参照して下さい。
調査によるとCV2と呼ばれるライブラリを使のが便利そうなので、今回はこちらでトライすることにしました。ただし、実験ではRasPiの初代モデルを使って正常に動作していましたが、その後RasPiのモデル3で同様にしてもプログラムでエラーが発生してうまく動作しませんでした。Pythonとpipのバージョンによるもののようで、古いバージョンとの同居によって実行環境の整合性が取れないようなのです。ソフト的な問題だと思いますが、正常動作しているハード以外では、回避策が見つかるまでCV2の使用は断念します。
sudo pip3 install opencv-python
sudo apt-get install libatlas3-base
カメラは動画も撮影できるので、早速テストプログラムでライブ映像を表示してみます。
テストプログラム
ここからは一般的なpicameraライブラリを使って実験を進めます。上のCV2は使いません。カメラモジュールについては、同型の別のものでテストしましたが、やはりデフォルトだとやや青めの暗い感じになるようです。ピントも甘い感じで傾向は同じでした。カメラはより高性能な後継のV2モデルも出ているので、いずれそちらを試してみたいと思います。
LIVE映像表示プログラム
将来の防犯(監視)カメラ製作に備えて、静止画と動画を撮影してファイルに保存してみます。()内は保存データ形式です。
1.静止画保存プログラム(jpg)
2.動画保存プログラム(H264)
picameraライブラリには色々なエフェクトが用意されているので、それぞれの効果等も追って試してみたいと思います。
<補足>
OpenCVが使えなかった原因は、Pythonのバージョンに合うものをインストールしなければならないからのようです。私の場合はOSをインストールした際にPythonの2系と3系が同居するものでした。互換性のためかと思いますが、これが全ての元凶だったようです。何回か上述したライブラリの削除やインストールを繰り返して、最終的に残ったのがnumpyに関するimportエラーでした。調べてみると、どうもnumpyのバージョンが古くてアップグレードの必要があるようです。そこで下記のコマンドを実行しました。
pip3 install -U numpy
単なるpipだと2系にインストールしてしまうようなのでpip3にします。とは言え半分ヤマ勘で実行したものなので、他に方法があるのかもしれません。いずれにせよ最初から3系で統一すれば問題無かったのでしょう。とにかくこれでうまく動作するようになりました。ネットの情報は2系と3系が混在して非常に紛らわしいです。環境によっては適切にインストールされるのかもしれませんが、少なくともこの問題は結構尾を引きました。ところで、OpenCVを使うと処理が簡単になるのは良いのですが、独自にウインドウを開いて表示するため応用が利きません。この先、制御画面等に表示したい目的があるので、Tkinterを利用してCANVASに表示したいと考えています。そのために必要となるライブラリはPILのImageとImageTkで、これらをまずインストールします。
sudo apt-get install python3-pil.imagetk
ネットでもCANVASを利用して表示するサンプルになりそうなプログラムはほとんど見当たらなかったのですが、ようやく参考になりそうなものを見つけました。この例ではクラスを使って実現しています。また、OpenCV(CV2)が使われています。根幹部分を参考にすれば、目的を実現することが可能になりそうで期待が膨らみます。
CANVASに表示するサンプル
![]()