マイコンで扱えるセンサには様々なものがありますが、ここでは汎用的で高機能な「カメラ」の取り扱いについて学びます。
マイコンに接続したカメラからデジタル画像を受け取るには、デバイスを回路としていかに接続するかよりも、入力された情報をソフトウェア上でいかに扱うかが重要です。
Raspberry Piでは、ラズパイ用のカメラモジュールとUSBカメラのどちらも利用可ですが、今回の演習では、ラズパイでカメラモジュールを利用し、画像解析を行う準備までを扱います。
実際の作業は以下の通りです。
VNCによるラズパイのGUI環境の利用
カメラ接続の用意
実際にカメラを接続し、テスト
貸し出せるカメラモジュールの数に限りがあるため、複数人のグループに1台のカメラのみを渡します。各自作業を進め、適宜シェアして動作の確認をしてください。(ただし状況により全員の作業が完了しないことも想定されます。各自1,2の設定を行うとともに、3に関してはまずは誰かの端末で動作する様子を観察してください。)
※本日は一旦カメラモジュールは回収しますが、最終課題でカメラを使いたい人がいたら、その時にまた相談ください。
まずは改めて、Raspberry Piにインストールされているライブラリ類を更新しておきます。
sudo apt update
sudo apt full-upgrade -y
sudo reboot
カメラ画像を扱う場合、開発時にディスプレイを接続せずにMacからGUI環境を用意してプレビューなどできるようにした方がよいので、VNCを使って接続できる環境を用意します。
VNCとは、ネットワークを介して、別のコンピューターのデスクトップ画面を遠隔で操作するためのシステムです。まずラズパイ上の環境を用意します。
Raspberry Pi上で下記を実行します。
sudo raspi-config nonint do_wayland W1
sudo reboot
続いて、下記を実行します。
sudo raspi-config nonint do_vnc 0
echo -e "Authentication=VncAuth\nEncryption=PreferOff" | sudo tee /etc/vnc/config.d/common.custom > /dev/null
VNC接続時のパスワードを設定します。
sudo vncpasswd -service -legacy
ラズパイ上のVNCサーバを再起動しておきます。
sudo systemctl restart vncserver-x11-serviced.service
次に、Mac側で接続する準備をします。
MacにVNC Viewerをインストールします。
https://www.realvnc.com/en/connect/download/viewer/macos/
アカウント登録など必要ですが、手順通りに(英語だけどがんばって)
インストール完了後、VNC Viewerからラズパイに接続します。
sshする際と同じようにIPアドレスを入力してください。
ユーザ名と、設定したパスワード を入力して接続します。
ログインに成功するとデスクトップが表示されますが、最初は解像度がおかしいかもしれません。
その場合はメニューの「Preferences」から「Control Centre」に入ると、Displayのタブの「Headless Resolution」で解像度が選べる。1280x720とか?
ラズパイをリブートすると反映されます。
まずRaspberry Pi上でカメラの設定をします。
具体的には、config.txt の末尾に、貸し出したカメラモジュールを指定しておきます。
sudo nano /boot/firmware/config.txt
開いたファイルの末尾([All]の後)に以下の1行を追記して保存
[All]
dtoverlay=imx219
カメラモジュールを貸し出します。
カメラはミニプロジェクトの際のグループ数よりも少ないので、適宜まとまってシェアして使ってください。
以下の操作の前に、ラズパイの電源を落としておいてください。
こちらの記事を参考に、カメラモジュールをRaspberry Piに接続します。
https://sozorablog.com/camera_shooting/
※カメラモジュールの物理的な接続に関してのみ、参考にしてください!設定に関しては情報が古いので無視をして、この教材の通りにしていればOKです!
向きによく注意してリボンケーブルを挿し込み、ロックします。
ラズパイの電源を入れ、ログイン(ひとまずsshでもVNCでもいい)して、下記コマンドを実行してみてください。
rpicam-hello --list-cameras
出力にNo cameraとかなんとかあると、認識できていないということです。
認識できていれば別の何かそれっぽいことを返してくれます。
認識されない場合は、設定項目の確認とともに、カメラケーブルの接触不良も考えられるので、挿し直してみるなども試してみてください。
カメラの接続後、撮影可能かをテストします。
ただしMac上のターミナルからSSHで接続する場合、ラズパイ上のGUI機能は使えないので、プレビュー表示などは利用できません。ここからはVNCで接続して、ターミナルを開いて操作するとよいでしょう。
プレビューなしで即時に撮影するには、以下のコマンドを用います。
rpicam-still -n -o photo.jpg
photo.jpgという名前で撮影された画像が保存されるので、適宜この部分は変更してください。(コマンドで指定するファイル名を変えれば別の名前で複数の写真が撮影できます。)
新しいバージョンのラズパイOSにしていれば、ダブルクリックすると画像が表示されます。古いバージョンなどで表示できなければ、画像ビューアソフトをインストールするか、Macに画像を転送して確認することもできます。
CyberduckなどのSFTPクライアントを用いるとファイルの転送はしやすくなります。
https://cyberduck.io/download/
さらに一歩進むには、例えばラズパイにウェブサーバを立ててみる手もあります。
参考サイトを参照しながら、撮影した画像ファイルを確認し、必要に応じてピントの調整をすることができます。
https://www.indoorcorgielec.com/resources/raspberry-pi/camera-setup/
実習1 ラズパイカメラで写真を撮影しよう
rpicam-still で撮影した写真をどうにかしてMacに転送して、レポートに貼りつけてください。がんばって!
今回はひとまず各自がテスト撮影できるくらいを作業の目安と考えています。
早く終わったり、カメラの共有の待ち時間などが発生した場合には、過去の課題の作業や、前回のデジタル灯篭の作業などに取り組んでください。
それでもゆとりがある場合には、以下に発展的な内容の関連リンクを置いています。適宜参照してみてください。
OpenCVというライブラリを用いてカメラを操作する方法も一般的です。
特にOpenCVを用いると、OpenCVの持つ画像認識機能を使うことができます。
(ちょっと高度になるので、チャレンジしたい人向け)
【ラズベリーパイ】監視カメラの作り方|Pythonでカメラモジュールを自在に操作
を参考に、人が来たらシャッター(写真撮影)、くらいのことができるといい感じです。
適宜やってみましょう。