見出し画像

Arducamの高解像度カメラを使う

Arducamの16MPオートフォーカスカメラ(imx298)を使う上での覚書です。
Buster環境でlibcamera-stillコマンドで撮影するところまではできたのですが、その後のV4L2loopbackの使用時にgstreamerとの連携がうまくできずに苦戦しました。libcameraが標準対応となったBullseyeにて再トライしたところうまくできたので、構築手順をメモしておきます。

imx519に関しては以下の記事を参照下さい。

【環境】
ハード:raspberry pi 3B
ストレージ:microSD 8GB
OS:Raspberry Pi OS Lite (Debian Bullseye) ※Raspberry Pi Imagerで書き込み

参考サイト
https://www.arducam.com/docs/cameras-for-raspberry-pi/pivariety/how-to-install-kernel-driver-for-pivariety-camera/
https://www.arducam.com/docs/cameras-for-raspberry-pi/pivariety/how-to-access-and-program-the-pivariety-camera-using-command-line-python-opencv-and-gstreamer/
https://www.uctronics.com/download/Amazon/B0323_Manual.pdf
https://gstreamer.freedesktop.org/documentation/plugins_doc.html?gi-language=c

最初に

初回起動後、sudo raspi-configからファイルシステムの拡張とI2Cインターフェイスを有効化、GPUメモリを256MBにして再起動、その後パッケージの更新とアップグレードを実行しました。

#オプションをつけてやること
sudo apt-get update --allow-releaseinfo-change
sudo apt-get upgrade

必要なものを色々と入れる

とりあえず、pythonとopencvを使ったアプリを開発したかったので
以下をいれました。opencvをLite版のOSに入れる場合、最低限のものしか入っていないので状況に応じて追加のライブラリを入れて動くようにしました。(Bullseyeになってデフォルトで入っているものもあるみたい)

#python2はv4l2のドライバをコンパイルするのに必要
sudo apt-get -y install python3-dev
sudo apt-get -y install python3-pip
sudo apt-get -y install python2 
pip3 install --upgrade pip setuptools wheel
pip3 install opencv-python==4.5.3.56
sudo apt install libwebp6
sudo apt install libtiff5
sudo apt install libopenjp2-7-dev
sudo apt install libopenexr25
sudo apt install libavcodec-extra58
sudo apt install libavformat58
sudo apt install libswscale5
sudo apt install libgtk-3-0
sudo apt install libatlas-base-dev
pip3 install -U numpy

カメラドライバをインストール

wget -O install_pivariety_pkgs.sh https://github.com/ArduCAM/Arducam-Pivariety-V4L2-Driver/releases/download/install_script/install_pivariety_pkgs.sh
chmod +x install_pivariety_pkgs.sh 
./install_pivariety_pkgs.sh -p kernel_driver
#実行後メッセージが出たらyを押して再起動

カメラを接続した状態で、dmesg | grep arducamを実行してこんな感じになっていればOK。

libcameraをインストール

./install_pivariety_pkgs.sh -p libcamera_dev
./install_pivariety_pkgs.sh -p libcamera_apps

この時点でlibcamera-stillコマンドが使えると思うのでlibcamera-still -t 500 -o test.jpgとかでテスト撮影してみる。ずらずらとテキストが流れた後、Still capture image receivedが出ていればOK。
前処理が結構かかるので、撮影されるまでに数秒かかります。

もし、Cannot Allocate Memoryとかのエラーが出るようであれば、テキストエディタで/boot/cmdline.txtを開いてcma=400Mを追記して再起動します。

V4L2Loopbackをインストール

libcamera-stillをpythonアプリでpicamreと同じように使うにはこれだと不便なのでv4l2loopbackとgstreamerを使い、ビデオデバイスとして扱うのが良さそうです。

sudo apt install git bc bison flex libssl-dev
sudo wget https://raw.githubusercontent.com/RPi-Distro/rpi-source/master/rpi-source -O /usr/local/bin/rpi-source && sudo chmod +x /usr/local/bin/rpi-source && /usr/local/bin/rpi-source -q --tag-update
rpi-source

git clone https://github.com/umlaeute/v4l2loopback.git
cd v4l2loopback
make clean && make
make && sudo make install
sudo depmod -a

GStreamerをインストール

sudo apt install -y gstreamer1.0-tools
#Lite環境のせいかgstreamer実行時にvideoconvertv4l2sinkのプラグイン要求されたので以下をインストール
sudo apt install gstreamer1.0-plugins-base
sudo apt install gstreamer1.0-plugins-good

実行してみる

sudo modprobe v4l2loopback video_nr=3
gst-launch-1.0 libcamerasrc ! 'video/x-raw,width=1920,height=1080' ! videoconvert ! tee ! v4l2sink device=/dev/video3

こんな感じにテキストが流れ始めます。
※Buster環境ではWARNING: erroneous pipeline: no element libcamerasrcが発生してうまく動きませんでした。 

別のターミナルを開いてpythonを対話モードで実行してみて、エラーとかでなければOK。






この記事が気に入ったらサポートをしてみませんか?