Raspberry pi 4BでWebカメラ、MIPIの比較を行ったのでその評価結果をまとめる。
#MIPIカメラとは
モバイル機器内の相互接続標準化を進める組織で、データ転送、バッテリー、無線通信、ソフトなど多くの標準化を進めています。このMIPIのシリアルデータ伝送規格は2008年に制定されたD-PHYと呼ばれる規格で、主にカメラ接続(Camera Serial Interface = CSI-2)とディスプレイ接続(Display Serial Interface=DSI)用の規格です。
引用:https://monoist.atmarkit.co.jp/mn/articles/1601/28/news033_4.html
MIPIアライアンスで策定されたモバイル機器のカメラやディスプレイとのインターフェイス規格に対応したカメラ。
低消費電力、かつ高速シリアル伝送できることから携帯電話のビデオ信号接続などに使用されている。
基本的には差動(平衡)で動作し、二種類の物理層の規格が存在する。
D-PHYは、1レーンあたり最大1.0Gbpsの通信速度
M-PHYは、1レーンあたり最大6Gbpsの通信速度(ベアラー速度)
概ね、次のような仕様である。
1・2・4・8レーンで利用できる。
低EMI放射と高ノイズ耐性、低消費電力などを特徴としている。
400mVの差動振幅で、消費電力は最大3mAとされている。
引用:https://www.wdic.org/w/WDIC/MIPI
#Webカメラとは
WebカメラはPCあるいはネットワークに接続された小型のデジタルビデオカメラ。
PCにUSB接続すれば,通常のUSBメモリと同様にアクセスできる.
Video for Linux Two(Video4LinuxTwo: v4l2)で扱えるデバイスのため,カーネルがUVCドライバ(USB Video Class)に対応していれば,v4l2対応の一般のアプリケーションから利用できる.
#比較表
Webカメラ | MIPIカメラ | |
---|---|---|
デバイス依存 | ◎USBポートがあればいい | △MIPIインタフェースが必要 |
ドライバ | 用意する必要なし | メーカー独自のドライバを使用する? |
伝送帯域 | 5Gbps | 最大6Gbps |
ケーブル長 | 3m | 10cm(光ケーブルで数mまで可) |
カメラのプロパティ数 | 14個△ | 29個〇 |
価格 | 〇 | ◎ |
引用:https://www.wdic.org/w/WDIC/MIPI
引用:https://www.argocorp.com/knowledge/data.html
#WEBカメラ
使用するカメラ:Logitech(ロジテック) ウェブカメラ C270i ブラック
###v4l2-ctlでカメラのサポートするフォーマットを確認
pi@raspberrypi:~ $ v4l2-ctl --list-formats
ioctl: VIDIOC_ENUM_FMT
Type: Video Capture
[0]: 'YUYV' (YUYV 4:2:2)
[1]: 'MJPG' (Motion-JPEG, compressed)
###カメラのデバイス情報を確認
pi@raspberrypi:~ $ v4l2-ctl -D
Driver Info:
Driver name : uvcvideo
Card type : UVC Camera (046d:081b)
Bus info : usb-0000:01:00.0-1.1
Driver version : 4.19.118
Capabilities : 0x84a00001
Video Capture
Metadata Capture
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x04200001
Video Capture
Streaming
Extended Pix Format
Media Driver Info:
Driver name : uvcvideo
Model : UVC Camera (046d:081b)
Serial : E0E18750
Bus info : usb-0000:01:00.0-1.1
Media version : 4.19.118
Hardware revision: 0x00000012 (18)
Driver version : 4.19.118
Interface Info:
ID : 0x03000002
Type : V4L Video
Entity Info:
ID : 0x00000001 (1)
Name : UVC Camera (046d:081b)
Function : V4L2 I/O
Flags : default
Pad 0x01000007 : 0: Sink
UVC(USBビデオクラス対応)カメラ用のドライバでv4l2ドライバの利用が可能なようだ。
###カメラのプロパティ情報を確認
pi@raspberrypi:~ $ v4l2-ctl --list-ctrls
brightness 0x00980900 (int) : min=0 max=255 step=1 default=128 value=128
contrast 0x00980901 (int) : min=0 max=255 step=1 default=32 value=32
saturation 0x00980902 (int) : min=0 max=255 step=1 default=32 value=32
white_balance_temperature_auto 0x0098090c (bool) : default=1 value=1
gain 0x00980913 (int) : min=0 max=255 step=1 default=64 value=64
power_line_frequency 0x00980918 (menu) : min=0 max=2 default=2 value=2
white_balance_temperature 0x0098091a (int) : min=0 max=10000 step=10 default=4000 value=4000 flags=inactive
sharpness 0x0098091b (int) : min=0 max=255 step=1 default=24 value=24
backlight_compensation 0x0098091c (int) : min=0 max=1 step=1 default=0 value=0
exposure_auto 0x009a0901 (menu) : min=0 max=3 default=3 value=3
exposure_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=166 value=166 flags=inactive
exposure_auto_priority 0x009a0903 (bool) : default=0 value=1
led1_mode 0x0a046d05 (menu) : min=0 max=3 default=3 value=3
led1_frequency 0x0a046d06 (int) : min=0 max=131 step=1 default=0 value=0
自動露光機能や露光時間の設定やゲインの設定など基本的なプロパティは備わっているものの、自動ゲインの機能としては不足しており、設定項目が少ないが、照明が一定環境下の監視目的の用途であれば十分。
##Webカメラの操作方法(gstreamer)
gst-launch-1.0 v4l2src ! video/x-raw,width=640,height=480,framerate=15/2 ! videoconvert ! ximagesink
参照先:
https://www.argocorp.com/software/DL/tis/Linux/index.html
https://www.argocorp.com/UVC_camera.html
#MIPIカメラ
使用したカメラ:5MP 1080P Camera for raspberry pi 4 Model b カメラモジュール
#v4l2-ctlでカメラのサポートするフォーマットを確認
pi@raspberrypi:~ $ v4l2-ctl -D
Driver Info:
Driver name : bm2835 mmal
Card type : mmal service 16.1
Bus info : platform:bcm2835-v4l2
Driver version : 4.19.118
Capabilities : 0x85200005
Video Capture
Video Overlay
Read/Write
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x05200005
Video Capture
Video Overlay
Read/Write
Streaming
Extended Pix Format
v4l2-ctlで認識していいるが、ドライバがメーカー独自のもの。
ちなみにJetsonでは動作しなかった。(ドライバを組み込めばうまくいくかもしれないが・・・)
pi@raspberrypi:~ $ v4l2-ctl --list-ctrls
User Controls
brightness 0x00980900 (int) : min=0 max=100 step=1 default=50 value=50 flags=slider
contrast 0x00980901 (int) : min=-100 max=100 step=1 default=0 value=0 flags=slider
saturation 0x00980902 (int) : min=-100 max=100 step=1 default=0 value=0 flags=slider
red_balance 0x0098090e (int) : min=1 max=7999 step=1 default=1000 value=1000 flags=slider
blue_balance 0x0098090f (int) : min=1 max=7999 step=1 default=1000 value=1000 flags=slider
horizontal_flip 0x00980914 (bool) : default=0 value=0
vertical_flip 0x00980915 (bool) : default=0 value=0
power_line_frequency 0x00980918 (menu) : min=0 max=3 default=1 value=1
sharpness 0x0098091b (int) : min=-100 max=100 step=1 default=0 value=0 flags=slider
color_effects 0x0098091f (menu) : min=0 max=15 default=0 value=0
rotate 0x00980922 (int) : min=0 max=360 step=90 default=0 value=0 flags=modify-layout
color_effects_cbcr 0x0098092a (int) : min=0 max=65535 step=1 default=32896 value=32896
Codec Controls
video_bitrate_mode 0x009909ce (menu) : min=0 max=1 default=0 value=0 flags=update
video_bitrate 0x009909cf (int) : min=25000 max=25000000 step=25000 default=10000000 value=10000000
repeat_sequence_header 0x009909e2 (bool) : default=0 value=0
h264_i_frame_period 0x00990a66 (int) : min=0 max=2147483647 step=1 default=60 value=60
h264_level 0x00990a67 (menu) : min=0 max=11 default=11 value=11
h264_profile 0x00990a6b (menu) : min=0 max=4 default=4 value=4
Camera Controls
auto_exposure 0x009a0901 (menu) : min=0 max=3 default=0 value=1
exposure_time_absolute 0x009a0902 (int) : min=1 max=10000 step=1 default=1000 value=100
exposure_dynamic_framerate 0x009a0903 (bool) : default=0 value=0
auto_exposure_bias 0x009a0913 (intmenu): min=0 max=24 default=12 value=12
white_balance_auto_preset 0x009a0914 (menu) : min=0 max=10 default=1 value=1
image_stabilization 0x009a0916 (bool) : default=0 value=0
iso_sensitivity 0x009a0917 (intmenu): min=0 max=4 default=0 value=0
iso_sensitivity_auto 0x009a0918 (menu) : min=0 max=1 default=1 value=1
exposure_metering_mode 0x009a0919 (menu) : min=0 max=2 default=0 value=0
scene_mode 0x009a091a (menu) : min=0 max=13 default=0 value=0
JPEG Compression Controls
compression_quality 0x009d0903 (int) : min=1 max=100 step=1 default=30 value=30
カメラコントロールできるプロパティがWebカメラと比較して多いが、
動画圧縮のプロパティまであるのが特徴的。
圧縮して保存できるので、長時間録画する監視用途にはあっているかもしれない。
##MIPIカメラの操作方法
RASPBIANシステム端末に入り、以下のステートメントを実行してシステム更新を入手
sudo apt-get update
sudo apt-get upgrade
raspi-configを使ってカメラポートを設定する
sudo raspi-config
「インターフェースオプション」 - >「カメラ」を選択し、
有効にしてシステムを再起動する。
カメラをラズベリーパイにケーブルで接続した後
写真の撮影には
raspistill -o image.jpg
を、ビデオの撮影には
raspivid -o vido.h264 -t 10000
を使用できる。 (PS 10000は10秒のこと)
もちろんGstreamerでも可能。
gst-launch-1.0 v4l2src ! video/x-raw,width=640,height=480,framerate=15/2 ! videoconvert ! ximagesink
動作させるにもGstreamerのパイプラインを使用できるのでWebカメラと遜色なく開発できる。
#総評
MIPIカメラのほうがプロパティの数からカメラの機能として豊富だが、ラズパイに依存したドライバで開発しにくかったり(ラズパイが比較的よくフリーズするのでできればデスクトップPCで作業したい)、MIPIのリボンケーブルの短さでカメラの設置位置に苦労した。一方で、Webカメラはラズパイだけでなく、他のOS(Windows,Ubuntu,Jetson)などで動作もするし、簡単にカメラの移動・設置ができるので、簡易的に使用するのであればWebカメラのほうが開発しやすい。