まずは、Raspberry Piで動画ストリームの取得。

用意するもの。

  • Raspberry Pi Zero HW
  • 専用カメラ

Raspberry PiのセットアップはNOOBSを使ってインストールします。
https://www.raspberrypi.org/downloads/noobs/
本家にセットアップの動画があります。
今回はRaspbianベースでインストールしています。

OSインストール後カメラを使用できるように設定します。

$ sudo raspi-config

次のように設定します。

再起動後、カメラの動作チェックをします。

$ vcgencmd version
vcgencmd get_cameraMar 27 2019 15:48:59
Copyright (c) 2012 Broadcom
version 2e98b31d18547962e564bdf88e57b3df7085c29b (clean) (release) (start_x)
$ vcgencmd get
supported=1 detected=1

detected=1になっているので認識はしているようです。
ためしに撮影。Raspistillコマンドで撮影できます。

$ raspistill -o sample.jpeg

動画ストリーム配信をするためにmjpg-stramerを使います。
https://sourceforge.net/projects/mjpg-streamer/
「Project abandoned!」の文字が。今はこちらのページらしい。
https://github.com/jacksonliam/mjpg-streamer/

$ sudo apt install build-essential libjpeg8-dev imagemagick libv4l-dev cmake -y
$ git clone https://github.com/jacksonliam/mjpg-streamer.git
$ cd mjpg-streamer/mjpg-streamer-experimental/
$ make
$ sudo make install

起動してみます。

$ mjpg_streamer -i "input_raspicam.so -x 640 -y 480 -fps 15 -q 80" -o "output_http.so -p 8080 -w /usr/local/share/mjpg-streamer/www"

http://server-address:8080/

を表示すると以下のデモ画面が表示されます。

ストリームも正常に表示されていることを確認します。
1秒ぐらいのタイムラグがあるようです。

最後に常駐で起動するように設定します。

$ sudo vi /etc/systemd/system/mjpg-streamer.service

以下の内容で編集します。

[Unit]
Description=MJPG-Streamer
After=udev.target
After=network-online.target
[Service]
type=simple
ExecStart=/usr/local/bin/mjpg_streamer -i 'input_raspicam.so -x 640 -y 480 -fps 15' -o 'output_http.so -w /usr/local/share/mjpg-streamer/www -p 8080'
[Install]
WantedBy=multi-user.target

システム起動と同時に起動するようにします。

$ sudo systemctl enable mjpg-streamer
Created symlink /etc/systemd/system/multi-user.target.wants/mjpg-streamer.service → /etc/systemd/system/mjpg-streamer.service.
$ sudo reboot

再起動後、ブラウザ(http://server-address:8080/)からデモ画面が表示されることを確認します。

前処理もやってしまおうということでpythonのセットアップ。
Pyenv+virtualenvで環境を作成します。

$ sudo apt install git build-essential libssl-dev libreadline-dev zlib1g-dev libbz2-dev libsqlite3-dev python-tk tk-dev
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
$ git clone https://github.com/yyuu/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv
$ cat << 'EOS' >> ~/.profile
$ export PYENV_ROOT=$HOME/.pyenv
$ export PATH=$PYENV_ROOT/bin:$PATH
$ eval "$(pyenv init -)"
$ eval "$(pyenv virtualenv-init -)"
EOS
$ pyenv install 3.7.3
$ time pyenv install 3.7.3
Downloading Python-3.7.3.tar.xz…
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3…
Installed Python-3.7.3 to /home/pi/.pyenv/versions/3.7.3

Pythonインストールに1時間以上の時間がかかりました。
もしやリソース不足。

$ vmstat 3
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 0 273168 18476 59440 0 0 0 0 5003 5198 2 38 60 0 0
1 0 0 273136 18476 59440 0 0 0 0 5406 5473 4 36 60 0 0
2 0 0 273120 18476 59440 0 0 0 0 5278 5267 0 39 61 0 0
3 0 0 273104 18476 59440 0 0 0 0 5277 5236 2 42 56 0 0
4 0 0 272980 18476 59440 0 0 0 0 5193 5283 7 43 49 0 0
2 0 0 272852 18476 59440 0 0 0 0 5325 5372 3 40 57 0 0

ストリーム配信時はCPU使用率が40~50%だと前処理は難しいということで、今回はおしまい。