忍者ブログ

Fグループ電子工作講座

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

libcameraでチューニングファイルを指定(C++)

以前、ラズパイ上でのlibcameraの使い方を記事にしました。
とりあえず動くようになったのですが、魚眼のimx219など一部カメラでは色合いが
おかしくなります。

赤外線フィルターが入っていないカメラを屋外で使うと同じようにピンク色になってしまう
のですが、屋内で使っていてもおかしい場合はチューニングファイルを指定すると改善します。

参考:Zenn@horie-t様
Raspberry Pi 5にカメラを接続する

Arducamがチューニングファイルを公開しているのでこれをダウンロードして、
任意の場所に保管します。今回は
/usr/local/share/libcamera/ipa/rpi/pisp/
にその他チューニングファイルが保管されていたので一緒に入れました。
以下はダウンロードしたファイルをpi5_imx219_120d.jsonとした場合の説明です。

libcamera-hellorpicam-helloであれば実行時にこのファイルを
 libcamera-hello --tuning-file /usr/local/share/libcamera/ipa/rpi/pisp/pi5_imx219_120d.json
の様に指定すると色合いが改善します。

また、pythonでpicamera2を使用している場合は専用の関数が用意されている様です。
参考:Zenn@horie-t様
Picamera2で魚眼レンズカメラ(Arducam 8MP IMX219)のカメラレンズシェーディング補正をする


環境変数でチューニングファイルを指定

問題はここから

C言語などを使った自作プログラムの場合--tuning-fileのような指定ができません。
 export LIBCAMERA_TUNING_FILE=ファイル
の様に環境変数を指定すれば良いとの情報も出てきたのですが、うまく適用できません。

libcameraの公式情報を見ると
 LIBCAMERA_<NAME>_TUNING_FILE
との記載があります。

これをcopilotに解説してもらうと<NAME>の部分にパイプハンドラを指定する必要があり、
ラズパイの場合は
 LIBCAMERA_RPI_TUNING_FILE
となる様です。これに従ってターミナルで
  export LIBCAMERA_RPI_TUNING_FILE=/usr/local/share/libcamera/ipa/rpi/pisp/pi5_imx219_120d.json
と実行した後で、同じターミナルでlibcamera-helloを実行すれば--tuning-file以外でも
チューニングファイルを指定できます。
同様に同じターミナルであれば自作プログラムにもチューニングファイルが適用されます。

ただし、環境変数を設定したのとは違うターミナルでプログラムを実行しても反映されず、
ターミナルを開き直すたびにリセットされてしまいます。
また、pythonでpicamera2を使用している場合はこの環境変数が適用されない様なので注意が必要です。


C言語プログラム上で指定する

本来は.bashrcとかに記載しておけばいいらしいのですが、今回はプログラム上から指定
してみます。

setenv関数を使えば環境変数を指定できるので、
#include <stdlib.h>
で機能を読み込んでおいて、メイン関数の冒頭(libcameraの初期化前の時点)で
setenv("LIBCAMERA_RPI_TUNING_FILE", "/usr/local/share/libcamera/ipa/rpi/pisp/pi5_imx219_120d.json", 1);
を実行すればそのプログラムだけにチューニングファイルを指定できるようになります。


もっと簡単に

ダウンロードしたファイルを個別に指定しましたが、自分の環境ではどうやら
/usr/local/share/libcamera/ipa/rpi/pisp/
フォルダにあるカメラ型式と同名のファイルを自動で読み込んでいるらしく、
既存のimx219.jsonimx219_olg.json等に名称変更しておき、
ダウンロードしたpi5_imx219_120d.jsonimx219.jsonとすれば個別指定しなくても
自動的に適用されます。


カメラを復習種類接続している場合や同じ素子だけど画角が違うカメラが混在している
場合など使い分けてください。
PR

コメント

プロフィール

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

最新コメント