マイコンで扱えるセンサには様々なものがあるが、ここでは汎用的で高機能な「カメラ」の取り扱いについて学ぶ。
マイコンに接続したカメラからデジタル画像を受け取るには、デバイスを回路としていかに接続するかよりも、入力された情報をソフトウェア上でいかに扱うかが重要である。
Raspberry Piでは、ラズパイ用のカメラモジュールとUSBカメラのどちらも利用可能だが、ここではラズパイ用カメラモジュールを扱う。
参考サイト
1
カメラの接続、OpenCVからの操作
https://sozorablog.com/camera_shooting/
2
コマンドで静止画撮影、ピント調整とか
https://www.indoorcorgielec.com/resources/raspberry-pi/camera-setup/
カメラモジュールを貸し出す。
カメラは各自で管理し、最終課題後(あるいは使わなくなったら)返却すること。
こちらの記事を参考に、カメラモジュールをRaspberry Piに接続する。
向きに注意してリボンケーブルを差し込する。
Raspberry PiにSSHでログイン後、カメラの設定を確認する。
raspi-config
sudo raspi-config
からラズパイの設定画面に入り、Inteface Optionsを選択→legacy camera supportをオフにしておく。
(最初からオフになっていれば変更しなくて問題ない)
config.txtの編集
/boot/config.txt の末尾に、貸し出したカメラモジュールを表す
dtoverlay=IMX219
と書いておく。
sudo nano /boot/config.txt
リブート
設定完了後、一度リブートしておく。
sudo reboot
カメラの接続後、撮影可能かをテストする。
ただしMac上のターミナルからSSHで接続する場合、ラズパイ上のGUI機能は使えないので、プレビュー表示などは利用できない点に注意。
撮影
プレビューなしで即時に撮影するには、以下のコマンドを用いる。
libcamera-still -n -o photo.jpg
photo.jpgという名前で撮影された画像が保存される。(コマンドで指定するファイル名を変えれば別の名前で複数撮影できる)
ただし、ラズパイ上にある画像はそのままターミナルでは表示できない。
まずはファイルが作成されているか、それっぽいファイルサイズになっているかを確認してみる。
ls -l
転送
撮影した画像を見るには、何らかの手段でPCなどに転送する必要がある。
PC開発論でやったCyberduckを使って転送するのでもOK。
一歩進むには、例えばラズパイにウェブサーバを立ててみる手もある。
https://www.fabshop.jp/webserver-apache/
(他にIoTで扱うLINE Notifyで送るとかもあり得る)
参考サイトを参照。
先述の通りターミナル経由のでの接続ではプレビューができないので、撮影した画像を転送して確認しながら行う。
OpenCVというライブラリを用いてカメラを操作する方法も一般的である。
特にOpenCVを用いると、OpenCVの持つ画像認識機能を使うことができる。
(ちょっと高度になるので、チャレンジしたい人向け)
【ラズベリーパイ】監視カメラの作り方|Pythonでカメラモジュールを自在に操作
を参考に、人が来たらシャッター(写真撮影)、くらいのことができるといい感じ。
適宜やってみよう。
ただし上記サイトでは、プレビューウィンドウを開くデモなどがあるが、ターミナルからの操作ではウィンドウを開けないため、エラーになる。画面に出さずに処理をする必要がある。
いろいろ考えたけれど、やはりGUI環境を設定し、プレビューなどできるようにした方がよさそう。そこで、ラズパイにGUI環境を追加することにする。(最初のOSインストール時にLiteを選ぶと、GUI環境がないため)
OSを最初から入れ直し、Liteじゃない版を入れるのも手だが、ここまで作成したファイルのバックアップをしたり、設定をやり直したり、面倒なので、今のLiteに後付けでGUI環境を足すことにする。
まずXウィンドウシステムをインストールする。
sudo apt install -y xserver-xorg raspberrypi-ui-mods
デスクトップで起動するように設定しておく。
sudo raspi-config
で、「1 System Options」→「S5 Boot / Auto Login」→「B4 Desktop Autologin」を選択、Finish
で、再起動
次にVNCを使ってMacからGUI接続をする。
再度SSHで一度ラズパイに入り、
sudo raspi-config
で、「3 Interface Options」→「I3 VNC」をオンにする
MacにVNC Viewerをインストールする。
https://www.realvnc.com/en/connect/download/viewer/macos/
アカウント登録とか必要だけど、手順通りに(英語だけどがんばって)
インストール完了後、VNC Viewerからラズパイに接続する。
XXXXX.localなどとラズパイの名前を入れればよい。
pi / パスワード を入力して接続。
デスクトップが表示されるが、最初は解像度がおかしいかもしれない。
メニューの「Preferences」から「Raspberry Pi Configuration」に入ると、Displayのタブで解像度が選べる。1280x720とか?
ラズパイをリブートすると反映される。
まだカメラがうまく動かない気がするので、libcameraを入れ直す。
sudo apt install -y libcamera0
sudo apt install -y libcamera-apps
入ったらたぶんいけるはず??
libcamera-hello
してみよう。
画像ビューアのインストール
せっかくGUI環境を入れたなら、直接ラズパイ上で画像を表示できるように画像ビューアソフトをインストールしておこう。
sudo apt install shotwell
インストールすると、フォルダから画像をダブルクリックで表示されるようになる。
(これは一例で、いろんな画像ビューアがある。)
ここまでで、
何かをトリガにカメラを操作したり(ボタンを押したら写真撮影、センサで検知したら写真撮影等々)
カメラからの入力を別のアクションのトリガにしたり(顔を認識したら写真撮影、カメラに人が写ったらLEDが光る等々)
できるようになる。
これらを元に何かアイディアを考えてみよう。
ひとまず現段階で実際のセンサやデバイスで実現できなくてもいいので、アイディアを考えて、一部は他の簡潔な手段で代替して構わないので、何か企画をデモできるものを作成してみよう。
ただしこれは発表会などは行わない。
個人課題として作成して、その記録をレポートにまとめる。