mikolaboのブログ

パソコンからくり研究室

MotioneyeOSで動態検知された蓄積データをGoogleドライブに連携する

motioneyeOS の GitHub に motionの出力フォルダから Googleドライブにファイルをコピーする方法が紹介されていたのでやってみました。

まず、事前準備として、以下があげられていました。

  • WebインターフェースでmotionEyeOSの管理者パスワードを設定し、再起動したことを確認してください。
  • SSHを使用して、MacLinuxまたはWindows PCから管理者パスワードでrootとしてログインします。
  • 以下のコマンドを入力して実行

で、紹介内容に沿って、コマンドを入力していきます。

#ルートボリュームを読み書き可能としてマウントする
mount -o remount,rw /
#gdriveを実行する、/usr/binディレクトリに変更
cd /usr/bin
#事前にgdriveバイナリファイルをダウンロード
wget https://github.com/odeke-em/drive/releases/download/v0.2.2-arm-binary/drive-arm-binary

ここで、wget がインストールできなかったので、ブラウザからバイナリを保存し、WinSCP でバイナリを motoneyeOS に配置しました。
さらに、続きを実行していきます。

#実行可能にする
chmod +x drive-arm-binary
#バイナリ名をgdriveに変更
mv drive-arm-binary gdrive
#ルートボリュームを読み取り専用に戻します
mount -o remount,ro /
#「data」デレクトリにgdriveディレクトリを作成します
mkdir /data/gdrive
#そのディレクトリに移動します
cd /data/gdrive
#sync.shスクリプトの大幅に改善されたバージョンをダウンロード
wget https://gist.githubusercontent.com/Limeliz/4389cc40744331736c59/raw/bee4809bcf3a8eef01a9d8394d996eaf4d8ae1ec/sync.sh

ここでも、wget が使えないので、ブラウザで内容を表示して、vi でファイルを作って、保存しました。

vi sync.sh

#!/bin/bash
# sync.sh written by Claude Pageau for pi-timolo, his excellent video processing application.
# re-purposed and mangled by Malcolm Taylor for use with MotionPie
# edited by Emil Janesten to stop duplicate running instances and duplicate files and folders in Google Drive.

# folder where motion files are located
SYNC_DIR=output

# Get current folder where this script is located
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# Lockfile
LOCK=/var/tmp/gdrive_sync

# check if script is already running to avoid multiple instances
if [ -f $LOCK ]; then
  echo "--   Job is already running\! --"
  exit 6
fi
touch $LOCK

# Run gdrive for files in folder specified by variable $SYNC_DIR
echo "$(date)"
echo "---------------------- PROCESSING ---------------------------------"
echo "Starting gdrive Push From $DIR/$SYNC_DIR"
echo "                      To  google drive subfolder $SYNC_DIR"
echo "-------------------------------------------------------------------"     
cd $DIR
echo "Start synchronization ....."
echo "gdrive push -r -no-prompt -ignore-conflict -ignore-name-clashes $SYNC_DIR/*"
echo "Starting gdrive sync at $(date)" >> sync.log

gdrive push -r -no-prompt -ignore-conflict -ignore-name-clashes $SYNC_DIR/*

# Check if gdrive exited successfully
if [ $? -ne 0 ]
then
  echo "ERROR - gdrive Processing failed."
  echo "Possible Cause - No internet connection or some other reason."
fi
cd $DIR

echo "Done at $(date)."
rm $LOCK
exit

そして、スクリプトを実行可能にして、リンクします。

スクリプトを実行可能にする
chmod +x sync.sh
#モーション出力フォルダ 
ln -s /data/output output

SSHセッションに戻り、次のように入力して実行します。

gdrive init

GitHubの説明)
これにより長く複雑なURLが作成されますので、それをコピーしてPCのブラウザのアドレス行に貼り付けてからEnterキーを押してください。
グーグルドライブのファイルを管理する許可を与えます。
そしてそれからgdriveが待っているあなたのSSHセッションに戻ってコピーするためにコードが返されるでしょう。
成功しても何も返されません。

ここからブラウザ操作で、リンクするGoogleドライブにログインします。

先ほどの入力コマンドの後に、メッセージ出力されます。

[root@meye-3b33b4aa gdrive]# gdrive init
Visit this URL to get an authorization code
https://accounts.google.com/o/oauth2/auth?acce................rrlnuanmamgg1i4feed12dpuq871bvd.apps…...se_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fdrive
Paste the authorization code: 4/WQEac89V…………..AIjnUr_xxxx_vXFo
[root@meye-3b33b4aa gdrive]#

最後に、定期的にモーション出力フォルダからGoogleドライブにファイルをコピーするためのcronエントリを追加します。

# set the crontab editor to be nano (I'm much more comfortable with nano than vi) crontabエディタを設定
export EDITOR=nano   # viを使う場合は、「export EDITOR=vi」)
# enter crontab editor
crontab -e

貼り付けて、タスクを5分ごとに実行するように設定します。

*/5 * * * * /data/gdrive/sync.sh >> /data/log/gdrive_output.log 2>&1

これで、作業は完了です。すぐには反映されないのですが、やってみたときは結局、次の日にやっと確認できたような・・・

 

まとめ

 

Webカメラモニタシステムのmotion関係の話をしてきましたが、今回は、MotioneyeOSで動態検知した画像、映像をGoogleドライブに連携する話でした。

ここに来るまでに、次の段階がありました。

ラズパイをACCESSPOINTにする方法は2つあります。

 

mikolabo.hateblo.jp

 

mikolabo.hateblo.jp

 

 ラズパイでMotioneyeを動かします。

 

mikolabo.hateblo.jp

 

MotioneyeOSを、Webブラウザを使って管理する方法

 

mikolabo.hateblo.jp

 

 

motionプログラムの公式ウェブサイトにある参考情報

https://motion-project.github.io/motion_config.html#configfiles からの情報を抽出

 

 

画像処理(Image Processing)

【width】(タイプ:整数、範囲/有効値:デバイスに依存、デフォルト:640)【height】(タイプ:整数、範囲/有効値:デバイスに依存、デフォルト:480)

各フレームの幅(ピクセル単位)。有効範囲はカメラによって異なります。すべてのデバイスで、幅は8の倍数でなければなりません。
Motionはv4l2デバイスとhttp netcamsをスケーリングしないので、値はデバイスによって提供される画像の実際のサイズに設定されるべきです。
rtsp / rtmpネットワークカメラの場合、Motionはカメラ画像を要求された寸法に再調整します。
この再スケーリングは非常に高いCPUコストで行われるため、ネットワークカメラは設定ファイルに含まれているのと同じサイズで画像を送信することをお勧めします。
Motionは提供されたイメージを再スケーリングしませんが、video4linuxバイスから来るイメージのサイズをheight / widthに提供された値と一致するように設定しようとします。
特定の高さ/幅の組み合わせは特定のフレームレートでのみ有効であることを認識することが重要です。有効な特定の組み合わせはデバイスによって異なります。
pwcPhilips USBカメラ用のドライバ)のようないくつかのデバイスドライバでは、サイズを非標準の値に設定すると、ドライバは最も近い小さいサイズのイメージを作成し、
モーションのサイズに合うようにイメージの周囲にグレーの帯を作成します。灰色の帯を生成するのはデバイスドライバであり、モーションではないことに注意してください。
モーションは、グレーバンドを含む画像全体のモーションを検出しようとします。

【framerate】(タイプ:整数、範囲/有効値:2 - 100、デフォルト:15)

1秒間にカメラからキャプチャされる最大フレーム数。カメラからの写真の取得速度が速いほど、CPU負荷が高くなり、Motionが検出されたときに含まれる写真も多くなります。
フレームレートが2未満に設定されている場合、Motionは写真の保存を停止します。このパラメータを、画像またはムービーとして保存する1秒あたりの最大画像数に設定します。
1秒より長い間隔を設定するには、代わりに 'minimum_gap'オプションを使用してください。

【minimum_frame_time】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

カメラから写真フレームをキャプチャするまでの最小時間(秒)。デフォルト:0 =無効 - キャプチャレートはカメラのフレームレートによって決まります。
このオプションは、毎秒2未満のレートで画像をキャプチャする場合に使用されます。
これが有効になっている場合、フレームレートオプションはMotionサービスのペースをWebカメラのポートなどに設定するためにのみ使用されます。

【rotate】(タイプ:離散整数、範囲/有効な値:0、90、180、270、デフォルト:0(回転しない))

与えられた度数で画像を回転させます。回転は保存されているすべての画像と動画に影響します。
回転機能は、カメラが逆さまになっているとき(180度)、または通常の風景(90度または270度)ではなく、縦長の画像形式を選択した場合に使用されます。
この機能を使用すると、0以外の値でCPU負荷が増加することに注意してください。また、90度または270度回転すると、Motionは幅と高さを自動的に交換するため、これらのオプションに触れる必要はありません。

【flip_axis】(タイプ:離散文字列、範囲/有効な値:none、v、h、デフォルト:なし(変更なし))

指定された軸に従って画像を反転します。このフリップは、保存されているすべての画像とムービーに影響します。
フリップ機能は、カメラが鏡の方向を向いているとき、または鏡像を映し出すときに使用されます(一部の車で見られるように)。
この機能をnone以外の値で使用すると、CPUの負荷が増加することに注意してください。

【locate_motion_mode】(タイプ:離散文字列、範囲/有効値:on, off, preview、デフォルト:off)

移動オブジェクトの周囲にボックスを配置して描画します。値 'preview'を指定すると、Motionは保存されたプレビューjpeg画像上にのみボックスを描画し、保存されたムービー上には描画しません。

【locate_motion_style】(タイプ:離散文字列、範囲/有効な値:box、redbox、cross、redcross、デフォルト:box)

有効になっている場合は、検索ボックスの外観とスタイルを設定します。

【text_left】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

左下隅にそれぞれユーザー定義のテキストが重ねて表示されます。AZ、az、0-9、 "/()@〜#<> \、。: - + _ \ n、および変換指定子を使用
オプションが定義されていない場合、この位置にテキストは表示されません。変換指定子を、このフィールドを定義すると、このオプションは引用符で囲まれている場合も、\nおよびスペースなどの新しいライン指定子が含まれています。
スペースと改行 '\ n'を組み合わせることで、写真のどこにでもテキストを配置できます。
httpリモートコントロールを使用してテキストを設定するときは、テキストをURLエンコードする必要があります。ブラウザがこれを行います。
コマンドラインツールで設定する必要がある場合は、最初にブラウザを使用して、エンコードされたURLを自動的に作成するようにしてください。

【text_right】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%Y-%m-%d \\ n%T)

右下隅にユーザー定義のテキストがオーバーレイされています。AZ、az、0-9、 "/()@〜#<> \、。: - + _ \ n、および変換指定子を使用
オプションが定義されていない場合、この位置にテキストは表示されません。変換指定子を、このフィールドに定義すると、このオプションは引用符で囲まれている場合も、\ nおよびスペースなどの新しいライン指定子が含まれています。
スペースと改行 '\ n'を組み合わせることで、写真のどこにでもテキストを配置できます。
httpリモートコントロールを使用してテキストを設定するときは、テキストをURLエンコードする必要があります。ブラウザがこれを行います。
コマンドラインツールで設定する必要がある場合は、最初にブラウザを使用して、エンコードされたURLを自動的に作成するようにしてください。
それからスクリプトファイルやcronラインあるいはあなたが使いたいものにコピーペーストすることができます。
text_leftとの大きな違いは、このオプションが定義されていない場合、デフォルトは%Y-%m-%d \ n%Tで、日付はISO形式YYYY-MM-DDで表示され、24時間形式で表示されますHH:MM :SS
それからスクリプトファイルやcronラインあるいはあなたが使いたいものにコピーペーストすることができます。

【text_changes】(タイプ:ブール、範囲/有効値:on, off、デフォルト:off)

変更されたピクセルを示すテキストをオン/オフにします。このオプションを 'on'に設定すると、参照フレームと比較して変化したピクセル数が画像の右上隅に表示されます。
これは校正とテストに適しています。

 

f:id:mikolabo:20201011184140p:plain

オーバーレイテキストの配置方法

 


【text_scale】(タイプ:整数、範囲/有効値:1 - 10、デフォルト:1)

画像の上にテキストを描画する尺度。推奨範囲は1から10です。このオプションは、text_left、text_right、およびtext_changesによって定義されたテキストを通常のサイズのn倍で描画します。
これは、1280 x 720などの大きな画像フォーマットを使用するときに便利です。

【text_event】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%Y%m%d%H%M%S)

このオプションは、テキスト表示とファイル名の両方に使用できる変換指定子%Cを定義するという点で特別です。このオプションは、特殊イベント変換指定子%Cの値を定義します。
このオプションでは、%C以外の任意の変換指定子を使用できます。日付と時刻の値は、現在のイベントの最初の画像のタイムスタンプから取得されます。
各イベントの一意の識別子を作成するために、%Cをfilenamesとtext_left / rightに使用できるという考えです。
オプションtext_eventは、値%Cを定義します。これは、ファイル名およびtext_right / text_leftで使用できます。
text_event/%C は、新しいイベントで最初に検出された画像のタイムスタンプを使用します。
イベントが進行中でない(ギャップ期間が満了した)場合、%Cは空の文字列です。
Pre_captured画像とminimum_motion_frames画像にはイベントが発生する前にタイムスタンプが付けられているため、text_left / rightの%Cはこれらの画像には影響しません。


動き検出(Motion Detection)

【emulate_motion】(タイプ:Boolean、範囲/有効値:on off、デフォルト:off)

動きがなくても常に画像を保存する

【threshold:しきい値】(タイプ:整数、範囲/有効な値:1 - 2147483647、デフォルト:1500)

動きを宣言するためのしきい値しきい値は、ノイズフィルタ、マスキング、スペックル除去、およびラベル付けの後にカウントされた変化したピクセルの数です。
'threshold'オプションは最も重要な検出設定です。モーションが実行されると、現在の画像フレームと前の画像フレームを比較し、ノイズフィルタ、マスキング、スペックル除去、
およびラベル付けで画像を処理した後に変更されたピクセルの数をカウントします。
'threshold'で定義されているよりも多くのピクセルが変更された場合は、動きが検出されたと見なします。
検出したい動きが出るようにしきい値をできるだけ低く設定しますが、ノイズや動いている植物から検出されないように十分に大きく設定します。
フレームが大きいほど、ピクセル数が多くなります。そのため、大きな画像フレームサイズの場合は、より高いしきい値が必要です。
-s(セットアップモード)コマンドラインオプションまたはtext_changes設定ファイルオプション、あるいはその両方を使用して、正しいしきい値を見つけてください。
小さな動きが検出されない場合(キッチンの床にあるマウスを参照)、値を下げてください。動きがあまりにも多くの鳥または動いている木を検出するならば、数を増やします。
(もちろん、あなたがMotionを使ってバードウォッチングをする多くのユーザーのうちの一人でない限り!)
実用的な価値は数百から数千になるでしょう

【threshold_maximum】(タイプ:整数、範囲/有効値:0、1から無制限、デフォルト:0(オフ))

このパラメータは、モーションをトリガーする最大ピクセル数を指定します。変更されたピクセル数が最大値を超えると、イベントは発生しません。
その結果、ピクセル数の変化がしきい値を超えてthreshold_maximum未満の場合にのみMotionがイベントをトリガーします。ゼロの値はthreshold_maximumを無効にします。

【threshold_tune】(タイプ:Boolean、範囲/有効値:on off、デフォルト:off)

しきい値レベルの自動調整を有効にします。この機能により、Motionはモーションを宣言するためのしきい値を継続的に調整します。
この機能を有効にすると、しきい値設定は無視されます。それはあなたのカメラ、光の状態、屋内/屋外、検出される動きなどによって異なる結果を与えるかもしれません。
それがうまく働かないなら、代わりに 'threshold_tune'オプションを無効にして、thresholdの手動設定を使ってください。

【noise_level:騒音レベル】(タイプ:整数、範囲/有効値:1 - 255、デフォルト:32)

ノイズレベルは、ノイズと動きを区別するためのしきい値として使用されます。これはしきい値パラメーターとは異なります。これはピクセルレベルで変わります。
目的は、カメラ内の電気ノイズによって発生する変化を排除することです。特に完全な暗闇の中では、写真の中にランダムに現れる小さな灰色の点としてノイズを見ることができます。
このノイズは誤った動き検出を引き起こす可能性があります。このパラメータが意味することは、ピクセルの強度が、カウントされるノイズ閾値パラメータを超えて+/-以上変化しなければならないということです。

【noise_tune】(タイプ:noise_level、範囲/有効値:on off、デフォルト:on)

ノイズレベルの自動調整を有効にします。この機能により、Motionはノイズとモーションを区別するためにノイズしきい値を連続的に調整します。
この機能を有効にすると、 'noise_level'設定は無視されます。カメラや光の条件によっては、結果が異なる場合があります。

【despeckle_filter】(タイプ:文字列、範囲/有効値:E、e、D、d、およびlの組み合わせ、デフォルト:未定義)

(E / e)ロードまたは(D / d)イレートの組み合わせを使用したスペックル除去モーションイメージ。そして、オプションの(l)abellingで終わる。
動画のノイズを(除去または強調して)調整する方法。スペックル除去機能のオプションは、 'e'、 'E'、 'd'、または 'D'のいずれかです。
これは、ラベリング機能を有効にする末尾の 'l'(文字l)によって組み合わせることができます。
芝生や木々の周りに風が吹いている、または光の状況が悪いと、モーションイメージに多くの点(またはノイズ)が現れることがあります
(「モーションのチューニング」のセクションを参照)。この機能は、このノイズを除去(または強化)し、動きの信頼性を高めます。
'e'オプションはダイヤモンドを削除し、 'E'は正方形を削除し、交互のeEは円を削除します。e / Eを追加するたびに、ノイズはピクセル単位で小さくなります。
そのため、 'despeckle Ee'は半径2の円を削除します。ただし、これも検出を2だけ縮小し、しきい値に影響を与えます。
そのため、ノイズを除去してから検出された動きを元のサイズに戻すには、 'despeckle EedD'を試してください。
スペックル除去機能が完了したら、ラベリング機能で連結ピクセルの領域を検索し、各領域に「ラベルを付ける」ことができます。
プログラムは最大面積の変化したピクセル数に基づいて動きをトリガーします。言い換えれば、検出された動きをトリガするためには、最大のラベル付き領域は閾値を超えていなければならない。
値EedDlが良い出発点です。可能な組み合わせは無限であり、最良の組み合わせを見つけるには多くの実験が必要です。
ラベリング機能は、スペックル除去機能の後に実行した場合にのみ意図したとおりに機能することを忘れないでください。
すなわち 文字「l」は最後の文字でなければならず、ただ1つの「l」でなければなりません。
誤検出に関して問題がほとんどない場合は、このオプションを空白またはEedDのままにして、ほとんどの単一ピクセルノイズを除去します。
スペックル除去部分の非常に詳細な技術的説明は、この機能の作者のWebページにあります。Ian McConnellのWebcam:Motion Web Page

【area_detect】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

事前定義された領域(1から9)で動きを検出し、その領域で動きが検出されたら、スクリプトを実行します。動き検出はまだ続きます。
このオプションはon_area_detectスクリプトを実行するためだけのものです。
エリアは次のように番号付けされています
1 2 3
4 5 6
7 8 9

【mask_file】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

マスキングpgmファイルのフルパスとファイル名。必要に応じて、キャプチャされているフレームの幅と高さに合わせてマスクのサイズが変更されます。
動きを検出したくないカメラ画像の領域が1つ以上ある場合(たとえば、風の中で動く木や車/歩行者が通り過ぎるところの写真の角など)、マスクファイルが必要です。
このファイルは、お気に入りの写真編集プログラムで作成した写真です。検出したい領域は白でなければなりません。無視したい部分は黒くする必要があります。
pgm画像は、カメラで撮影した写真と同じサイズ(縦横のピクセル数)にする必要があります。そのため、マスクする正しい領域を定義できます。
グレートーンを使って感度を調整できます。あなたがマスクファイルを持っていないなら、設定ファイルにそれを持っていないか、それをコメントアウトすることによって、このオプションを無効にしてください。
あなたが使用している場合rotate またはflip_axisオプション。マスクは回転後に適用されます。

詳細な説明

マスクファイルは、pgm形式のイメージファイル(ポータブルグレーマップ)である必要があります。BINARY形式を選択する必要があります。
この機能を使用するには、カメラから取得したものとまったく同じサイズの画像を作成します。次に、検出したい領域を純粋に白にし、無視したい領域を黒にします。
動きに対する感度を低くしたい場所にグレーの領域を作成することもできます。通常あなたは純粋な白黒に固執するでしょう。
マスクファイルを生成する1つの方法は以下の通りである。
モーションキャプチャした写真を撮り、それをマスク用に白黒で編集してpgmファイルとしてエクスポートします。(gimpのようなプログラム)
あなたがこのフォーマットで保存することができないならば、グレイスケールjpgとして保存して、そしてあなたはそれをpgmフォーマットに変換することができます
djpeg -grayscale -pnm [inputfile] > mask.pgm (djpegがインストールされていると仮定します - jpeg libパッケージの一部です)。
マスクファイルオプションは、動きの検出をマスクします。全体の絵はまだ絵の上に表示されています。つまり、この機能を使用して、他人に見られたくない領域を隠すことはできません。
代わりにmask_privacyオプションを使用してください。
以下は、路上で車が検出されないようにするためのWebカメラの画像とマスクファイルの例です。

通常の写真 通りが生垣の向こう側に見えることに注意してください。

 f:id:mikolabo:20201011184144p:plain

 マスクファイル(Webブラウザで表示できるようにpng形式に変換)

 

f:id:mikolabo:20201011184148p:plain


【mask_privacy】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

プライバシーマスキングpgmファイルのフルパスとファイル名。このファイル は上記のmask_fileのように機能します。
このパラメータとの違いは、mask_fileが動きの検出からセクションを除外する一方で、このファイルは画像のセクションを完全に除外することです。
mask_privacyは検出前に適用されるため、除外領域では動きは検出されません。ただし、このパラメータはまだmask_fileと一緒に使用できます。
例えば、このファイルは隣のヤードを除外し、mask_fileはブローイングツリーを動き検出から除外することができます。
結果として得られる写真/映画は隣の庭の代わりに真っ黒に見えますが、木はまだ写真/映画の中にあります。

【smart_mask_speed】(タイプ:整数、範囲/有効値:0 - 10、デフォルト:0(無効))

スマートマスクのスピード デフォルトは0 =無効です。1は遅く、10は速いです。スマートマスクは、動的な自己学習型マスクです。
スマートマスクは頻繁に動く領域(風の中の木のような)で感度を無効にします。この領域で動かなくなってしばらくすると、感度が再びオンになります。
構築されたマスクは実際の動きよりも少し境界で大きくなります。このようにスマートマスクは、風の強い条件下で突然の動きが発生したときに、より信頼性が高くなります。
ここでFastとは、マスクが素早く構築されていることを意味しますが、動きがなくなって非常に長い時間がかかることもありません。
遅いということは、マスクが作成されるまでに時間がかかることを意味しますが、それでも長くなります。smart_mask_speedの適切な開始値は5です。この設定はフレームレートとは無関係です。
アタックとディケイの時間はすべての利用可能なフレームレートにわたって一定です。スマートマスクが有効になっていて、モーションもモーションイメージまたはモーションMPEGを書き込むように設定されている場合、
現在のスマートマスクはオーバーレイとして白黒のモーションピクチャ/ MPEGに赤色でコピーされます。Motionがsetup_modeで実行されている場合も、Webカメラのストリームに同じことが起こります。
そうすれば、smart_mask_speedを簡単に調整できます。
mask_fileのオプションは、特定の領域に感度をオフにするには、静的なマスクが用意されています。一日中通り過ぎる車などで通りを覆い隠すのに非常に便利です。
しかし、大きな茂みや大きな木があるシナリオで、すべての葉が風の中を動いているときに、スペックル除去がオンになっていても時々動きを引き起こすと想像してください。
もちろん、ここで静的マスクを定義することもできますが、春と夏の間に茂みが成長しているとしたらどうでしょうか。まあ、あなたは時々マスクを適応させる必要があります。
カメラの位置が少し動いたらどうしますか?誰かがあなたの庭で新しい植物を育てたらどうしますか?常に新しい静的マスクを設定する必要があります。
この問題に対する答えは、スマートマスク機能です。動的な自己学習型マスクです。
スマートマスクは、頻繁に動く領域(風の中の木のような)で感度を無効にします。この領域で動かなくなってしばらくすると、感度が再びオンになります。
構築されたマスクは実際の動きよりも境界で少し大きいです。このようにして、スマートマスクは、風の強い条件下で突然の動きが発生したときに、より確実に機能します。

【lightswitch_percent】(タイプ:整数、範囲/有効な値:0 - 100、デフォルト:0(無効))

強度を変化させた画像領域の割合として与えられる突然の大量の光強度変化を無視します。値は、ライトスイッチ状態をトリガーする画像領域をパーセントで定義します。
ライトスイッチが検出されると、設定されたフレーム数の間、モーション検出は無効になります。これは、光の状態が変化したときや、カメラが暗い場所で感度を変えたときの誤検出を防ぐためです。

【lightswitch_frames】(タイプ:整数、範囲/有効な値:1 - 1000、デフォルト:5)

ライトスイッチ状態がトリガーされたときに無視するフレーム数(上記参照)。

【minimum_motion_frames】(タイプ:整数、範囲/有効な値:1 - 1000、デフォルト:1)

画像フレームは、それらが真の動きとして検出される前に、少なくとも連続して指定された数のフレームの動きを含まなければならない。
デフォルトの1では、すべての動きが検出されます。有効範囲は1から数千ですが、1から5の間にすることをお勧めします。
ピクチャフレームはMotionによってバッファされ、モーションが検出されるとモーションを含む最初のフレームも保存されるため、何も見逃すことはありません。
この機能は、カメラが光の感度を変えたり、光が変わったりしたときに多くの誤検出がある場合に使用されます。
Motionは大きな値を受け入れますが、これを比較的低い数値(10未満)に設定する必要があります。
1より大きいステップごとに、Motionはピクチャフレームバッファ用にRAM内にスペースを確保します。

【event_gap】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:60)

イベントの終了をトリガーするモーション検出なしの秒数。イベントは、短い時間枠内に撮影された一連の動画として定義されます。
値-1は許可され、すべてのMotionが1つのムービーファイルに書き込まれ、pre_captureは書き込まれないようにするイベントを無効にします。
0に設定すると、モーションはギャップレスモードで実行されます。動きが検出されなくなりpost_captureが終了した直後にイベントが終了します。
イベントを無効にすると、noise_tuneとsmartmaskに悪影響があります。どちらの機能もイベントの外でのみ正しく機能します。
event_gapが-1に設定されていると、両方の機能が正しく機能しなくなります。イベントは、短い時間枠内に撮影された一連の動画として定義されます。
例えば 部屋を歩いている人は、10枚の単一のjpg画像が保存されている可能性があるイベントです。
このオプションは、検出されたモーション間の休止時間を新しいイベントとして定義する必要がある期間を定義します。
最後の動きが検出された後にタイマーがスタートし、post_capture画像が保存され、開いているムービーファイルに追加されました。
ギャップタイマーがタイムアウトする前に検出された任意の動きは、ギャップタイマーをリセットするので、再びカウントオーバーを開始します。
オプション 'event_gap'は重要です。これは、イベントが終了したと言うまでに、モーションが検出されない期間が検出される期間を定義します。
イベントは、短い時間枠内に撮影された一連の動画として定義されます。
例えば、部屋を歩いている人は、10枚の単一のjpg画像が保存されている可能性があるイベントです。検出された動きは、'post_capture'オプションで設定されたpost_capturedフレームを含みます。
'gap'オプションは、検出されたモーション間の休止時間を新しいイベントとして定義する必要がある期間を定義します。良い初期値は60秒です。
技術的な用語で「ギャップ」が機能する方法は次のとおりです。
・動きのある最後のビデオフレームが検出された後に 'event_gap'秒タイムアウトするタイマー
・post_captureがアクティブになった場合、その後、ギャップタイマーは、最後の画像の後にカウントを開始post_captureのバッファが保存されています。
・event_gapタイマーはリセットされ、新しいモーションが検出されるたびに開始されるので、短い 'gap'値を設定してもアクションを見逃すことはありません。
 それは単により多くのイベント(例えば、より多くのmpegsファイル)を作成するでしょう
event_gap値は、Motionの多くの機能に影響します。
・タイマーが切れると、次にモーションが検出されたときにイベント番号が1つ増えます。ファイル名またはテキスト機能で%v変換指定子を使用すると
 ファイル名またはテキストの数が1つ増えます。
・pre_captureの機能は、イベントの開始時に動作します。そのため、非常に大きな 'event_gap'値がある場合、pre_captureはあまり機能しません。
ffmpeg機能を使用してムービーを作成すると、最初のモーションが検出されたときにイベントの最初に新しいムービーファイルが開始されます。
 'event_gap'秒が動かずに(そしてpost_capturedフレームが保存されて)経過すると、ムービーファイルは完成し閉じられます。
・1つの大きなムービーファイルを生成するために大きなevent_gap値を使用しないでください。
 Motionがこのムービーファイルの動作を停止した場合、正しく完了して閉じられないため、表示することはできません。
・追跡機能の中には、イベントが終了したときにカメラを中心位置に戻すものがあります。
'event_gap'と 'minimum_gap'は互いに関係がないことに注意してください。

【pre_capture】(タイプ:整数、範囲/有効値:0 - 100秒、デフォルト:0(無効))

動き検出時に出力される、動きが検出される前の事前にキャプチャされた(バッファリングされた)ピクチャの数を指定します。推奨範囲は0から5です。
大きな値を使用することはお勧めできません。大きな値を設定すると、Motionはビデオフレームをスキップし、映画は滑らかではなくなります。
これは、最初の画像がMotionとして検出された直後に、MotionがJPEGの保存、ムービーのエンコード、データベースへの書き込み、外部プログラムの実行など、
バッファリングされたすべての画像を処理しているためです。
これが行われるまで、Motionは別の画像を取得しません。これは、高いフレームレートと組み合わせたpre_captureの適度な値でも、
おそらくMotionの多くのフレームを見逃す可能性があることを意味します。
滑らかなムービーを作成するには、代わりに大きい値のpost_captureを使用してください。
Motionは 'pre_capture'で定義されたピクチャフレーム数をバッファします。動きが検出されると、バッファ内のピクチャはムービーに含まれます。
その結果、イベントが発生することがプログラムによって事前にわかっていて、実際に発生する前に録音が開始されたように見えます。
これはイベントのより完全なビデオクリップを提供する素晴らしい機能です。
pre_captureが0に設定されている場合、この機能は無効になります。推奨値はビデオの約0.5秒ですので、値はフレームレートと希望するプリキャプチャ時間に合うように定義する必要があります。
理論的には、最大数百フレームの事前にキャプチャされたフレームを持つことができますが、当然のことながら、動きによってコンピュータのメモリに大きなフットプリントが残ります。
したがって、pre_captureには比較的小さい値を使用することをお勧めします。選択したフレームレートに応じて、また機能に応じて1〜5の値が有効です。
スムーズなムービーを得るためにpost_captureに大きな値を使用してください。これはパフォーマンスのヒットやRAMスペースを犠牲にしません。

【post_capture】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0(無効))

動きが検出された後にキャプチャされるフレーム数を指定します。これの主な目的は、動きが検出されるたびに滑らかなビデオクリップを作成することです。
個人的な好み(およびディスク容量)に使用してください。このオプションは、連続ムービーを作成するのに適した方法です。
Post_captureは余分なRAMを消費せず、大きな値があってもムービーに一時停止を作りません。
ムービーを保存するだけで、output_normalがオンになっていない場合、推奨されるpost_captureの値は1〜5秒に相当します
(このパラメータのフレームレートに必要な秒数を掛けることを忘れないでください)。


スクリプト実行

モーションは、モーション検知と関連イベントに基づいて外部コマンドを実行できます。それらは以下のセクションで説明されています。

セキュリティ警告!
これらの機能は、あなたが以下に注意を払う必要があることを意味します。
リモートコントロールポート(http)にアクセスできる人なら誰でも、Motionを実行しているユーザと同じ権限で自分のコンピュータ上で任意のコマンドを実行できます。
localhostへのアクセスが制限されていない場合、またはサーバーのファイアウォールを使用してアクセスが制限されていない場合は、誰でも制御ポートにアクセスできます。
リモートコントロールが有効になっているMotionを実行しているマシンとインターネットの間には常にルータがあり、モーションコントロールポートに外部からアクセスできないようにする必要があります。
制御ポートをlocalhostに制限した場合でも、あらゆる種類のGUIまたは端末セッションを使用してユーザーがサーバーにログインしていることに注意する必要があります。
必要なのは、Motionの設定を変更するためのブラウザまたは単一のコマンドラインの実行だけです。
Motionを無害なユーザーとして実行することをお勧めします。rootとしてではありません!

on_event_start】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

イベントの開始時に実行されるプログラム/スクリプトのフルパスとファイル名。ギャップによって定義された無動作期間後に検出された最初の動作でイベントが開始します。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/ user / bin / perl)も忘れないでください。

on_event_end】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

イベント終了時に実行されるプログラム/スクリプトのフルパスとファイル名。event_gapが期限切れになると、イベントは終了します。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。

on_picture_save】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

画像が保存されたときに実行されるプログラム/スクリプトのフルパスとファイル名。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。
ファイル名を(フルパスで)コマンドに渡すには%fを使用してください。

on_motion_detected】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

動きが検出されたときに実行されるプログラム/スクリプトのフルパスとファイル名。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。

on_area_detected】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

area_detectオプションで指定された定義済み領域で動きが検出されたときに実行されるプログラム/スクリプトのフルパスとファイル名。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。

on_movie_start】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

新しいムービーが作成されているときに実行されるプログラム/スクリプトのフルパスとファイル名。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。
ファイル名を(フルパスで)コマンドに渡すには%fを使用してください。

on_movie_end】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

新しいムービーが作成された後に実行されるプログラム/スクリプトのフルパスとファイル名。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。
ファイル名を(フルパスで)コマンドに渡すには%fを使用してください。

on_camera_lost】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

カメラを開けない場合、またはカメラを紛失した場合に実行するコマンドのフルパスとファイル名。
モーションが失われたカメラを検出しない場合があることに注意してください。それはカメラとドライバーに依存します、そして、このオプションは各々の構成のためにテストされることが勧められます。
カメラの接続が解除されてもPCがハングアップすることさえある状況もあり、その場合このスクリプトは実行されません。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。

on_camera_found】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

紛失したカメラが見つかったときに実行されるコマンドのフルパスとファイル名
モーションが紛失したカメラを検出できなかった場合は、カメラが見つから なかったことも認識しません。
変換指定子 とスペースをコマンドの一部として 使用できます。これは任意の種類のプログラムまたはスクリプトです。ACLの実行ビットを設定することを忘れないでください。
それがperlbashのようなスクリプトタイプのプログラムである場合は、スクリプトの最初の行としてshebang行(たとえば#!/user/bin/perl)も忘れないでください。


Output - Picture Options:出力 - 画像オプション

モーションはさまざまな種類の写真を出力できます。通常の写真は以下の通りです。

 f:id:mikolabo:20201011184152p:plain

 モーションタイプのピクチャ、またはデバッグピクチャとも呼ばれます。最大の領域は青色で、これだけがMotionとしてカウントされます。
モーション画像は、最後の画像フレームではなく過去の画像の数学的計算である「参照フレーム」をMotionがどのように維持するかを示しています。
これは実際の動きを拡大し、ゆっくりとこっそり入ることが容易でないことを保証します。

 f:id:mikolabo:20201011184136p:plain

  【picture_output】(タイプ:離散文字列、範囲/有効な値:on、off、first、best、デフォルト:off)

このオプションは通常の画像の出力を制御します。'on'が通常の選択です。'first'はMotionはイベントごとに最初に検出された画像のみを保存します。
「best」は、「first」と比較して、もう少し多くのCPUパワーとリソースを必要とします。「best」に設定すると、Motionはイベント中に最も変更されたピクセルで画像を保存します。
これは、映画をサーバーに保存し、その映画のコンテンツをWebページに表示するためのjpegを表示したい場合に便利です。
画像を出力しないためには 'off'とき、netcam_highresのオプションが一緒に選択された「movie_passthrough」出力画像は、通常の解像度ではない高解像度で提供されます。

【picture_output_motion】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

動いている物体のみで写真を出力します。この機能は、グレイトーン画像として変化するピクセルだけが見える特別なモーションタイプのムービーを生成します。
ラベリングが有効になっている場合は、最大の領域が青で表示されます。スマートマスクが指定されている場合は、赤で表示されます。
このオプションはチューニングやテストには適していますが、一般の人々にとってはあまり面白くないでしょう。
デフォルトではこれらの動画は保存されません。動画は、.jpgまたは.ppmの前にファイル名の末尾に「m」が追加されている点を除いて、
通常のモーショントリガー画像と同じ場所に同じファイル名で保存されます。例えば、名前は01-20020424232936-00m.jpgです。

【picture_type】(タイプ:離散文字列、範囲/有効な値:jpeg、webp、ppm、デフォルト:jpeg

出力する画像ファイルの種類を指定します。特に品質を損なうことなく高品質の写真を保存する必要がある場合を除いて、常にjpegを使用することをお勧めします。

【picture_quality】(タイプ:整数、範囲/有効値:1 - 100、デフォルト:75)

JPEGまたはWebPイメージの品質(パーセント)。100はほとんど圧縮されていないことを意味します。数値が小さいと、ファイルサイズがはるかに小さくなりますが、画質が低下します。

【picture_exif】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

JPEG EXIFコメントに含めるテキストを指定するには、このオプションを使用します。EXIFタイムスタンプは、このテキストとは無関係に含まれます。このオプションで は変換指定子を使用できます。

【picture_filename】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%v-%Y%m%d%H%M%S-%q)

このオプションは、ファイル名を指定し、オプションでtarget_dirに対するピクチャのパスを指定します。ファイル拡張子.jpg、webp、または.ppmが自動的に追加されます。このオプションで は変換指定子を使用できます。

【snapshot_interval】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0(無効))

このパラメータは、各スナップショット間の秒数を指定します

【snapshot_filename】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%v-%Y%m%d%H%M%S-snapshot)

このオプションは、ファイル名と、オプションでtarget_dirに対するスナップショットのパスを示します。ファイル拡張子.jpg、webp、または.ppmが自動的に追加されます。
snapshot_filenameが正確に 'lastsnap'でない限り、lastsnap.jpgというシンボリックリンクがtarget_dirに作成され、常に最新のスナップショットを指すようになります。
このオプションで は変換指定子を使用できます。


Output - Movie Options:出力 - ムービーオプション

【movie_output】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:on)

モーションのムービーをエンコードするには、ffmpegライブラリを使用します。このオプションは、各新しいイベントの始めに新しいムービーを生成し、同じイベント内で検出された各モーションのムービーに追加します。現在のイベントは、 'event_gap'オプションで定義された時間が動きを検出せずに経過したときに終了します。次の動きの検出時に、新しい映画が始められる。

【movie_output_motion】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

ffmpegライブラリを使用して、変化するピクセルだけが見えるモーションタイプのムービーをエンコードします。movie_outputのように機能しますが、代わりにモーションピクセルタイプのピクチャを出力します。この機能は、グレイトーン画像として変化するピクセルだけが見える特別なモーションタイプのムービーを生成します。ラベリングが有効になっている場合は、最大の領域が青で表示されます。スマートマスクは赤で表示されます。ファイル名は通常の映画と同じですが、ファイル名の後に 'm'が付きます。

【movie_max_time】(タイプ:整数、範囲/有効な値:0(無限大) - 214748364、デフォルト:120)

映画の最大長(秒)。長さを無制限にするには、これをゼロに設定します。

【movie_bps】(タイプ:整数、範囲/有効な値:0 - 9999999、デフォルト:400000)

ffmpegによって制作された映画のビットレートビットレートは1秒あたりのビット数です。カメラが固定ビットレート設定になっている場合、値が高いほど品質が高くなり、ファイルが大きくなります。希望の品質を得るための実験 品質が高いほど、ファイルは大きくなります。movie_qualityが0(無効)になっていない場合、このオプションは無視されます。

【movie_quality】(タイプ:整数、範囲/有効な値:0 - 100、デフォルト:60)

ffmpegエンコーダの可変ビットレートを有効にして定義します。可変ビットレートが有効な場合、movie_bpsのオプションは無視されます。
値が0の場合はこのオプションが無効になり、値1 - 100の場合はムービーの品質が変わります。1の値は最悪の品質を意味し、100は最高の品質です。
サイズと品質の間で望ましい妥協点が得られるような値を試してください。

【movie_codec】(タイプ:離散文字列、範囲/有効な値:mpeg4、msmpeg4、swf、flv、ffv1、mov、mp4、mkv、hevc、デフォルト:mkv

ビデオに使用されるコンテナ/コーデック。mpeg4またはmsmpeg4 - 拡張子が.aviのファイルを提供します。

swf - 拡張子が.swfのフラッシュフィルムを作成します。
flv - 拡張子が.flvのフラッシュビデオを提供します。
ffv1 - ロスレスエンコーディング用のFFビデオコーデック1
mov - QuickTime
mp4 - MPEG-4 Part 14 H264エンコーディング
mkv - H264エンコーディングMatroskaコンテナ
H.265 / HEVC(高効率ビデオコーディング)のhevc-MP4コンテナ

特定のコンテナは上記のデフォルトとは異なるコーデックを処理できることに注意してください。たとえば、mkvコンテナは事実上あらゆるコーデックを処理できます。
Motionはオプションでこのパラメータを使って追加の指定をすることができます。コンテナ(mkv)を指定してからセミコロンとffmpegコーデック名を追加することで、
Motionは指定されたコーデックをコンテナに使用しようとします。これは、オプションを次のように指定することによって、h265コーデックをmp4ではなくmkvコンテナに
エンコードするなどのオプションを許可します。mkv:libx265

【movie_duplicate_frames】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

指定した場合、CPUがムービーに要求されたフレームレートに追いつかない場合、フレームレートに追いつくためにフレームが複製されます。
結果のムービーは同じフレームを複数回送信するため、このオプションは慎重に使用してください。そのため、ムービーは「失速」してひどく見えることがあります。

【movie_passthrough】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

RTSP、RTMP、mjpeg、および一部のV412カメラを使用する場合は、カメラから直接取得したパケットを使用してモーションのムービーファイルを作成します。
mjpegカメラの場合、URLは次のようにmjpegではなくhttp接頭辞を使用して指定する必要があります。
v4l2カメラでmovie_passthroughを使用するには、netcam_urlパラメータとv4l2プレフィックスを使用して指定する必要があります 。
mjpeg(v4l2_paletteのオプション8)またはH264(v4l2_paletteのオプション21)を提供するWebカメラのみが movie_passthroughで動作します。
単一のnetcam_urlのみを使用する場合、このオプションは、結果のムービーファイルにイメージをエンコードするときに必要な処理を減らします。
動き検出を処理するために、画像の復号化は依然として画像上で行われる。
両方使用する場合netcam_urlとnetcam_highres ノーマル解像度ストリームが捕捉され、復号化されることで発生するものを、動きが検出された場合、
高解像度の画像が捕捉され、デコード/エンコード処理を介さずにムービーファイルに処理されます。
このオプションはCPU使用率を減らすはずですが、メモリ要件を増やします。
画像処理は行われないので、テキストオーバーレイ、プライバシーマスクなどは結果のビデオには表示されません。
結果のムービーの先頭には、パススルーオプションなしでムービーが作成された場合には存在しない、余分なフレームがいくつか含まれる可能性があります。
このオプションはCPUを減らすために高解像度画像のデコードをバイパスするので、画像がpicture_outputオプションで保存されるとき、提供される画像は通常の解像度のストリームからのものになります。

【movie_filename】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%v - %Y%m%d%H%M%S)

target_dirを基準としたモーショントリガムービーのファイルパス。選択したコーデックに基づいて、ファイル拡張子が自動的に名前に追加されます。
このオプションで は変換指定子を使用できます。

【movie_extpipe_use】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

このオプションは、ムービーへの外部エンコーディングのために出力をパイプに送るかどうかを指定します。
生のビデオを標準出力に渡すことには、内蔵のffmpegエンコーダを使用する場合と比べていくつかの利点があります。
まず、標準入力のRAWフレームをサポートしているエンコーダであればどれでも使用できるので、現在動きのある形式に限定されているわけではありません。
movie_extpipeの 例を参照してください。次に、マルチコアシステムでは外部エンコーダが個別のCPUコアを使用するため、
ムービーのエンコードはメインモーションスレッドから個別のコアにオフロードされ、パフォーマンスが大幅に向上します。
このオプションでは、ビデオループバックソフトウェアのインストールや設定は不要です。

【movie_extpipe】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

このオプションは、映画のイベント中に画像を受信して処理するプログラムのプログラム名とオプションを指定します。
このオプションでは、ビデオループバックソフトウェアのインストールや設定は不要です。
サンプル:
movie_extpipe mencoder -demuxer rawvideo -rawvideo w=%w:h=%h:i420 -ovc x264 -x264encopts bframes=4:frameref=1:subq=1:scenecut=-1:nob_adapt:threads=1:keyint=1000:8x8dct:vbv_bufsize=4000:crf=24:partitions=i8x8,i4x4:vbv_maxrate=800:no-chroma-me -vf denoise3d=16:12:48:4,pp=lb -of avi -o %f.avi - -fps %fps
movie_extpipe x264 - --input-res %wx%h --fps %fps --bitrate 2000 --preset ultrafast --quiet -o %f.mp4
movie_extpipe mencoder -demuxer rawvideo -rawvideo w=%w:h=%h:fps=%fps -ovc x264 -x264encopts preset=ultrafast -of lavf -o %f.mp4 - -fps %fps
movie_extpipe ffmpeg -y -f rawvideo -pix_fmt yuv420p -video_size %wx%h -framerate %fps -i pipe:0 -vcodec libx264 -preset ultrafast -f mp4 %f.mp4

【timelapse_interval】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0(無効))

このパラメータで設定された秒数の間隔で画像フレームを保存するタイムラプスビデオを作成します。

【timelapse_mode】(タイプ:離散文字列、範囲/有効な値:hourly, daily, weekly-sunday, weekly-monday, monthly, manual、デフォルト:daily)

タイムラプスビデオのファイルロールオーバーモード。 新しいタイムラプスファイルが新しいファイルであることを確認するために、
timelapse_filenameで変換指定子を使用することが重要です。ファイル名が変わらない場合は、Motionは単にタイムラプス写真を既存のファイルに追加します。
値 'Manual'は、Motionが自動的に新しいファイル名にロールオーバーしないことを意味します。
http制御インターフェースを使用して、timelapse_intervalオプションを0に設定してから、選択した値に戻すことで手動で行うことができ ます。
「hourly」という値は、正午にロールオーバーします。デフォルトの値 'daily'は真夜中にロールオーバーします。
あなたが週から来る場所に応じて日曜日か月曜日のどちらかで始まるかもしれないので、2つの週単位のオプションがあります。そして「毎月」は当然その月の1日にロールオーバーします。

【timelapse_fps】(タイプ:整数、範囲/有効値:0 - 100、デフォルト:30)

タイムラプスビデオの再生に使用する1秒あたりのフレームレート。

【timelapse_codec】(タイプ:離散文字列、範囲/有効な値:mpg、mpeg4、デフォルト:mpg)

タイムラプスビデオで使用されるコンテナ/コーデック。
mpg - mpgファイルをmpeg-2エンコーディングで作成します。Motionをシャットダウンして再起動すると、新しい写真が以前に作成されたファイルにタイムラプス用の名前で追加されます。
mpeg4 - デフォルトのエンコーディングでaviファイルを作成します。Motionをシャットダウンして再起動した場合、新しい写真はタイムラプス用に指定された名前の新しいファイルを作成します。
タイムラプスを記録するという性質は、典型的な映画のコンテナとコーデックが行うように設計されているものではないため、このオプションでは異なるコンテナは計画されていないことに注意してください。
別のコンテナ/コーデックを希望するユーザーは、ffmpegを直接使用して完成したタイムラプスビデオを再エンコードするか、
またはタイムラプスをjpg画像ファイルとして出力し、ffmpegを使用してそれらのjpgsをムービーにエンコードすることができます。

【timelapse_filename】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:%Y%m%d-timelapse)

target_dirを基準としたタイムラプスビデオのファイルパス。選択したコーデックに基づいて、ファイル拡張子が自動的に名前に追加されます。
このオプションで は変換指定子を使用できます。


Output - Pipe Options:出力 - パイプオプション

動きは2つのpipeの変化を提供する。最初のオプションは、通常のイメージを持つv4l2loopbackデバイスです。
このパイプオプションを使用すると、v4l2ループバックソフトウェアを使用して、v4l2デバイスからキャプチャされたビデオが新しいv4l2デバイスにパイプ接続されます。
この配管は、Motionが同じ機器を使用しているのと同時にユーザがビデオ機器を使用したい場合に必要です。
デフォルトでは、一度に1つのアプリケーションしかデバイスを開くことができません。
物理デバイスとは異なり、ビデオループバックデバイスは入力と出力の両方を取ります。
モジュールは単にその入力に来るものをすべて取り、それを出力に送ります。
ビデオループバックデバイスをインストールすると/dev/video1などの新しいデバイスが作成されますが、実際のWebカメラバイスは/dev/video0になります。
その後、motionに物理デバイス(/dev/video0)を開いてビデオ信号を/dev/video1に "パイプ"するように指示できます。
その後、VLCなどの外部ビデオプレーヤーを使って/dev/video1デバイスを開き、写真をライブで見ることができます。
VLCは実際のカメラを見ていると考えるために「だまされて」います。

インストール
ビデオループバックデバイスは多くのディストリビューションでaptを使ってインストールすることができます。
Motionでテストされたパッケージはv4l2loopback-dkmsです。パッケージがインストールされたら、実行するだけです。(sudo modprobe v4l2loopback)
これにより、ループバックに使用できる新しいビデオデバイスが追加されます。複数のデバイスを追加することを可能にするv4l2loopbackに関連する追加のオプションがあると考えられています。
詳細についてはv4l2loopbackプロジェクトのドキュメントを参照してください。
Motionでvloopbackデバイスをアクティブにするには、motion.confファイルの 'video_pipe'オプションをv4l2loopbackによって作成されたデバイスに関連付けられたデバイス名に設定します。
motion.confのオプション 'video_pipe_motion'を設定することで、変化したピクセルが見える特別な動画を見ることもできます。
video_pipeまたはvideo_pipe_motionオプションを設定するときは、入力デバイスを/ dev / video1のように指定します。
このコマンドで無効にする必要があります。
sudo modprobe -r v4l2loopback
pipeの2番目のオプションは、動画がループバックデバイスに送信されること以外は上記と同じです。

【video_pipe】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

通常の画像用のvideo4linuxビデオループバックデバイス。デバイスは/dev/video1のような形式で指定されます。

【video_pipe_motion】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

動画用video4linuxビデオループバックデバイス。デバイスは/ dev / video1のような形式で指定されます。


Webコントロール

Motionは実行中にいくつかのパラメータを制御するための限られたWebインタフェースを持っています。
デフォルトでは、Webインタフェースによるパラメータの変更はwebcontrol_parms設定オプションによって無効にされています。
これはセキュリティ目的のためです。webcontrol_parmsが有効になっている場合は、Motionの実行中に一部のMotion設定オプションを変更できます。
他の設定オプションを保存してMotionを再起動して有効にする必要があります。
webcontrol_portが8080の 場合は、Motionが動作しているのと同じマシンから次のファイルを開きます 。http://localhost:8080/
リモートマシンからWebコントロールにアクセスするには、最初にwebcontrol_localhostを設定してからリモートマシンoffのlocalhostのIPを使用して接続します(例 http://192.168.1.4:8080/
Motionの実行中にスクリプトまたはcronを使用してMotionの設定を自動的に変更する場合は、Webページを取得または送信できるプログラムを使用してください。
一般的なプログラムは wget、lwp-request およびcurlです。

動き検出を一時停止する例
lwp-request http://localhost:8080/0/detection/pause
動き検出を開始する例
lwp-request http://localhost:8080/0/detection/start

text_leftをcpu loadで更新するためのスクリプト例(わかりやすくするために冗長)
#!/bin/bash

LOAD=`top -b -n2 | grep "Cpu(s)" | awk '{print $2+$4}' | tail -n1`

TEXTLEFT=""
TEXTLEFT=$TEXTLEFT"System at %{host}"
TEXTLEFT=$TEXTLEFT"\nCPU $LOAD "
TEXTLEFT=$TEXTLEFT"\nfps: %{fps}"
TEXTLEFT=$TEXTLEFT"\nDate: %Y-%m-%d"
TEXTLEFT=$TEXTLEFT"\n%T-%q"

# Replace special chars with needed urlcodes
TEXTLEFT="${TEXTLEFT//%/%25}" #Replace % with %25
TEXTLEFT="${TEXTLEFT// /%20}" #Replace spaces with %20
TEXTLEFT="${TEXTLEFT//\{/%7B}" #Replace { with %7B
TEXTLEFT="${TEXTLEFT//\}/%7D}" #Replace } with %7D

curl http://localhost:8080/1/config/set?text_left=$TEXTLEFT

return 0

スクリプトを介して、またはhtml / css webcontrol_interfaceの外側で更新する場合は常に、文字をurlcode値に置き換える必要があることに注意してください。
あなた自身のソフトウェア(例えばあなた自身のPHPフロントエンド)から制御するためにmotion.confオプションwebcontrol_interfaceを1(text)に設定することができます。
これはMotionがウェブブラウザレスポンス内のhtmlタグを削除するようにします。
以下の定義は、Motionの制御に利用できるコマンドを要約するときに使用されます。

{IP} Motionを実行しているコンピュータのIPアドレス
{port} Webコントロールに指定されたポート
{camid}カメラのcamera_id。
{parm} 要求されたMotion構成パラメーター。
{value1} 要求されたMotion構成パラメータの最初の値。
{value2} 要求されたMotion構成パラメータの2番目の値。

以下は利用可能なコマンドです。

{IP}:{port}/{camid}/config/list    カメラのすべての設定値を一覧表示します。
{IP}:{port}/{camid}/config/set?{parm}={value1} 要求されたパラメータに値を設定します
{IP}:{port}/{camid}/config/get?query={parm}  現在パラメータに設定されている値を返します。
{IP}:{port}/{camid}/config/write    現在のパラメータをファイルに書き込みます。
{IP}:{port}/{camid}/detection/status カメラの現在のステータスを返します。
{IP}:{port}/{camid}/detection/connection カメラの接続状態を返します。
{IP}:{port}/{camid}/detection/start  モーション検知を開始または再開します。
{IP}:{port}/{camid}/detection/pause  モーション検知を一時停止します。
{IP}:{port}/{camid}/action/eventstart 新しいイベントを起動します。
{IP}:{port}/{camid}/action/eventend  イベントの終了をトリガーします。
{IP}:{port}/{camid}/action/snapshot  スナップショットを作成する
{IP}:{port}/{camid}/action/restart   Motionをシャットダウンして再起動します
{IP}:{port}/{camid}/action/quit    カメラへの接続をすべて閉じる
{IP}:{port}/{camid}/action/end Motion アプリケーションを完全にシャットダウンする
{IP}:{port}/{camid}/track/center    中央PTZカメラにコマンドを送信する
{IP}:{port}/{camid}/track/set?x={value1}&y={value2}  PTZカメラにコマンドを送信して、xとyで指定された場所に移動します
{IP}:{port}/{camid}/track/set?pan={value1}&tilt={value2}  PTZカメラにコマンドを送り、値1にパンし、値2にチルトします

一般的な規則として、{camid}がメインのmotion.confファイルでcamera_idを参照する場合、上記で参照されているwebcontrolアクションはMotionに接続されているすべてのカメラに適用されます。
このcamera_idは通常0(ゼロ)として指定されます。そのため、のコマンドを発行すると、{IP}:{port}/0/detection/pauseすべてのカメラが一時停止します。
違いに対する明確化の点pause、quit及びend。アクションpauseが実行されると、Motionはモーション検出処理を停止し、もちろんすべてのイベントを停止しますが、カメラからの画像の処理とデコードを継続します。
ユーザが実行するとき、これは高速遷移を可能にする作用が逆に動き検出を停止させるだけでなく、画像のカメラ及び復号から切断するだけでなく、
aの後に動き検出を開始するには、ユーザーはstartquitquitrestartカメラへの接続が再初期化されます。
また、カメラは完全に切断されているので、Motionが完全に起動してカメラを処理または表示できるようにするまでに数秒以上かかることがあります。
最後に、のオプションがありますend。このオプションはMotionアプリケーションを完全に終了させます。
すべてのカメラへの接続をすべて閉じてアプリケーションを終了します。Motionをデーモンモードで実行している場合、これが必要になることがあります。
endリクエストを処理した後にwebcontrolインターフェースからMotionアプリケーションを再起動する方法はありません。
上記の項目がHTML / CSSインターフェースを介して利用可能な場合は、ログでMotionに送信された正確なURLを見ることも可能です。
ログレベルを8(デバッグ)に変更してから、Motion Webコントロールインターフェイスを開き、問題のアクションを実行します。
ログでは、Motionは、アクションを実行したMotionに送信された正確なURLを報告します。
アラート!セキュリティ警告!この機能はまたあなたが以下に注意を払う必要があることを意味します。
リモートコントロールポート(http)にアクセスできる人はだれでも、オプションの値を変更したり、Motionを実行しているユーザーと同じ権限でサーバー上の任意の場所にファイルを保存したりできます。
Motionを実行しているユーザーと同じ権限で、コンピューター上で任意のコマンドを実行できます。
localhostへのアクセスが制限されていない場合、またはサーバーのファイアウォールを使用してアクセスが制限されていない場合は、誰でも制御ポートにアクセスできます。
リモートコントロールが有効になっているMotionを実行しているマシンとインターネットの間には常にルータがあり、モーションコントロールポートに外部からアクセスできないようにする必要があります。
また、webcontrol_parmsを可能な限り低いレベルに調整してください 。
制御ポートをlocalhostに制限した場合でも、あらゆる種類の端末セッションでサーバーにログインしているすべてのユーザーの面倒を見る必要があります。
無害なユーザーとしてMotionを実行します。rootとして走らないでください!

【webcontrol_port】(タイプ:整数、範囲/有効な値:0 - 65535、デフォルト:0(無効))

Motionパラメータをhttpベースで制御するためのポート番号を設定します。
このオプションは、カメラの設定ファイルではなくmotion.confファイルに配置する必要があります。
1024未満のポート番号では通常、root権限が必要です。ポート8080はこの目的のためのポートの典型的な選択です。

【webcontrol_ipv6】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

IPv6IPV4からの接続を待ちます。

【webcontrol_localhost】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:on)

このオプションはモーションパラメータの制御をローカルホストに制限します。このオプションは、カメラの設定ファイルではなくmotion.confに配置する必要があります。
これをonに設定すると、http(ブラウザ)を使用するコントロールは、Motionが実行されているのと同じマシン上でのみアクセスできます。

【webcontrol_parms】(タイプ:整数、範囲/有効値:0 - 3、デフォルト:0)

Webコントロールページに表示され、変更可能なパラメータの種類を設定します。
0:なし - 設定パラメータはありません。
1:限定 - 限定されたパラメータのリストが利用可能になります。
2:詳細設定 - 詳細なパラメータ一覧が表示されます。これらは通常Motionを有効にするために再起動する必要があります。
3:制限付き - ユーザーID、パスワード、および "on_"コマンド。
Webインターフェースのセキュリティーを強化するために、このパラメーターのデフォルトは0(なし)です。
webcontrol_parmsの設定はWebインタフェースに含まれていないため、このパラメータは設定ファイルで指定する必要があります。
EXTREMEレベル制限されたレベルを使用している場合、WebBrowserコントロールが侵害された場合、それはコンピュータを危険にさらす可能性があるため、注意が必要があります。
カメラを最初に設定するときには、このオプションをゼロ以外の値にのみ設定することを強くお勧めします。Motionが設定されたら、この値をゼロに設定して設定を完了することをお勧めします。

【webcontrol_interface】(タイプ:整数、範囲/有効値:0 - 2、デフォルト:0)

提供するWebコントロールインターフェイスの種類。
値0は、html / cssを使用した従来のWebページインタフェースを提供します。
値1は、プログラムによるアクセスに適したテキストのみのインターフェースを提供します。
値2は、従来のWeb制御インターフェースを提供します。
このオプションは、カメラの設定ファイルではなくmotion.confに配置する必要があります。ほとんどの場合の推奨値は「0」です。
これは、通常のブラウザでMotionをナビゲートおよび制御できるページを提供します。

【webcontrol_auth_method】(タイプ:整数、範囲/有効な値:0、1、2、デフォルト:0)

Webコントロールポートに使用する認証方法
0 =無効
1 =基本認証
2 =ダイジェスト認証

【webcontrol_authentication】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

このパラメータは、ストリームに使用するユーザー名とパスワードを設定します。構文はusername:passwordです。

【webcontrol_tls】(タイプ:(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

このオプションは、Webコントロールポートに対してSSL / TLSを有効にするかどうかを指定します。
一部のディストリビューションでは、Motionが使用するライブラリはSSL / TLSサポートでコンパイルされていない可能性があります。
この場合、MotionはSSL/TLS接続をサポートできません。SSL / TLSをサポートできるかどうかはログに記録されます。
このオプションを選択することに加えて、webcontrol_certおよび webcontrol_keyファイルも指定する必要があります。

【webcontrol_cert】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

SSL/TLSサポート用の証明書ファイルへのフルパス。webcontrol_tlsが有効な場合にのみ使用されます。

【webcontrol_key】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

SSL/TLSサポート用のキーファイルへのフルパス。webcontrol_tlsが有効な場合にのみ使用されます。

【webcontrol_cors_header】(タイプ:文字列、範囲/有効な値:*または有効なURI、デフォルト:未定義)

Webコントロールと共に送信されるAccess-Control-Allow-Originヘッダー値。指定しない場合、Access-Control-Allow-Originヘッダーは送信されません。
このヘッダーにより、ブラウザはクロスオリジンリソース共有(CORS)を介してWebコントロールにアクセスできます。
たとえば、*を指定すると、どのオリジンから提供されたブラウザクライアントコードからもアクセスできます。


ライブストリーム

Motionは、カメラから画像をストリーミングすることを可能にする単純なウェブカメラサーバーを内蔵しています。
ストリームは、ほとんどのブラウザで表示できる「multipart jpeg」形式(mjpeg)で生成されます。
ブラウザがストリームを直接開かない場合は、ストリームを参照する単純なHTMLページを手動で作成することが可能です。
mplayer、ffplay、avplayなどの一部の通常のストリームプレーヤーは、ネットワークストリームを次のように指定してストリームを開くこともできます。 http://localhost:mystreamportnumber/
通常、ストリームプレーヤーは少ししてから開きますが、次のような形式も提供すると便利です。 ffplay -f mjpeg http://localhost:mystreamportnumber/
VLCがストリームを開かないことが著者によって観察されました。これはMotionの制限ではなく、MJPG httpストリームに対する一般的なVLCサポートに関連しています。
上記の例では、Motion http://localhost:mystreamportnumber/ がストリームと画像にアクセスするための他のオプションを提供するので、Motionストリームにアクセスできることを示しています。
サブストリーム、動画ストリーム、および静止画像に加えて、Motionは、すべてのカメラへのストリームにアクセスするための単一のポートのみを使用するように設定することもできます。
これは、motion.confファイル内でストリームポートを指定し、別々のカメラファイルを使用することによっても実現できます。次の例では、ストリームにアクセスできる方法を明確にします。

{IP} Motionを実行しているコンピュータのIPアドレス
{port0} motion.confファイル内のストリームに指定されたポート。
{portX} camera.confファイル内のストリームに指定されたポート。
{camid}カメラのcamera_id。
{IP}:{port0}/{camid}/ カメラのプライマリストリーム
{IP}:{port0}/{camid}/stream カメラのプライマリストリーム
{IP}:{port0}/{camid}/substream カメラのサブストリーム
{IP}:{port0}/{camid}/motion カメラ用の動画ストリーム
{IP}:{port0}/{camid}/source カメラからのソース画像
{IP}:{port0}/{camid}/current カメラの静的JPG
{IP}:{portX}/ ポート{portX}で動作しているカメラのプライマリストリーム
{IP}:{portX}/stream ポート{portX}で動作しているカメラのプライマリストリーム
{IP}:{portX}/substream ポート{portX}で動作しているカメラのサブストリーム
{IP}:{portX}/motion ポート{portX}で動作しているカメラの動画ストリーム
{IP}:{portX}/source ポート{portX}で動作しているカメラからのソース画像
{IP}:{portX}/current ポート{portX}で動作しているカメラの静的JPG

【stream_port】(タイプ:整数、範囲/有効な値:0 - 65535、デフォルト:0(無効))

Motionがメインストリームを送信するTCPポート。ストリームポートはwebcontrol_portと異なる必要があります。
ポートが(camerax.confファイルで指定されているのではなく)motion.confファイル内で指定されている場合、Motionは別のURLを指定してその単一ポート上のすべてのストリームを提供します。
ポートの指定方法の詳細と例については、上記のストリームのセクションを参照してください。各カメラに固有のポートを設定する場合、適切な値は、カメラ1が8081、カメラ2が8082、カメラ3が8083などです。

【stream_localhost】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:on)

ローカルホストへのストリームへのアクセスを制限します。これをonに設定すると、Motionはモーションが実行されているのと同じマシン上でのみアクセスできます。

【stream_auth_method】(タイプ:整数、範囲/有効な値:0、1、2、デフォルト:0)

このパラメータは、ストリームポートに必要な認証方法を確立します。パラメーターは以下の意味を持ちます。
0 =無効
1 =基本認証
2 = MD5ダイジェスト(より安全な認証)
MotionのWebコントロール機能を有効にしている場合は、セキュリティ認証を有効にする必要があります。
いいえ、真剣に。あなたは本当にすべきです。このドキュメントに記載されているセキュリティ警告を参照してください。

【stream_authentication】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

このパラメータは、ストリームに使用するユーザー名とパスワードを設定します。構文はusername:passwordです。

【stream_tls】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

このオプションは、ストリームポートに対してSSL / TLSを有効にするかどうかを指定します。
一部のディストリビューションでは、Motionが使用するライブラリはSSL / TLSサポートでコンパイルされていない可能性があります。
この場合、MotionはSSL / TLS接続をサポートできません。SSL / TLSをサポートできるかどうかはログに記録されます。
このオプションを選択することに加えて、webcontrol_certおよび webcontrol_keyファイルも指定する必要があります。

【stream_cors_header】(タイプ:文字列、範囲/有効な値:*または有効なURI、デフォルト:未定義)

ストリームとともに送信されるAccess-Control-Allow-Originヘッダー値。指定しない場合、Access-Control-Allow-Originヘッダーは送信されません。
このヘッダーにより、ブラウザはクロスオリジンリソース共有(CORS)を介してストリームにアクセスできます。
たとえば、*を指定すると、どのオリジンから提供されたブラウザクライアントコードからもアクセスできます。

【stream_preview_scale】(タイプ:整数、範囲/有効値:1~100秒、デフォルト:25)

WebコントロールページでHTMLが有効になっている場合、MotionはホームWebコントロールページのすべてのストリームをHTML形式で表示するので、すべての画像を標準のブラウザで表示できます。
このパラメータは、ストリーム画像がページ上に配置されたときに、そのストリーム画像を拡大/縮小するパーセンテージを示します。
これはブラウザ側で拡大縮小され、Motionはフルフレームを送信し続けます。
100を超える数が許可されています。

【stream_preview_newline】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

WebコントロールページでHTMLが有効になっている場合、MotionはホームWebコントロールページ上のストリームのすべての画像をHTML形式で表示するので、すべての画像を標準のブラウザで表示できます。
このパラメータは、画像をWebコントロールWebページの新しい行に配置するかどうかを決定します。
プレビュー画像は、カメラID番号順にWebControlホームページに表示されます。このパラメータにより、ユーザーはページ上の画像を柔軟に整理できます。
このパラメータをoffに設定すると、小さい番号のスレッド番号の画像の右側に画像が設定されます。'on'に設定すると、画像は次の行の先頭(下)に配置されます。
より洗練されカスタマイズされたプレビューページが必要なユーザーは、URLストリームを参照する独自のローカルHTMLページを作成することをお勧めします。

【stream_preview_method】(タイプ:整数、範囲/有効値:0 - 4、デフォルト:0)

このオプションは、Webコントロールページに画像を表示するための方法を決定します。
0 =フルストリームの画像が送信され、クライアントからWebコントロールページに拡大縮小されます。
1 =サブストリーム画像はMotionによって送信されます。これは帯域幅を節約します
2 =静止画像はMotionによって送信され、ページは手動で更新する必要があります
3 =フルストリームの画像と動画を並べて検出設定を補助
4 =プライバシーまたは他のモーションオーバーレイなしでカメラによって提供されたソース画像

【stream_quality】(タイプ:整数、範囲/有効値:1 - 100、デフォルト:50)

ライブストリーム接続を介して転送されるJPEG画像フレームの品質設定(パーセント)。低い値に設定すると、画像のストリーミングに必要な帯域幅が減少します。

【stream_grey】Boolean、範囲/有効値:on, off、デフォルト:off)

ライブストリームをカラーではなくグレー(白黒)で送信します。帯域幅を制限するのに役立ちます。

【stream_maxrate】(タイプ:整数、範囲/有効値:1 - 100、デフォルト:1)

ストリームのフレームレートを1秒あたりのフレーム数で制限します。実質的に無制限の場合は、値を100に設定してください。
ローカルホストまたは内部LANでのみ使用しない限り、このパラメータを高く設定し過ぎないでください。

【stream_motion】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

動きが検出されない場合は1秒あたり1フレームにフレームレートを制限し、動きがある場合はそれをstream_maxrateに増やします。


Tracking:追跡

モーションは、カメラをパン(左右)度およびチルト(上下)度で指定された固定位置に移動させることができます。
移動は絶対座標または現在位置を基準にして設定できます。Logicool Quickcam Sphere / Orbitの自動追跡機能もありますが、それほど成熟していません。
これらの機能が必要な場合は、トラッキングに関するMotionコードを見直して修正してください。
Motionの開発者は追跡カメラを持っていないので、追跡機能が何らかの方法で開発されることはまずありません。(テストする方法はありません。)

【track_type】(タイプ:離散文字列、範囲/有効値:0(なし)、1(ステッパー)、2(iomojo)、3(pwc)、4(汎用)、5(uvcvideo)、デフォルト:0(なし))

トラッカーの種類
Motionには、シリアルステッピングモータコントローラ、iomojoスマイルカム、またはLogicool Quickcam SphereやOrbitなどのPhilips WebCamドライバ互換のパン/チルトカメラの
いずれかを使用する特別なトラッキングオプションがあります。
追跡を無効にするには、これを0に設定します。他の追跡オプションは無視されます。

値1は、ステッピングモーターと自家製コントローラーを使用した特別なモーショントラッキングプロジェクトです。
値2はiomojo smilecamのためのものです
値3は、pwcPhilips WebCam)ドライバによって駆動されるLogitech Quickcam Sphere / OrbitなどのpwcタイプのUSBトラッキングカメラ用です。このカメラを使用するには、pwcのバージョンが少なくとも8.12でなければなりません。
値4は一般的なトラックタイプです。このオプションはtrack_generic_moveスクリプトを実行し ます。ユーザーは、スクリプトに渡された変換指定子および/またはMotionによって設定された環境変数に基づいて、カメラを移動するための独自のスクリプトを書くことができます。
値5は、uvcvideoドライバによって駆動されるLogitech Quickcam Sphere / Orbit MPなどのuvcvideoタイプのUSBトラッキングカメラ用です。

【track_auto】(タイプ:Boolean、範囲/有効値:on, off、デフォルト:off)

モーションの自動追跡を有効にします。上記のtrack_typeで指定されているトラッキングカメラまたはカスタムスクリプトが必要 です。

【track_port】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

これは、ステッピングモーターインターフェイスが接続されているシリアルポートのデバイス名です。ステッピングモーターのトラッキングにのみ使用されます。

【track_motorx】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

X軸を制御するために使用されるモーター番号。ステッピングモーターのトラッキングにのみ使用されます。

【track_motorx_reverse】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

Description

【track_motory】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

y軸を制御するために使用されるモーター番号。ステッピングモーターのトラッキングにのみ使用されます。

【track_motory_reverse】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

【track_maxx】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

サーボxの最大位置。ステッピングモーターのトラッキングにのみ使用されます。

【track_minx】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

【track_maxy】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

サーボyの最大位置。ステッピングモーターのトラッキングにのみ使用されます。

【track_miny】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

【track_homex】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

【track_homey】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

【track_iomojo_id】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

一般的なステッピングモーターコントローラの代わりにiomojo smilecamをシリアルポートに接続している場合は、このオプションを使用してください。iomojoカメラ専用です。

【track_step_angle_x】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

自動追跡を使用して、カメラがX軸上で1ステップあたりに移動する角度(度)。現在は、pwcタイプのカメラでのみ使用されています。トラッキングカメラタイプpwcが必要です。

【track_step_angle_y】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

自動トラッキングを使用して、カメラがY軸上をステップごとに移動する角度(度)。現在は、pwcタイプのカメラでのみ使用されています。トラッキングカメラタイプpwcが必要です。

【track_move_wait】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

自動追跡によってカメラが移動した後、追跡が無効になるまでの遅延。遅延はピクチャフレーム数として定義されます。実際の遅延は選択したフレームレートによって異なります。
カメラを2秒に1回最大移動させ、フレームレートを10にする場合は、track_move_wait値を2 * 10 = 20に設定する必要があります。

【track_speed】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

モーターを設定する速度。ステッピングモーターのトラッキングにのみ使用されます。

【track_stepsize】(タイプ:整数、範囲/有効な値:0 - 2147483647、デフォルト:0)

実行するステップ数 ステッピングモーターのトラッキングにのみ使用されます。

【track_generic_move】(タイプ:文字列、範囲/有効な値:最大4095文字、デフォルト:未定義)

PTZカメラを一般追跡モードで移動するために実行するコマンドのフルパスとファイル名
ユーザーは変換指定子 を使用して、スクリプトへのコマンドラインオプションの一部としてパラメータを含めること、および/または以下に示すようにシステム環境変数から値を取得することを選択できます。
以下は、環境変数として提供されているパラメータです。

カメラを再センタリングするために呼び出された場合:TRACK_ACTION = center TRACK_XOFF TRACK_YOFF
モーションを追跡するために呼び出された場合:
TRACK_ACTION =move TRACK_CENT_X TRACK_CENT_Y TRACK_CENT_WIDTH TRACK_CENT_HEIGHT TRACK_CENT_MINX TRACK_CENT_MAXX TRACK_CENT_MINY TRACK_CENT_MAXY TRACK_IMGS_WIDTH TRACK_IMGS_HEIGHT TRACK_IMGS_MOTIONSIZE

以下は、システム環境変数に基づいてPTZネットカメラを移動するサンプルスクリプトです。3/8と5/8は単なる例示であり、VIVOTEK PZ81X1カメラでのテストに基づいて設定されています。他のカメラに適用可能な値と方法は、ユーザーが設定する必要があります。

#!/bin/bash

LOCKFILE=/tmp/track_generic_move_netcam.lock
if [ -e "$LOCKFILE" ]; then # Trick to avoid flooding
exit 0 # the netcam of multiple
fi # moving commands.

function movecam() {
touch $LOCKFILE
curl "http://youripaddress/cgi-bin/camctrl/camctrl.cgi?move=$1"
LOCKED=true
}

case "$TRACK_ACTION" in
center)
movecam home
;;
move)
if [ "$TRACK_CENT_X" -lt "$*1" ]; then
movecam left
fi
if [ "$TRACK_CENT_X" -gt "$*2" ]; then
movecam right
fi
if [ "$TRACK_CENT_Y" -lt "$*3" ]; then
movecam up
fi
if [ "$TRACK_CENT_Y" -gt "$*4" ]; then
movecam down
fi
;;
esac

if [ "$LOCKED" = "true" ]; then
sleep 2
rm -f "$LOCKFILE"
fi

*1:TRACK_IMGS_WIDTH*3/8

*2:TRACK_IMGS_WIDTH*5/8

*3:TRACK_IMGS_HEIGHT*3/8

*4:TRACK_IMGS_HEIGHT*5/8

テレワークシステムの構築作業イメージ

AmazonWebServices上に、SoftEtherVPNサーバを稼働させ、各拠点にSoftEtherクライアントまたはSoftEtherブリッジを置いて、さらにWifi接続した拠点LAN内端末をラズパイACCESSPOINT経由で接続することで、テレワークシステム、Webカメラ監視システムを構築する作業の説明です。 以下のような構築イメージです。

f:id:mikolabo:20200927105138p:plain

テレワークシステム構成イメージ

クラウド上の SoftEtherVPNサーバ には仮想Hubがあり、各拠点ごとにネットワークがわけられています。

これによって、セキュリティ境界の設定ができる上に、

個別の仮想Hubへの接続を切り替えるだけで 簡単に拠点間の境界を越えて、端末どおしを接続する

ことができます。

設計のフェーズ

(テレワーク&Webカメラシステム設計書)

■1.テレワーク&Webカメラシステム全体設定
全体の設計に関わってくるものは、以下の3つです。

SoftEtherで取得する-ダイナミックDNSドメイン名:XXX.softether.net
② SoftEtherVPNServer-待ち受けポート番号:992
③ SoftEtherVPNServer管理マネージャー管理パスワード:himitsu…

■2.SoftEtherVPNServerの仮想HUB設定
全体の設計の次は、拠点ごとの設計です。拠点ごとに仮想Hubを置くので、その仮想Hubの定義(Hub前とユーザ名とパスワード)を決めます。

① 仮想Hub、ユーザ、パスワード

VPN-place1(user1:enigma1)
VPN-place2(user2:enigma2)
    :       :       :
VPN-place10(user10:enigma10)

② 仮想ホストのネットワークインターフェイスの設定

SoftEtherサーバ上で動く仮想ホスト(仮想Hubを管理)の設定を決めます。 DDNSドメインはツール(SE-VPN サーバー管理 (ツール) )で割り振ることができます。そのIPアドレスは、SoftEtherが動くEC2インスタンスのIPになります。

DDNSドメイン:xxx.softether.net (IPアドレス:aaa.bbb.ccc.ddd)

各拠点ごとの仮想HubのIPアドレスをセグメントを分けて設定します。 MACアドレスはデフォルト指定されますが、任意に決められます。

IP 10.0.1.1(5E-11-AA-BB-CC-01:MACアドレスは固定で変更できる) 10.0.2.2(5E-12-AA-BB-CC-01) :       :       : 10.0.10.10(5E-1A-AA-BB-CC-01)

サブネットマスクは、1箇所255台ぐらい収容できれば良いでしょう。

SubnetMask 255.255.255.0

③ 仮想NATの設定 ON (SoftEtherClientのみIP配布)

SoftEtherBridgeは、固定IPアドレスを設定しますが、SoftEthetClientはDHCPでアドレスを自動割り付けします。拠点内の他端末に影響しないようにできます。(無線経由で渡り歩けますが、そこは設定でカバー)

④ 仮想DHCPサーバの設定

仮想ホストが払い出すDHCPプールのIPアドレスを範囲分けします。
3オクテット目が拠点のセグメント分けになります。

配布 10.0.1.21-30(place1)
配布 10.0.2.31-40(place2)
     :             :             :
配布 10.0.10.111-120(place10)
SubnetMask 255.255.255.0

DHCPオプションで、デフォルトゲートウエイを指定しますが、こちらは仮想ホストに割り当てたIPアドレスを指定します。(仮想ホストは全構成を知っている) DNSについては、8.8.8.8等でも良いですが、AWSのプライベートDNSに名前解決してもらいます。

OPTION GateWay 10.0.1-10.1-10 仮想ホストIP OPTION DNS 10.0.0.220 AWS PRIVATEDNS

■3.SoftEtherVPNClientの接続設定

1台ずつ設定しても良いが、1台分だけセットアップし、ベースイメージを、「SoftEther VPN クライアントリモート管理」で変更するほうが簡単。

■4.SoftEtherVPNBridgeの接続設定

Windowsパソコンをブリッジにする場合は、SE-VPN サーバー管理 (ツール)で設定する。 ラズパイをブリッジにする場合は、先に1箇所分だけセットアップし、これをベースイメージとして、MicroSDにコピーして、別の拠点用ラズパイブリッジとして、設定をSE-VPN サーバー管理 (ツール)で変更していく。

① SE-VPN サーバー管理 (ツール)を使って、場所毎の仮想HUB設定を定義する

以下の名前で、定義していきます。(任意に場所ごとに決めて良いです)
-----------------------------------------------
(設定場所、ブリッジ設定名:サーバ接続名)
place1: Tun1-Bridge: T1-bg
  :             :                :
place10: Tun10-Bridge: T10-bg
-----------------------------------------------

 

② ラズパイブリッジで、イメージをコピーした別拠点の場合には、ベースのBridge設定を設定場所の設定名にして、そのカスケード設定の仮想Hubをその場所のものに変更する。

③ 設置する場所(place)のIPアドレス体系に合わせる

(設定)vi /etc/dhcpcd.conf


④ wlan0のIPアドレス 、Dnsmasqの払い出しIPは設置する場所(place)のものに合わせる

(設定)vi /etc/dnsmasq.conf

⑤ SoftEtherVPNBridgeを立てるラズパイ上で動かすACCESSPOINTでのWPA2パスワードを wpa_passphraseコマンドで暗号化する

(設定)vi /etc/hostapd/hostapd.conf
(設定)vi /etc/wpa_supplicant/wpa_supplicant.conf


■5.Wifi環境 各拠点のブリッジには、その拠点でのACCESSPOINTも兼ねさせる          SSIDパスフレーズを個別に決めておく

IP=10.0.1.121/24

IP=10.0.2.122/24

  :    :  

IP=10.0.10.130/24

SSID=ACCESSPOINT(1-10)

パスフレーズ:himitsu(1-10)

各拠点でクライアントとして、ブリッジに無線接続する場合にブリッジから割り振るIPアドレスの範囲付けを行う。

place1 :10.0.1.131-140  

place2 :10.0.2.141-150

   :      :  

place10:10.0.10.221-230

■6.TAPインターフェイス

ラズパイブリッジにUSBカメラを接続して、TAPから参照できるようにする 。 ブリッジ自体のポートを介して、通信するためには、LinuxではTAPインターフェイスを使用する。

place1 :10.0.1.11

place2 :10.0.2.12

  :     :

place10:10.0.10.20

■7.AWSのネットワーク構成を変更する場合やある拠点の端末を別の場所に移行する場合

  1.  サーバ設定のため、EC2を再生成する場合には、SoftEther_DDNS を開放しておく。EC2インスタンスを再起動したら再度割り振る。 
  2. アタッチされた Elastic IP を解放する ※ 開放忘れても、ECインスタンス削除しようとすると注意され、その場で開放操作できる 
  3. ネットワーク体系の再構築はAmazonWebServicesのネットワーク設定から実施する 
  4. セキュリティグループの設定はSSHポート番号を変更する
    ※ セキュリティ対策でSSHポート番号は変更している 
  5. SoftEtherClient は「■3.SoftEtherVPNClientの接続設定」を行う 
  6. SoftEtherBridge は「■4.SoftEtherVPNBridgeの接続設定」を行う

 

作業前に設計を確認します

  • まず迷わないように、各拠点の端末について、ラズパイかWinかMacを何台用意して、どのような構成にするか洗い出して、上記のような設計書は作成しておきます。

  • 各拠点毎のプライベートアドレスのアドレス範囲によって、全拠点統一で新しいネットワークアドレスにするのか、セキュアーNATを使うのか、どこかの拠点のIPアドレス体系に合わせるのかを決めてから作成します。

  • これで作業準備完了です。

 

各構築フェーズでのかかる時間について

SoftEtherVPNサーバの構築

AmazonWebServicesを開設して、設定通りに、ネットワーク、EC2インスタンスを起動し、SoftEtherVPNサーバを導入します。
所要時間は3時間です。

ラズパイ媒体(クライアント/ブリッジイメージ)の生成

RasbianBuster(今はRaspberry Pi OSに名称変更されましたが)のダウンロードからSoftEtherVPNクライアント、SoftEtherVPNブリッジのベースイメージを作成します。
所要時間は、OSベースで2時間、クライアント&ブリッジベースで2時間です。

各拠点用の端末セットアップ

ラズパイ端末は、クライアント、ブリッジ、LAN内Wifi端末それぞれについて、ベースイメージからコピーして、設定を変更して仕上げます。

Win端末、Mac端末の場合には、インストールセットアップ媒体をダウンロードして、クライアントソフトなり、ブリッジソフトなり、インストールして、設定を行います。

所要時間は、次項の管理ツールのインストールと、さらに次々項のアプリケーションセットアップを含めて、1か所1時間半ほどでしょうか。

管理者向けのツールを用意。設定もこちらで可能。

システム管理をするために、SoftEther管理マネージャーをWindowsパソコンにインストールします。

サーバの設定内容は、SoftEther管理マネージャー接続→Config編集→ファイルに保存 で、設定内容を保存できます。また、保存したファイルから復元もできます。

                          1.SoftEther管理マネージャーのインストール①

                         1.SoftEther管理マネージャーのインストール②
Windowsパソコンからクラウドに接続するために、SoftEtherClient をインストールします。

                        2.SoftEtherClientのインストール①

                        2.SoftEtherClientのインストール②
ラズパイのIPアドレスを調べるために、SoftEther管理マネージャーを操作します。

                        3.SoftEther管理マネージャーでIPアドレス調査
Chromeブラウザのお気に入りに、カメラシステムの設置場所を登録して、映像をすぐ確認できるようにします。

4.Chromeブラウザのお気に入り設定

5.監視場所をスマホから確認

 
Winでも、Macでも、ラズパイでも、クライアントの管理は、 「SoftEther VPN クライアント リモート管理」から可能です。

  接続する仮想HUBを変えるとか、認証方法を標準パスワード認証から、固有証明書認証に変更するというような管理業務を、Windows端末上のこちらのツールから、全拠点のWin/Mac/ラズパイ端末をメンテナンスできます。

プログに飛びます

 

アプリケーションをセットアップする

  1. リモート接続するために、ラズパイにはRealVNCが標準インストールされているが、Windows側は、UltraVNCなどをセットアップ。
  2. Windowsリモートデスクトップのためには、ラズパイにRemminaをセットアップ。
  3. カメラ監視のためには、Motioneyeをインストール。  


以上で、テレワークシステム、監視カメラシステムのベース環境は出来上がった。 これに、セキュリティを考えるのであれば、固有証明書認証を設定したり、WakeOnLan用のラズパイを用意して、サーバの電源ON/OFFの運用をリモートからできるようにしたり、細かい改良をすればセキュアシステムにグレードアップできる。

テレワーク導入を検討するときに、初めに考えることについて

高齢者向けで、普段の生活の様子を確認するWebカメラを使ったモニタ用のネットワークシステムを運用していたが、それをテレワーク向けに機能追加をした。

今年後半には協業する知り合いと「テレワークシステム」として、システムのオプションとして稼働できるようにする予定です。

どのように組み込むかはプロトタイプをすでに動かしているので、作成した設計資料からおおよそイメージがつくようになったが、導入時の現状把握のための情報吸出をどう行うかも考えておかないといけない。

f:id:mikolabo:20200927105138p:plain

自前で作ったテレワークシステムイメージ




と思っていたら、少し前にIT企業を経営している方から、テレワーク導入の仕事をユーザから受注したときの実情をお聞きする機会があった。

その時の所感から、テレワーク導入検討時に、構築を受注する側は、依頼ユーザからどう情報を吸い上げれば良いのか。 テレワークを導入する側では、何を考えておけば準備になるのかを挙げてみたいと思います。

その時に聞いた話では、今、東京では助成金が使える事情から今のうちに、とりあえず、「テレワークを始めたい」と考えて、下調べなどなく仕事の依頼がくるそうです。

この場合、どのような方法を取るかというと、従業員が使う業務用のサーバがあるところに、ルータという、外部から社員が接続する入り口を用意して、とりあえず接続することになります。

聞いた方の話では、多くはセキュリティは最小限で・・・/後から考えるとして・・・」で、まず接続するストーリーになるそうです。

前提条件がなにも考えられていない状態で依頼がくるので、受注するほうも「じゃー接続だけ」となるようで、たぶん動かしながら調整やら、考えていなかった問題が出てくるのでは。

少なくとも、テレワーク導入の仕事を受注する側では、以下を知らないと作業が始められないはずです。

まず、現状把握

  1. 社内のネットワークはどのようになっているか?
  2. 社内の仕事をするために、どのサーバに、なんのプログラムが入っているか?


使っているサーバなどのマシン → 社内のLAN → 外部への接続点 → インターネット

の流れがはっきりしていて、マシンのIPアドレス、LANのIPアドレス範囲付けがわかる資料が用意できていると良いです。

また、どのサーバに何のプログラムが入っていて、なんの仕事が行われているのかがわかる資料が表などに落とし込んであるか、サーバと仕事の流れがわかる絵などがあると良いです。

(サーバ/マシン名)---------(業務)-------(プログラム)----
ServerA(192.168.1.50)----- 人事/給与 ---- 人事給与スカッと管理
ServerB(192.168.1.80)----- 販売管理  ---- 販売エースシステム

そのうえで・・・

テレワーク実施した場合の運用イメージを思い浮かべます

  1. テレワークで実施できる仕事はなにか?
  2. テレワーク対象となる仕事は、どのサーバに接続すれば遠隔で仕事ができるか?
  3. テレワークで作業できる人はどの人にするか?
  4. テレワークできる人を決めた上で、どのマシンから外部接続させるか?

これを考えると、仕事をする上でのデータをどうするかが問題になります

  1. データをクラウドなどに置くか (重要なデータをクラウドに置いて良いか?どのデータであればクラウドで良いか?)
  2. 社内LANにあるデータにアクセスさせる構成とするか (社内の職責などによって、アクセスを許可したり、拒否したりするか)
  3. 社内に、触っていいデータだけ抜き出したストレージを追加して運用するか


  一般に使われているDropboxGoogleドライブなどのオンラインサービスで済ますか? それでは個人に対する責任・負担が大きいので、より責任者が管理できる機能を持ったownCloudなどのオンラインサービスを使うか、さらには社内に自前でオンラインストレージの機能を構築できるNextCloudなどのOSSを使う手もあります。 このようにデータのことも考えだすと、

セキュリティにはどこまでお金をかけるか!!!

という難しい問題が出てきます。
こちらは、経営陣の判断でかけられるお金と、どこまでリスクを見積もっておくかで、実施する施策のバランスをどう取るかという究極の課題です。

  1. セキュリティを専門機器で面倒を見るFireWallやUTMを導入して、選任者が管理する
  2. 接続する端末で、2段階認証、もしくはデジタル証明書認証を行う


セキュリティ事故を起こしてしまうことを想像すると、①の専門機器を入れて置いて、安心したい、手は打っていると納得したいところはあると思いますが、お金をそこまで出さなくても実は事故の確率は低いのでは・・・とか。セキュリティはどうしても上層部の意向で決まってるものかも知れません。

テレワーク導入を、運用としてどこまでやるか

で考えると、社員の自宅からサーバに接続して仕事を行うという基本のかたちに加えて、

Web会議も行うか

も検討に挙がるのではないかと思います。

ただし、最近は「ZOOM」を使ったWeb会議を良く聞きますが、 プロトコル上で公表の強度よりも弱い設定で通信がされていたとか、 実は中国国内の中継サーバを経由した通信になっているとか のリスクが指摘されています。

良く利用されているWeb会議の中には、システム構成が外から見てわからないので、わからないものを使って、これから大きな支障が出てきたら、どう影響するかとても怖い側面があると思います。

この課題に関しては、NextCloud に Talk なるWeb会議ツールが使えるので、たとえば、SoftEtherVPNなどのVPNソフトを使った仮想通信網内で、自分が構築したプライベート網内で安全に運用することができます。
(NextCloud Talk以外でもWeb会議を構築できるオープンソースもあります。試してませんが、Rocket.Chatなるものも発見!)

試しに、AWSクラウド上にSoftEtherVPNサーバとNextCloud をインストールして、Web会議をやってみましたが、通常のインターネット経由のWeb会議とVPN経由のWeb会議を切り替えて運用できました。

通信的な負荷の問題もありますが、重要ではない大人数の会議はZOOMなどで行い、重要な意思決定の会議はVPN内Web会議という切り替え運用もできそうです。

以上のようなストーリーについて考えておけば、導入検討の打合せ時に、話がスムーズに進むと思います。

プライバシーポリシー

個人情報保護方針(プライバシーポリシー)

本文書は当ドメインhttps://blog.hatena.ne.jp/mikolabo)およびサブドメインにおける管理者(ミコ-ラボ)の個人情報の保護および、その適切な取り扱いについての方針を示したものです。

このサイトが収集する個人データと収集の理由

当サイトでは、主に次の2つの方法によってユーザの情報を取得することがあります。

ユーザ自身による入力

コメント入力欄、および問い合わせフォームと申込みフォームでは、ユーザの個人情報をユーザ自身によって入力していただきます。ユーザの個人情報につきましては、当サイトの管理者がユーザと連絡を取る必要が生じた場合に利用させていただくことがございますが、サイト上で公開されることはありません。

 クッキー(Cookies)

当サイトはコンテンツの充実や安定的なサイト運営を目的に、後述するアクセス解析サービスやアフィリエイトプログラム、広告配信サービスを利用しています。そのため、クッキーを通じて情報を収集することがあります。クッキーはユーザがサイトを訪れた際に、そのユーザのコンピュータ内に記録されます。 ただし、記録される情報には、ユーザ名やメールアドレスなど個人を特定するものは一切含まれません。 こうしたクッキーによる情報収集を好まない場合、ユーザ自身がブラウザでクッキーの受け入れを拒否するように設定することも可能です。その際はコンテンツによってはサービスが正しく機能しない場合もありますので、あらかじめご了承ください

情報の利用

上記の方法により収集した情報につきましては、管理者およびその提携先において、当サイトのサービス向上や、マーケティング活動の効果追跡のために利用されます。ただし、前述の通り、こうした情報から当サイトの管理者以外が個人を特定することはできません。法律の適用を受ける場合や法的強制力のある請求以外には、いかなる個人情報も、ユーザ本人の許可なく第三者に開示いたしません。

情報の共有

ユーザ自身が入力した本人を同一の個人と確認できる情報は、Gravatar など当サイト以外の Web サービスをユーザ自身が同一の情報で利用されている場合に、当サイトとそのネットワークの中で共有されることがあります。もちろん、これらの情報をネットワーク外の個人・団体などに意図的に開示することは決してありません。

注意事項

当サイトでは、上記の方法により収集した情報の保護に細心の注意を払っています。ただし、コメント欄など、他のユーザが閲覧できるスペースにユーザ自身が自発的に個人情報を入力した場合、意図しない利用がなされる可能性があることに十分に留意してください。当サイトが用意した入力箇所以外の場所において入力された情報は、個人情報の保護の対象外となり、ユーザ自身の責任となりますので、あらかじめご了承ください。

当サイトが利用・提携しているサービス

アクセス解析サービス

当サイトは以下のアクセス解析サービスを利用しています。前述の通り、トラフィックデータの収集のためにクッキーが使用されていますが、ユーザはブ ラウザでクッキーの受け入れを拒否するように設定することが可能です。これらのサービスにおいて取得・収集される情報については、各サービスのプライバ シーポリシーをご確認ください。 Googleアナリティクス

Webカメラシステム

Wnodowsパソコン、ラズパイを拠点端末として、中心のクラウド(AmazonWebServices)にSoftEtherVPNサーバを稼働して、メッシュ状の「監視カメラネットワークシステム」を構築しました。

 

f:id:mikolabo:20200927161253p:plain


 

監視カメラネットワーク・イメージ


IPHONEANDROIDスマホを使って、VPN接続すれば、以下のスマホ画面のように、遠隔地を確認することができます。


f:id:mikolabo:20200927160940j:plain

スマホの遠隔監視

ネットワーク接続装置を使った監視カメラネットワークの構成例


f:id:mikolabo:20200927161723p:plain


 

構内無線システム


ラズパイを無線ACCESSポイントにすることもできます


f:id:mikolabo:20200927161727p:plain



Webカメラクラウドシステム(1か所・1端末設置)

f:id:mikolabo:20200927161718p:plain


 

Webカメラクラウドシステム(1か所・複数端末設置)


システムを構成する機器

ネットワークを構築するために、Amazon Web Servicesクラウドサービス)を使います。

現在、デモシステムを運転中で、初年度は無料枠内で収まっている。
2年目以降、稼働1台であるが、監視端末からの監視のトラフィック
500円/月、程度を予想。 

  • 構築場所のネットワーク

構築場所のネットワーク回りは、既存の有線LAN/無線LANを利用します 既存ネットワーク使用せずに、別ネットワークを用意することもできます

機器費用概算

(例)

クラウドシステム構築+ラズパイ3B 3台+ 事業所1箇所   ¥57,525円
クラウドシステム構築+ラズパイ3B 6台+ 事業所2箇所   ¥99,970円

 

ラズパイ  +  Webカメラ +(クラウドAmazon Web Services) 
                             ∈   ネットワークシステム
 : Windowsパソコンとスマホでライブ映像を見れて、構築費用も安価

概要はこんな感じ

0.Webカメラクラウドシステム概説
システムの管理をするために、SoftEther管理マネージャーをインストールします。

                1.SoftEther管理マネージャーのインストール①

                1.SoftEther管理マネージャーのインストール②
クラウドに接続するために、SoftEtherClient をインストールします。

                2.SoftEtherClientのインストール①

                2.SoftEtherClientのインストール②
ラズパイカメラシステムのIPアドレスを調べるために、SoftEther管理マネージャーを操作します。

                3.SoftEther管理マネージャーでIPアドレス調査
Chromeブラウザのお気に入りに、カメラシステムの設置場所を登録して、映像をすぐ確認できるようにします。

4.Chromeブラウザのお気に入り設定
スマホからも確認できます。

5.監視場所をスマホから確認

6.USBメモリからLinuxを立ち上げる
普段使っているパソコンを監視カメラに代用する(USBメモリLinux

7.スマホから映像を確認する

8.VirtualBoxで監視カメラを動かす
普段使っているパソコンを監視カメラに代用する(VirtuaBox)

9.いらなくなって使わなくなったスマホを監視カメラに使う
監視カメラを代用するスマホは、電話はできなくなっていますが、Wi-Fi機能はまだ使えますので、Wi-Fiを使ってインターネットを超えて通信します。スマホの画像を見る仕組みは、WebカメラクラウドシステムのVPN部分からWi-Fiからの通信を受けます。この構成であればスマホ通信の料金はかかりません。

10.監視カメラシステムのプログラムで、どんなことができるか説明

NTT 東日本 - IPA 「シン・テレワークシステム」が無償で公開中!!!(★期間延長★)

NTT 東日本 - IPA 「シン・テレワークシステム」のホームページから

https://telework.cyber.ipa.go.jp/news/

 

 


今年後半は、このところ仕事でお世話になっている元同僚と病院システム構築のお仕事することになっているが、あまり工数をかけずにテレワークシステムになるものを付けましょう、ということになり、お金をかけずにプロトタイプを作成した。

とプログに書いたが、その構築中に本家本元のつくば大学が、NTT東日本と共同で、「シン・テレワークシステム」なるものを公開していることを知った。

本日、2020.09.23現在で、77,322 ユーザが使っているらしい。

オフィス、自宅に導入してみたが、開発者代表のソフトイーサ株式会社が有償サービスを行っているDesktop VPN に手を加えているようです。


企業への遠隔接続する場合に問題となる、ルータ、ファイアーフォールなどのネットワーク機器に手を加えないで利用できるようにするために、サーバとクライアントの間に接続ノードを設ける構造になっているが、そのノードにラズパイを利用しているようです。(写真を確認するとラズパイです)

このコロナ渦に、国と国産VPNソフトの超最強タッグで、ウィルスと人類の戦いに打ち勝つべく、短期間にさすがの作り込みをしています。

https://telework.cyber.ipa.go.jp/news/20200514/

https://telework.cyber.ipa.go.jp/news/20200709/

 

  1. 自宅PCから会社サーバに、双方のルータ、ファイアウォールなどの設定を変更することなく、リモート接続ができる。

  2. 会社に人がいなくても、遠隔地のサーバの電源を入れる「Wake on LAN 機能」を実装

  3. 二要素認証・ワンタイムパスワード (OTP)、マイナンバーカードを用いたユーザー認証といった多彩な認証機能

  4. エンタープライズ環境用ポリシー規制サーバー機能 (セキュリティの強制)

  5. 行政情報システム適応モード(適用するネットワークで特別な接続先にだけ通信許可を与えている場合などに、ネットワークを最適化する)

  6. 完全閉域化ファイアウォール機能 (テレワーク中はユーザPCから、勝手に外部通信に抜けてリスクあるサイトなどに接続できなくする) などなど

※ 2020/05/14 、2020/07/09 に大規模な機能追加が行われて、
  多くのユーザ要望を吸い上げている

これで、国からのお金は、ラズパイ50台を65万円だけで済ませて、試算によると、3万人の利用に対して、実質1ユーザあたり、5円から14円で済ませられるみたいです。

現在、無償提供で、2020/10/31までの期限付き提供でしたが、1年後の 2021/10/31 まで継続することが広報されました。

今後、どうなるかわかりませんが、皆さんアカウントは作っておいたほうが良いのでは・・・

シン・テレワークシステムでは、Windowsリモートデスクトップをベースにして、利用者が簡単にテレワークができるように方向を取った形です。

できることはサーバ機へのリモートデスクトップだけで、セキュリティのために認証関係機能を手厚く追加したイメージです。

元になっているSoftEtherVPNではリモートデスクトップだけではなくて、Bridge接続してLAN間ネットワークを作成することや、サーバ管理ツールでアクセス制御して、品質担保したり、負荷を考えて、L3接続もできるので、知識があればテレワークのためにネットワークデザインすることができます。また、SecureNatなる管理権限のない一般ユーザモードでプロセスを動かせるので、安全ですし、接続端末に遠隔セグメントとは別の独自IPを付ければ、双方のLAN環境から独立したネットワークも作れたりします。これを自前でプロト作成しました。

周りの人に聞くと、この「シン・テレワークシステム」を知っている人が少ない。
コロナでオフィスに出かけるのも怖い、今日この頃。
いろんな人に教えてあげましょう!!