Table of Contents

インターネットカメラで動体検知録画

やりたいこと

課題

試したこと

上記より、録画済みデータに対して処理を行うことは現実的ではないと判断した。

解決策

構成概要

設定

Ubuntu Server

Ubuntu Server に GUI環境を作る。

参考元How to Install and Configure VNC on Ubuntu 20.04 [Quickstart]

  1. XFCE4 導入
    $ sudo apt update
    $ sudo apt-get install xfce4 xfce4-goodies
  2. VNC 導入
    $ sudo apt-get install tightvncserver
  3. VNC 初期設定
    $ vncpasswd
    You will require a password to access your desktops.
    
    Password:
    Verify:
  4. $HOME/.vnc/xstartup 作成
    #!/bin/bash
    xrdb $HOME/.Xresources
    startxfce4 &
  5. 実行権付与
    chmod +x ~/.vnc/xstartup
  6. VNC をサービス登録する
    $ sudo vi /etc/systemd/system/vncserver@.service
    [Unit]
    Description=Start TightVNC server at startup
    After=syslog.target network.target
    
    [Service]
    Type=forking
    User=<ユーザ名>
    Group=<グループ名>
    WorkingDirectory=/home/<ユーザ名>
    
    PIDFile=/home/<ユーザ名>/.vnc/%H:%i.pid
    ExecStartPre=-/usr/bin/vncserver -kill :%i > /dev/null 2>&1
    ExecStart=/usr/bin/vncserver -depth 24 -geometry 1280x800 -localhost :%i
    ExecStop=/usr/bin/vncserver -kill :%i
    
    [Install]
    WantedBy=multi-user.target
  7. 追加した Unit を認識させる
    $ sudo systemctl daemon-reload
  8. 追加した Unit を有効化する
    $ sudo systemctl enable vncserver@1.service
  9. 一度リブートする
  10. 外部から ssh で接続する
    $ ssh -f -L 59000:localhost:5901 -C -N -l <ユーザID> -i <秘密鍵> <Ubuntu Server IP>
  11. vncviewer などで接続しデスクトップが表示されることを確認する
    vncviewer :59000

Chrome

Chrome を導入する。

  1. インストラーラ取得
    $ wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
  2. インストール
    $ sudo apt-get install ./google-chrome-stable_current_amd64.deb

ffmpeg

ffmpeg を導入する。

  1. ffmpeg インストール
    $ sudo apt-get install ffmpeg

Motion

Motion を導入する。

参考元Installing and Building from Source

  1. Motion インストール
    $ sudo apt-get install motion
  2. 関連ライブラリインストール
    $ sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev
    $ sudo apt-get install libjpeg-turbo8 libjpeg-turbo8-dev
  3. v4l2loopback インストール
    $ sudo apt-get install v4l2loopback-dkms
  4. OS起動時に v4l2loopback が組み込まれるよう設定する
    $ sudo vi /etc/modules-load.d/modules.conf
    v4l2loopback
    • OS再起動後、lsmod | grep v4l2 でロードされていることを確認する
    • /dev/video0 があることを確認する
  5. VNC で接続するユーザが /dev/video0 を使えるようにするため、ユーザを video グループに追加する。
    $ sudo usermod <ユーザ> -G video -a

motion.conf

  1. /etc/motion/motion.conf を ~/にコピーして編集する。
    ; log_file /var/log/motion/motion.log    # ログを取らない
    target_dir /home/<ユーザ>                 # 保存場所をユーザがアクセス権を持つ場所へ変更
    netcam_url v4l2:///dev/video0            # ffmpeg のキャプチャデータが /dev/video0 に出力されるので、それをカメラソースにする
    width 1280                               # VNC のサイズと同じにする
    height 800                               # VNC のサイズと同じにする
    framerate 15                             # ffmpeg のフレームレートと同じにする
    ;text_left CAMERA1                       # 録画映像に [CAMERA 1] などの説明をオーバレイしない
    ;text_right %Y-%m-%d\n%T-%q              # 録画映像に録画時刻をオーバーレイしない
    post_capture 45                          # 動きがなくなった後、何フレーム追加で録画するか
    threshold_tune on                        # 動体検知しきい値の自動調整
    movie_max_time 0                         # 動体検知後の録画打ち切り時間を 0 (打ち切らない)にする
    movie_codec mp4                          # 録画映像のフォーマットを mp4 にする
    movie_filename %Y%m%d%H%M%S              # 録画映像のファイル名を設定する

録画方法

  1. 外部から ssh で接続する
    (例)
    $ ssh -f -L 59000:localhost:5901 -C -N -l <ユーザID> -i <秘密鍵> <Ubuntu Server IP>
  2. vncviewer などで接続する
    (例)
    vncviewer :59000
  3. VNC 接続後、ターミナルなどを起動しデスクトップ画面の録画を開始する
    $ ffmpeg -f x11grab -draw_mouse 0 -video_size 1280x800 -framerate 15 -i :1.0 -f v4l2 /dev/video0
    • -f x11grab
      • デスクトップを録画channel 2: open failed: connect failed: Connection refused
    • -draw_mouse 0
      • XFce4 の場合、このオプションがないと真っ黒な画面しかキャプチャできない
    • -video_size
      • vncserver で設定した画面サイズと同じにする
    • -i :1.0
      • $DISPLAY でも可
    • -f v4l2 /dev/video0
      • 録画したデータを /dev/video0 に出力する
  4. Motion を起動する
    $ motoin -c motion.conf
  5. ブラウザを起動し、インターネットカメラのライブ画像をフルスクリーン表示する
  6. VNC接続とVNC用の ssh 接続は切断可能