メインコンテンツへスキップ
見出し画像

Arducam imx519の使い方

    Kickstaterで出資を募集していたArducamの新しい高性能カメラが入手できたので使い方について紹介します。
    1600万画素、AF付きで$25と、ラズパイの公式カメラに比べてコスパに優ますが、使用方法が公式カメラと変わっているので注意が必要です。
    特にPythonスクリプトで動かす場合に、同じみのライブラリであるPicameraが使えないので、今回は代替として使えそうなPicamera2についても紹介します。

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

    CLIでの開発がメインなのでLite版を使っています

    インストール

    sudo raspi-configでGPUメモリの割当を多くしておきます。(GUI使う場合)

    画像

    公式のマニュアルに従ってインストール

    sudo apt update
    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 libcamera_dev
    ./install_pivariety_pkgs.sh -p libcamera_apps
    ./install_pivariety_pkgs.sh -p imx519_kernel_driver

    再起動後に以下のコマンドを実行して'still  capture image received'とでていればOKです。CLI環境だとプレビュー表示無いですが、GUI環境だとカメラのプレビューが表示されるっぽいです。

    libcamera-still -t 1 -o test.jpg --autofocus
    画像
    めっちゃログが流れます
    画像
    こんな感じで撮れて保安官もニッコリ

    Picamera2とは

    RasbianがBullseyeになってからカメラ関係の制御はlibcameraベースに置き換わりました。これにより、様々なカメラが使えるようになった反面picameraのようなpythonから制御するようなライブラリの開発が未完成のため、少々使い勝手が悪い状況でした。
    そんな中、ようやくpicameraの後継として登場したpythonライブラリがpicamera2です。
    まだプレビュー版のリリースということもあり、インストールが少し面倒ですのでやり方を書いておきます。

    Picamera2のインストール方法

    pipでインストールできるようになったので以下のコマンドだけでOKです。(6/13追記)

    sudo apt install -y python3-libcamera python3-kms++
    sudo apt install -y python3-prctl libatlas-base-dev ffmpeg libopenjp2-7 python3-pyqt5
    pip3 install numpy --upgrade
    NOGUI=1 pip3 install picamera2
    #Opencvはお好みで
    apt install -y python3-opencv

    以下の手順は不要です。(6/13追記)
    Libcameraをビルドする環境を整えます。

    sudo apt install -y python3-pip git
    sudo pip3 install jinja2
    sudo apt install -y libboost-dev
    sudo apt install -y libgnutls28-dev openssl libtiff5-dev
    sudo apt install -y qtbase5-dev libqt5core5a libqt5gui5 libqt5widgets5
    sudo apt install -y meson
    sudo pip3 install pyyaml ply
    sudo pip3 install --upgrade meson
    sudo apt install -y libglib2.0-dev libgstreamer-plugins-base1.0-dev

    Picamera2用のlibcameraリポジトリをGitから取得してカレントディレクトリを変更します。

    git clone --branch picamera2 https://github.com/raspberrypi/libcamera.git
    cd libcamera

    mesonを実行

    meson build --buildtype=release -Dpipelines=raspberrypi -Dipas=raspberrypi -Dv4l2=true -Dgstreamer=enabled -Dtest=false -Dlc-compliance=disabled -Dcam=disabled -Dqcam=disabled -Ddocumentation=disabled -Dpycamera=enabled

    ビルドしてインストールします。raspberrypi3以前を使っている場合-j 2オプションをつけないとビルド中にハングします。

    ninja -C build -j 2
    sudo ninja -C build install

    カレントディレクトリをルートに戻したら今度はDRM/KMSをビルドします。

    cd ~
    git clone https://github.com/tomba/kmsxx.git
    cd kmsxx
    git submodule update --init
    sudo apt install -y libfmt-dev libdrm-dev
    meson build
    ninja -C build -j 2

    v4l2を入れます。

    cd ~
    git clone https://github.com/RaspberryPiFoundation/python-v4l2.git
    

    Picamra2とその他必要なライブラリをインストールします。

    cd ~
    sudo pip3 install pyopengl
    sudo pip3 install pillow
    sudo pip3 install v4l2-fix
    sudo apt install -y python3-pyqt5
    sudo apt install -y libopenjp2-7-dev
    git clone https://github.com/raspberrypi/picamera2.git

    .bashrcに環境変数を追加します。

    echo "export PYTHONPATH=/home/pi/picamera2:/home/pi/libcamera/build/src/py:/home/pi/kmsxx/build/py:/home/pi/python-v4l2" >> ~/.bashrc

    opencvも必要なのでインストールします。

    sudo pip3 install opencv-python==4.4.0.46
    sudo apt install -y libatlas-base-dev
    sudo pip3 install numpy --upgrade

    恐らくraspberrypi3以前のものを使っている場合、picamera2使用時にエラーで落ちるので、/boot/cmdline.txtをテキストエディタで開いてcma=400Mを追記して再起動して下さい。

    以上でPicamera2の導入が完了です。

    使ってみる

    以下のようなスクリプトを組んで動かしてみます。

    #2022年3月15日にpicamera2の大幅な変更があったので一部修正しました
    #from picamera2 import *
    from picamera2.picamera2 import *
    #from null_preview import *
    from time import sleep
    
    picam2 = Picamera2()
    #preview = NullPreview(picam2)
    picam2.start_preview()
    preview_config = picam2.preview_configuration()
    capture_config = picam2.still_configuration()
    
    picam2.configure(preview_config)
    picam2.start()
    sleep(2)
    picam2.switch_mode_and_capture_file(capture_config, "test.jpg")


    画像
    ログがめっちゃ流れますが正常です

    Picameraほど快適ではないですが、ひとまずpythonからカメラ制御ができるようになりました。Picamera2のドキュメント見るとシャッタースピードや解像度等の各種パラメータもいじれます。(細かい制御に関しては、また別の記事で)

    2022/3/18 フォーカス制御について記事を作成しました。

    少し試行錯誤が必要でしたが、Picamera2のおかげでFacTransの開発も一歩前進しました。
    ここまで読んで頂きありがとうございました。




     
     
    長野県で活動するベンチャー企業、 株式会社Arcana製作所の公式noteです。 3Dスキャナの開発がメインですが、 ジャンル問わずハードやソフトの受託開発もしています。 面白いことにチャレンジしていく会社です。 https://arcana-mfg.com/

    あなたへのおすすめ