1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

多機能5Mピクセルイメージセンサをラズパイ4で動かしてみた!

1
Last updated at Posted at 2026-03-11

この記事ではSTマイクロエレクトロニクスの多機能イメージセンサ(5Mピクセル)をラズベリーパイに接続して、画像を出力する方法を解説していきます。

1. 5Mピクセルイメージセンサ

 5MP(2560x1940)のイメージセンサは、下表のように4品種が用意されていて、カラーフィルタがないモノクローム版と、RGBとIRが混合されているカラーフィルタがついたRGB-IR版で、それぞれOBGAパッケージ版とベアダイ版が用意されています。

カラーフィルタ OBGAパッケージ ベアダイ
RGB-IR VB1943 VD1943
モノクローム VB5943 VD5943

1.1 特徴的な機能

STのウェブサイトで5MPの多機能イメージセンサを紹介していますが、主な特徴的な機能は以下のとおりです。

  • センサ内部での変換処理による5MPのIRイメージ出力と5MPのRGBベイヤー出力
  • オンチップHDR処理
  • コンテキスト管理 (フレーム単位での設定切り替え)

このほかにも、マルチ露光設定や明るさ情報の出力などさまざまな機能が搭載されています。

1.2 センサ内部での画像変換処理による5MPイメージの出力

ここからは、VD1943に搭載された2種類のセンサ内部での画像変換処理を試していきます。

1.2.1 5MPのIRイメージ出力

センサ内部での変換処理による5MPのIRイメージ出力での変換を下図で示します。4x4 RGB-IRのパターンをセンサ内部で全面IRに変換して出力します。
1.2.1 IR_Upscale.png

1.2.2 5MPのBayerイメージ出力

センサ内部での変換処理による5MPのBayerイメージ出力の変換は下図のようになり、4x4 RGB-IRのパターンをセンサ内部でBayerパターンに変換して出力します。
1.2.2 Bayerization.png

2. 環境

今回はVD1943センサをラズベリーパイ4につなげて画像を出力してみます。

  • Raspberry Pi OS (64-bit)

  • Raspberry Pi 4B ボード (4GB版)

  • VD1943 Sボード (STEVAL-***)
    2. VD1943 Sボード (STEVAL-).png

  • 22pin(細い)から15pin(太い)に変えるフレキケーブル
    2.フレキケーブル.png

以下のようにSボードをラズパイボードに接続します。
2.ラズベリーパイ.png

3. ドライバ・インストール

まずは環境をアップグレードしていきます。

$ sudo apt update
$ sudo apt dist-upgrade
$ reboot

次にドライバをインストールしていきます。Linux用のドライバはgithub上の専用ページ、もしくは各製品ページの「Tools & Software」にあるSTSW-VD1943などのページからダウンロードできます。

$ unzip vd1943-linux-driver-0.3.0.zip
$ cd vd1943-linux-driver-0.3.0/
$ cat changelog.md
$ make
$ sudo cp vd1943.ko /lib/modules/$(uname -r)
$ sudo depmod -a

デバイスツリーを更新して、リブートします。

$ cd dts/rpi1_to_4/
$ sudo dtc pcb4444_vd1943.dts -o /boot/firmware/overlays/pcb4444_vd1943.dtbo
$ echo "dtoverlay=pcb4444_vd1943" | sudo tee -a /boot/firmware/config.txt
$ reboot

リブートした後にdmesgコマンドで表示されるカーネルのログに、以下のようにvd1943があれば正しく認識されています。

$ dmesg | grep vd1943
[0.027495] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[0.027575] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[0.028603] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[0.044643] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[1.226173] /soc/csi@7e801000: Fixed dependency cycle(s) with /soc/i2c0mux/i2c@1/vd1943@10
[1.226263] /soc/i2c0mux/i2c@1/vd1943@10: Fixed dependency cycle(s) with /soc/csi@7e801000
[5.660974] vd1943: loading out-of-tree module taints kernel.
[5.790200] vd1943 10-0010: Successfully probe vd1943 sensor

4. 画像を画面に表示する

まず、ドライバのインストールが終わったので、イメージセンサからの画像を画面に表示していきます。

4.1 mediaでセンサを探す

次に以下のコマンドで、/dev/media0から/dev/media4あたりまで表示していって、"vd1943"が含まれているmediaを探します。

media-ctl -d /dev/media0 -p

表示されたデバイストポロジーに以下のようにvd1943が見つかれば、そのmediaの番号を覚えておきます。私の環境ではmedia0で見つかりました。

Device topology
- entity 1: vd1943 10-0010 (1 pad, 1 link, 0 routes)
            type V4L2 subdev subtype Sensor flags 0
            device node name /dev/v4l-subdev0
	pad0: SOURCE
		[stream:0 fmt:Y8_1X8/2560x1440 field:none colorspace:raw xfer:none quantization:full-range
		 crop.bounds:(0,0)/2560x1984
		 crop:(0,272)/2560x1440]
		-> "unicam-image":0 [ENABLED,IMMUTABLE]

以下の--print-dotのオプションを使うとトポロジーを画像化できます。

media-ctl -d /dev/media0 --print-dot > graph.dot
dot -Tpng graph.dot > graph.png

4.1 メディアのトポロジー.png

4.2 RGB画像の表示

まずはベイヤー画像出力にするため、以下のコマンドでイメージセンサのシャッターモードを1(Rolling Shutter)に設定しておきます。

v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=shutter_mode=1

私の場合にはmedia0で見つかったので、以下のコマンドでGBRGの640x480の出力に設定します。ラズパイ4の能力ではVGAくらいで試すのがまずはよいです。

media-ctl -d /dev/media0 --set-v4l2 '"vd1943 10-0010":0[fmt:SGBRG8_1X8/640x480]'

以下のようにffplayで表示してみます。colorchannelmixerで簡易的に色バランスを整えます。

ffplay -f v4l2 -video_size 640x480 -pixel_format bayer_gbrg8 -i /dev/video0 -vf "colorchannelmixer=rr=1.21:bb=1.30,eq=gamma=1/2.2"  

以下のように画像が表示されれば、OKです。
4.2 RGB画像の表示.png

また、以下のようなffmpegのコマンドで一枚の画像を保存できます。

ffmpeg -f v4l2 -pixel_format bayer_gbrg8 -video_size 640x480 -i /dev/video0 -vf "colorchannelmixer=rr=1.21:bb=1.30,eq=gamma=1/2.2" -frames:v 1 output%03d.png

4.3 IR画像の表示

次にIR画像出力に切り替えるため、以下のコマンドでイメージセンサのシャッターモードを0(Global Shutter)に設定します。

v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=shutter_mode=0

さきほどと同じvd1943のあるmediaXで、以下のコマンドでY8の640x480の出力に設定します。今度もVGAの640x480で試します。

media-ctl -d /dev/media0 --set-v4l2 '"vd1943 10-0010":0[fmt:Y8_1X8/640x480]'

以下のようにffplayで表示してみます。

ffplay -f v4l2 -video_size 640x480 -pixel_format gray -i /dev/video0 -vf "eq=gamma=1/2.2"  

以下のように表示されましたのでしょうか?
4.3 IR画像の表示.png

また、カラーと同じように以下のようなffmpegのコマンドで一枚の画像を保存できます。

ffmpeg -f v4l2 -pixel_format gray -video_size 640x480 -i /dev/video0 -vf "eq=gamma=1/2.2" -frames:v 1 output%03d.png

4.4 その他のコマンド

もし画面が暗くて何も見えない場合には以下のコマンドで露光時間やゲインを調整します。このときはffmpegを一旦終了させる必要があります。IR画像はIRの光源がないと暗く映ります。

v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=exposure=3000
v4l2-ctl -d /dev/v4l-subdev0 --set-ctrl=analogue_gain=4

調整できる値とその範囲は以下のコマンドで確認できます。上の--set-ctrlのオプションで変更できます。

v4l2-ctl -d /dev/v4l-subdev0 --list-ctrls

5. まとめ

今回は5MPの多機能イメージセンサ「VD1943」をラズパイ4上で動かしてみました。ドライバをインストールした後にカラー画像と赤外画像を1つのセンサで表示することができました。アイデア次第でいろいろな用途に使えると思います。みなさまもぜひ使ってみてください!

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?