忍者ブログ

Fグループ電子工作講座

秋月電子SH7125ボードで始めるマイコン開発

ラズパイ専用カメラをOpenCVで使う

久々の更新です。
色々忙しくてしばらく記事を書いていませんでした。
今年度はまだまだ忙しそうですがネタが溜まっているのでボチボチ書いていきます。

以前、ラズパイにOpenCVを導入しています。
この時は画像取得用にUSBカメラを使用しました。
とりあえず使ってみる分にはUSBカメラの方が使い勝手が良いでしょう。
ただ、サイズの都合などで時々専用カメラの方が都合がいい事があります。
小さなラズパイゼロにカメラを付けたい場合にはやはり小さな専用カメラ
組み合わせたくなります。

USBカメラであれば特別な設定をすることもなく、USBカメラをラズパイに
接続すれば自動的にドライバーがインストールされてOpenCVから読み出せ
るようになります。
ラズパイ専用カメラを使う場合はちょっと設定変更が必要になります。

※2022/02/25 追記
RaspberryPiOS bullseye から色々変わりました。


ラズパイ専用カメラを設定する

OpenCVで使える様にする前に、とりあえずラズパイでカメラを使えるように設定します。
ラズパイの機材一式専用カメラを追加します。

作業は
・カメラの配線をラズパイに接続する
・デバイスを有効にする
・動作確認を行う
の3つです。

①専用カメラをラズパイに接続する

カメラを接続する際はラズパイの電源を落としてから作業しましょう。

「CAMERA」と表記のある個所に接続します。
 


ロック部品の両端を持って持ち上げます。


隙間にケーブルを差し込みます。

奥まで押し込んでください。
ロック部品がきちんと持ち上がっていないと奥まで挿さりません。

コネクタの電極とケーブルの電極が接触する向きに挿してください。


ロック部品を押し込めば接続完了です。
  

②デバイスを有効にする

※2022/02/25 追記
RaspberryPiOS bullseye から標準設定の画面に専用カメラの設定が出なくなりました。
今後はサポートされなくなる様です。
今のところはターミナルから
sudo raspi-config
で設定可能です。
参考:youtube ITエンジニアもりしーの動画様 Raspberry Pi OS(bullseye) のカメラを復活させる

raspistillが廃止されてlibcameraになった様ですが、自分でカメラの設定を入力しないと動きませんでした。
参考:メタエレ実験室様 ラズパイ新OS「Bullseye」でのカメラモジュールの使い方
※libcameraを動くように設定しなくてもOpenCVから読み出せます。

※以下旧方法
ラズベリーパイの設定から


インターフェイスのタグ
 
カメラ:

無効→有効
へ変更

OKすると再起動するように言われるので再起動
これでラズパイから専用カメラにアクセスできるようになりました。

③動作確認

ターミナルからraspistillコマンドまたはraspividコマンドを使って動作確認します。

raspistill:スチール(静止画)撮影

なにもオプションを付けずにコマンドを実行すると説明文が出てきます。

raspistill -o test.jpg

と実行すれば実行後5秒間動画が出て、5秒経過後に静止画がjpgで保存されます。
 
画像の保存先はコマンドを実行した際のフォルダなので、ディレクトリを移動していない
場合は/home/pi/です。

ちなみに標準状態だと3280×2464(8メガピクセル)なので、USBカメラのHD画質
1920×1080:2メガピクセル)より解像度は高くなります。

raspistill -o test.jpg -t 10000
等とすれば撮影までの時間をミリ秒単位で指定できます

中断するにはターミナルでCtrl+Cを入力します。

更に
raspistill -t 0 -p 0,0,1280,720

とすれば撮影せずに全画面でずっと動画を表示できます。(Ctrl+Cで中断)

ちなみにこの状態ではCPUを介さず直接HDMI出力を行っている様です。
小っちゃい割には高画質。

動画撮影コマンドも用意されています。

raspivid:ビデオ撮影
コマンドを実行すると時間経過するまで動画が撮影され、avi形式で保存されます。


OpenCVで使える様にする

ここからが本題

他サイトだと
1)raspistillで撮影(SDカードに保存)
2)OpenCVで撮影した画像を呼び出し
との方法も見かけますが、SDカードに一度保存してから読み出すため処理に時間が
かかります。
SDカードの書込み可能回数も消費してしまうためあまりいい方法ではありません。

専用カメラはカメラ用モジュールを使用する事でUSBカメラの様に扱う事ができる
ようになります。

sudo modprobe bcm2835-v4l2

modprobe:モジュールの読み込み
bcm2835-v4l2 :bcm2835(ラズパイのCPU)-Video for Linux 2

OpenCVを使う前にこのコマンドを実行すればUSBカメラと同様に扱えます。
OpenCV側のプログラムを変更する必要はありません。

で、毎回このコマンドを実行するのは面倒なので自動実行させてしまします。
etcフォルダ内にあるmodulesファイルにbcm2835-v4l2を追加します。
nanoで編集する方が多いようですが、nanoが気に入らないので
デスクトップ版の標準テキストエディタ(leafpad)でファイルを編集します。

テキストエディタを管理者権限で実行します。

jessieの場合
sudo leafpad

buster以降の場合
sudo mousepad

テキストエディタが起動するので設定ファイル/etc/modulesを開きます
ファイル>開く


etcファルダはファイル・システムから開きます

フォルダ内のmodulesファイルを開きます。

※ファイルを選ぶのが面倒な人は sudo leafpad /etc/modules でも開けます
(buster以降は sudo mousepad /etc/modules)

最下部に bcm2835-v4l2 を追加

保存して再起動すれば専用カメラをOpenCVから読み出せます。

実はmodulesファイルを編集しなくてもbcm2835-v4l2を自動実行させる方法があり、
自分の実行環境ではその設定になっているのですが、何をどう設定したのか不明です。
PR

コメント

プロフィール

HN:
ぼんどF博士
性別:
男性
自己紹介:

最新コメント