IoTの要素「モノ・ネットワーク・クラウド」を体験いただけるワークショップ。クラウド型カメラ「ソラカメ」のAPIを用いて、録画済み動画からタイムラプス動画(コマ送り動画)による動画の要約化をします。

実行例:このようになります。

受講に必要なスキル

利用するデバイスやサービスの紹介

Soracom Cloud Camera Services 「ソラカメ」

3,480円 + 990円から始められる、クラウド型カメラサービスが Soracom Cloud Camera Services (通称: ソラカメ) です。

ソラカメが提供しているのは、対応カメラが撮影した動画の録画や保管、再生、そして他システム連携を可能とするSaaSとAPIです。対応カメラは「ATOM Cam 2」と「ATOM Cam Swing」の2機種があります(2022年10月現在)。

https://soracom.jp/sora_cam/

ここまで確認したら

次に進みます。

本ワークショップを行うためには、以下の準備を行ってください。

当日までに準備しておくこと

以下は、ワークショップ当日までに準備を済ませておいてください。

#

備考

SORACOM アカウントの作成

SORACOM アカウント (オペレーター) を作成するを参考に、作成を済ませてください。

ATOM アプリのインストール

当日利用するスマートフォンに ATOM アプリをインストールしてください。iOS もしくは Android に対応したスマートフォンにインストールできます。インストール方法はATOM アプリをインストールするをご覧ください。

当日の持ち物

以下は、ワークショップ当日の持ち物です。

#

備考

パソコン

ワークショップテキストを閲覧したり、SOARCOM CLIによる操作を行います。

  • Wi-Fi によるインターネット接続が可能で、Webサイトへの接続制限が無いこと。
  • Windows 10 もしくは 11 (いずれも64bit版)、
    macOS 12.0 もしくは 11.0 (Intel/Armどちらもで可) であること。
  • ソフトウェアのインストール制限が無いこと。
  • Windows : PowerShell もしくは WSL/Ubuntu が利用可能なこと。
  • macOS : ターミナルとBashが利用可能なこと。
  • Google Chrome 等の最新ブラウザが利用可能であること。
  • 3〜4時間の連続利用が可能な環境 (特にACアダプター)
  • ※タブレットやスマホでの参加はサポート外となります。

ATOM アプリが入ったスマートフォン

ソラカメ対応カメラ「ATOM Cam」の共有や閲覧を行います。

ここまで達成したら

次に進みます。

本ハンズオンでは、運営が用意している「ソラカメ」をワークショップ受講者と共有することで、ワークショップ受講者の手元に実機が無くともワークショップが受講できるようになります。

手順の概要は以下の通りです。

  1. ATOM アプリ上で「ATOM ユーザー ID」を探す
  2. ATOM ユーザー ID を運営に提出する
  3. (運営側の設定を待ってから) 共有の受け入れをする

「ATOM ユーザー ID」を探す

スマートフォンの ATOM アプリを開き、ATOM ユーザー ID を確認するに沿ってATOM ユーザー ID をメモしてください。

ATOM ユーザー ID を運営に渡す

ATOM ユーザー ID 提出フォームから、ATOM ユーザー ID を提出してください。スマートフォンからの操作が便利です。

URL: https://bit.ly/uge2022a1

提出方法

ATOM ユーザー ID を入力して[Save]をクリック。

以下のように「お待ちください」が表示されれば成功です。運営側で、共有設定をするため2〜5分お待ちください。

画面の再読み込みを行った後、以下のように「共有できます」と表示されたら、次のステップへお進みください。

※ 提出が集中すると、若干時間がかかる場合があります。10分経過しても「共有できます」に変わらない場合は、スタッフへお声がけください。

共有リクエストを承認する

共有リクエストを承認するを行ってください。(このページにはその他の操作についても書かれていますが、共有リクエストの承認以外の操作は行わないでください)

共有の確認

ATOM アプリの中で、以下のように "(Share)" とついたカメラが追加されたことを確認したら成功です。
※ 名称が多少異なる場合がありますが (Share) という名前が見えれば成功です。

カメラをタップすると、現状の様子を見ることができます。(映像は異なる場合があります)

ここまで達成したら

次に進みます。

API 操作を手助けする CLI (Command Line Interface) ツール「SORACOM CLI」のインストールと、認証情報のセットアップを行います。

SORACOM CLI のインストール、認証情報の準備、認証情報の保存と3つの作業を行います。これらの手順は「SORACOM CLI をインストールする」をご覧ください。

セットアップのポイント

SORACOM CLI の確認

以下のように version サブコマンドで v0.13.0 (以上) のバージョン番号が表示されるようになれば成功です。

soracom version
結果 => SORACOM API client v0.13.0

確認

ソラカメデバイス一覧のAPIで、一覧が返ってくれば成功です

OS共通

soracom sora-cam devices list

実行例

❯ soracom sora-cam devices list
[
        {
                "configuration": {
                        "audioAlarmEnabled": false,
                        "motionDetectionEnabled": true,
     (略)

                "name": "ATOM Cam 2 Max1",
                "productDisplayName": "ATOM Cam 2"
        }
]

ここまで達成したら

次に進みます。

FFmpeg 格納先の準備

終了後の環境回復を目的に、使用するソフトウェア群を単一のディレクトリ(フォルダー)にまとめます。
ホームディレクトリの直下に sora-cam-bins を作成し、その中に入れることにします。

ここからの操作は Windows Terminal や Terminal.app などのターミナルから行います。

OS共通

mkdir ~/sora-cam-bins

パスの追加

パスの追加を行うコマンドは、ターミナルを開く都度、実行してください。

PowerShell

$ENV:Path=($ENV:homedrive + $ENV:homepath + "\sora-cam-bins;" + $ENV:Path)

確認方法: $ENV:Path.split(";")[0]

macOS もしくは WSL/Ubuntu

export PATH="$HOME/sora-cam-bins:$PATH"

確認方法: echo $PATH | cut -d ":" -f 1

FFmpeg のダウンロードとセットアップ

動画や音声の記録/変換/再生するためのフリーソフトウェアです。タイムラプスを作成するために利用します。

対応 OS のバイナリが入った ZIP ファイルをダウンロードします

【Windows もしくは macOS】 ZIP ファイル内の ffmpeg もしくは ffmpeg.exesora-cam-bins にコピーします

※Windowsは ZIP ファイル内の bin ディレクトリの中に ffmpeg.exe があります

【macOS もしくは WSL/Ubuntu】以下のコマンドを実行します

macOS

chmod u+x ~/sora-cam-bins/ffmpeg

WSL/Ubuntu

apt install -y ffmpeg

※ WSL/Ubuntuでは、ダウンロードから実行属性まで一括です。

※ PowerShell では、当該作業はありません

確認

ffmpeg がインストールできているか確認します。

OS共通

ffmpeg -version

実行例

❯ ffmpeg -version
ffmpeg version 5.1.2-essentials_build-www.gyan.dev Copyright (c) 2000-2022 the FFmpeg developers

ここまで達成したら

次に進みます。

静止画や動画の取得(エクスポート)は非同期処理です。そのため、3つの手順で1セットになります。

  1. エクスポートジョブの要求
  2. ジョブの確認
  3. (ジョブが完了していれば) ダウンロード

この1セットで1枚の静止画(動画)が得られます。本ワークショップでは、最終的に20枚の静止画を取得します。1枚目は動きを理解するために1つずつ実行していきます。残り19枚は、スクリプトを実行して取得します。

1つずつ実行する場合は、ジョブ要求(export)から確認(get-exported)までの間にジョブが完了する事の方が多いのですが、スクリプト実行については待機を入れています。そのあたりも確認しながら進めましょう。

ここまで達成したら

次に進みます。

APIを利用して、静止画を1枚取得してみます。

エクスポート対象とする日時をUNIXエポック時間形式(ミリ秒込)で入手する

APIへの指定は、ミリ秒まで含むUNIXエポック時間形式で行います。そこで "2022/9/1 13:00:00" といった書式から、UNIXエポック時間形式の数値を算出します。

以下の例は 2022/10/18 7:00:00 をUNIXエポック時間(ミリ秒)へ変換する例です。
ここで得られた結果をメモしてください。

PowerShell

(((Get-Date("2022/10/18 7:00:00")).AddHours(0) - (Get-Date("1970/1/1 0:0:0 GMT"))).totalSeconds) * 1000
#結果=> 1666044000000

WSL/Ubuntu (GNU date)

date --date "2022/10/18 7:00:00 0 hours" +%s000
#結果=> 1666044000000

macOS (BSD date)

date -v+0H -j -f "%Y/%m/%d %H:%M:%S" "2022/10/18 7:00:00" +%s000
#結果=> 1666044000000

エクスポート要求 (export)

用意する情報

実行

OS共通

soracom sora-cam devices images export --device-id 7Cxxxxxxxx24 --time 1666044000000

実行結果の中の exportId の値をメモしてください。

実行例

❯ soracom sora-cam devices images export --device-id 7Cxxxxxxxx24 --time 1665957600000
{
        "deviceId": "7Cxxxxxxxx24",
        "exportId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "operatorId": "OP0xxxxxxxx11",
        "requestedTime": 1666146018365,
        "status": "initializing"
}

ジョブ状況確認 (get-exported)

用意する情報

実行

OS共通

soracom sora-cam devices images get-exported --device-id 7Cxxxxxxxx24 --export-id xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx

実行結果の中の url の値を(長いですが)メモしてください。

status が completed でない場合は url がありません。数秒待ってから、再度 get-exported を実行してください。

実行例

❯ soracom sora-cam devices images get-exported --device-id 7Cxxxxxxxx24 --export-id xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
{
        "deviceId": "7Cxxxxxxxx24",
        "expiryTime": 1666146621000,
        "exportId": "xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx",
        "operatorId": "OP0xxxxxxxx11",
        "requestedTime": 1666146018365,
        "status": "completed",
        "url": "https://soracom-sora-(略)bv5XiYI%3D&Expires=1666146621"
}

ダウンロード

用意する情報

実行と確認

ここでのダウンロードファイルは、タイムラプス動画の1番最初の画像にもなるため、ファイル名を 000.jpg としています。

PowerShell

Invoke-WebRequest -OutFile 000.jpg -Uri "https://soracom-sora-(略)bv5XiYI%3D&Expires=1666146621"

macOS, WLS/Ubuntu

curl -s --output 000.jpg "https://soracom-sora-(略)bv5XiYI%3D&Expires=1666146621"

これでダウンロードできます。
ls 000.jpg などで存在の確認をしたり、実際にファイルを開いて静止画が見られるか確認してみてください。

ここまで達成したら

次に進みます。

タイムラプス動画作成に向けて2時間毎に時間をスキップした静止画を19枚取得し、計20毎の静止画とします。

さきほどの作業を19回繰り返すことになりますが、代わりにスクリプトで取得できるようにしています。

PowerShell

スクリプトのダウンロード

Invoke-WebRequest -OutFile export_images.ps1 -Uri https://gist.githubusercontent.com/ma2shita/bacc21ce32a9883ec17756b67360037a/raw

スクリプトの実行

.\export_images.ps1 7Cxxxxxxxx24 "2022/10/18 7:00:00" -Verbose

WSL/Ubuntu および macOS

WSL/Ubuntu および macOS では jq を利用します。以下のコマンドで jq のインストール状況を確認してください。インストールされていなければDownload jqに従ってインストールしてください。

jq の確認

jq --version
結果#=> jq-1.6

スクリプトのダウンロード

curl -s --output export_images.bash https://gist.githubusercontent.com/ma2shita/83c3df9af825be2b86b4fa5c7e147578/raw

スクリプトの実行

bash export_images.bash 7Cxxxxxxxx24 "2022/10/18 7:00:00"

確認

最終的には 000.jpg から 019.jpg の計20つのJPEGファイルが揃っている事を確認してください。

実行例

❯ ls *.jpg
000.jpg  001.jpg  002.jpg  003.jpg  004.jpg  005.jpg  006.jpg  007.jpg  008.jpg  009.jpg  010.jpg  011.jpg  012.jpg  013.jpg  014.jpg  015.jpg  016.jpg  017.jpg  018.jpg  019.jpg

ここまで達成したら

次に進みます。

すべてのJPEG画像をつなぎ合わせて、MP4動画を作成します。

OS共通

ffmpeg -y -r 1 -i %03d.jpg -vcodec libx264 -pix_fmt yuv420p -r 30 output.mp4

実行例:output.mp4 を再生すると、このようになります。

お疲れさまでした!

「ソラカメ」は対応カメラからの動画を常時クラウドへ録画するサービスです。今回はタイムラプスという手段で要約化を行いました。

その他にも、AI/MLサービスとの組み合わせや、他のセンサーと連動した現場の記録と、さまざまなアイデアが考えられるのではないでしょうか。

是非とも「ソラカメ」の活用アイデアをお寄せください!

本ワークショップで作成したファイルは以下の通りです。必要に応じて退避や削除してください。

必要に応じて、追加で SORACOM CLI のアンインストールを行ってください。

※ホームディレクトリを中心にファイルを展開しているため、他のファイルを消さないようにご注意ください。