Raspberry Pi (Ubuntu) に,カメラケーブルでカメラを接続する。
mjpg-stream や motion は,デバイス v4l2 (Video for Linux Two) 対応のカメラモジュールを扱う。。
v4l2 の存在チェック
$ sudo apt install libv4l-dev
Reading package lists... Done
Building dependency tree
Reading state information... Done
libv4l-dev is already the newest version (1.18.0-2build1).
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
v4l-utils をインストール
$ sudo apt install v4l-utils
v4l-utils で<接続が認識されているカメラ一覧>を表示:
$ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
/dev/media1
bcm2835-isp (platform:bcm2835-isp):
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/media0
Cannot open device /dev/video0, exiting.
カメラは認識されていない。
カメラが認識されるとは,カメラがデバイス /dev/video0 になることである。
「カメラ有効化の設定」とは,こうなるようにする設定のことである。
この設定は,
/boot/firmware/config.txt
の [all] のところに,つぎの2行を追加することである:
ここで,gpu_mem は,GPU に割り当てるメモリ。
config.txt につぎの警告がある:
# Please DO NOT modify this file;
# if you need to modify the boot config,
# the "usercfg.txt" file is the place to include user changes.
実際,config.txt の最後が,つぎの1行になっている:
これを信じて /boot/firmware/usercfg.txt の方に上の2行を書いてもダメ。
config.txt に直接書くことが必要
この設定をして reboot すれば,/dev/video0 ができている:
~$ ls /dev | grep video
video0
video10
video11
video12
video13
video14
video15
video16
そして,カメラがつぎのように認識されている:
$ v4l2-ctl --list-devices
bcm2835-codec-decode (platform:bcm2835-codec):
/dev/video10
/dev/video11
/dev/video12
/dev/media1
bcm2835-isp (platform:bcm2835-isp):
/dev/video13
/dev/video14
/dev/video15
/dev/video16
/dev/media0
mmal service 16.1 (platform:bcm2835-v4l2):
/dev/video0
ネット上には,/dev/video0 を表示させる how to 論が数多あるが,以上がソルーションである。
──他のことをするのは,無駄で終わるだけでなく,システムを汚してしまうことになる。
解説
(Boot options in config.txt より)
- start_x=1 implies start_file=start_x.elf fixup_file=fixup_x.dat
- start_x=1 should be specified when using the camera module.
Enabling the camera via raspi-config will set this automatically.
(Memory options in config.txt より)
- start_x=1 implies start_file=start_x.elf fixup_file=fixup_x.dat
- gpu_mem Specifies how much memory, in megabytes, to reserve for the exclusive use of the GPU: the remaining memory is allocated to the ARM CPU for use by the OS.
- The memory allocated to the GPU is used for display, 3D, Codec and camera purposes as well as some basic firmware housekeeping. The maximums specified below assume you are using all these features.
- The recommended maximum values are as follows:
total RAM |
gpu_mem |
256MB |
128 |
512MB |
384 |
≧1GB |
512 |
但し,Raspberry Pi 3 B (1GB) の場合,gpu_mem を 512 に設定してみると,GUI がほとんどフリーズ状態になる。
gpu_mem の設定は,単純な話ではないということである。
備考
「start_x=1」は,カメラの認識に関わる。
──これを設定しないと,カメラは認識されない。
では,設定を「start_x=1」だけにして,「gpu_mem = 128」を設定しないとどうなるか (デフォルトは 76MB)?
カメラは認識されるが,例えば mjpg-streamer は,つぎのようになって起動に至らない:
MJPG Streamer Version: git rev: 310b29f4a94c46652b20c4b7b6e5cf24e532af39
i: Using V4L2 device.: /dev/video0
i: Desired Resolution: 1600 x 1200
i: Frames Per Second.: 1
i: Format............: YUYV
i: JPEG Quality......: 100
i: TV-Norm...........: DEFAULT
o: www-folder-path......: /home/ubuntu/mjpg-streamer/www/
o: HTTP TCP port........: 8080
o: HTTP Listen Address..: (null)
o: username:password....: disabled
o: commands.............: enabled
libv4l2: error turning on stream: Operation not permitted
Unable to start capture: Operation not permitted
i: Can't enable video in first time
i: cleaning up resources allocated by input thread
ここで「gpu_mem = 128」を設定すると,起動が成る。
かくして,「gpu_mem = 128」の設定は必須である。
|