IoTの要素「モノ・ネットワーク・クラウド」を体験いただけるワークショップ。クラウド型カメラ「ソラカメ」のAPIを用いて、録画済み動画からタイムラプス動画(コマ送り動画)による動画の要約化をします。
実行例:このようになります。
3,480円 + 990円から始められる、クラウド型カメラサービスが Soracom Cloud Camera Services (通称: ソラカメ) です。
ソラカメが提供しているのは、対応カメラが撮影した動画の録画や保管、再生、そして他システム連携を可能とするSaaSとAPIです。対応カメラは「ATOM Cam 2」と「ATOM Cam Swing」の2機種があります(2022年10月現在)。
次に進みます。
本ワークショップを行うためには、以下の準備を行ってください。
以下は、ワークショップ当日までに準備を済ませておいてください。
# | 備考 |
SORACOM アカウントの作成 | SORACOM アカウント (オペレーター) を作成するを参考に、作成を済ませてください。 |
ATOM アプリのインストール | 当日利用するスマートフォンに ATOM アプリをインストールしてください。iOS もしくは Android に対応したスマートフォンにインストールできます。インストール方法はATOM アプリをインストールするをご覧ください。 |
以下は、ワークショップ当日の持ち物です。
# | 備考 |
パソコン | ワークショップテキストを閲覧したり、SOARCOM CLIによる操作を行います。
|
ATOM アプリが入ったスマートフォン | ソラカメ対応カメラ「ATOM Cam」の共有や閲覧を行います。 |
次に進みます。
本ハンズオンでは、運営が用意している「ソラカメ」をワークショップ受講者と共有することで、ワークショップ受講者の手元に実機が無くともワークショップが受講できるようになります。
手順の概要は以下の通りです。
スマートフォンの ATOM アプリを開き、ATOM ユーザー ID を確認するに沿ってATOM ユーザー ID をメモしてください。
ATOM ユーザー ID 提出フォームから、ATOM ユーザー ID を提出してください。スマートフォンからの操作が便利です。
ATOM ユーザー ID を入力して[Save]をクリック。
以下のように「お待ちください」が表示されれば成功です。運営側で、共有設定をするため2〜5分お待ちください。
画面の再読み込みを行った後、以下のように「共有できます」と表示されたら、次のステップへお進みください。
※ 提出が集中すると、若干時間がかかる場合があります。10分経過しても「共有できます」に変わらない場合は、スタッフへお声がけください。
共有リクエストを承認するを行ってください。(このページにはその他の操作についても書かれていますが、共有リクエストの承認以外の操作は行わないでください)
ATOM アプリの中で、以下のように "(Share)" とついたカメラが追加されたことを確認したら成功です。
※ 名称が多少異なる場合がありますが (Share) という名前が見えれば成功です。
カメラをタップすると、現状の様子を見ることができます。(映像は異なる場合があります)
次に進みます。
API 操作を手助けする CLI (Command Line Interface) ツール「SORACOM CLI」のインストールと、認証情報のセットアップを行います。
SORACOM CLI のインストール、認証情報の準備、認証情報の保存と3つの作業を行います。これらの手順は「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"
}
]
次に進みます。
終了後の環境回復を目的に、使用するソフトウェア群を単一のディレクトリ(フォルダー)にまとめます。
ホームディレクトリの直下に 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-release-essentials.zip
をダウンロードします。ffmpeg
もしくは ffmpeg.exe
を sora-cam-bins
にコピーします※Windowsは ZIP ファイル内の bin ディレクトリ
の中に ffmpeg.exe
があります
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セットで1枚の静止画(動画)が得られます。本ワークショップでは、最終的に20枚の静止画を取得します。1枚目は動きを理解するために1つずつ実行していきます。残り19枚は、スクリプトを実行して取得します。
1つずつ実行する場合は、ジョブ要求(export)から確認(get-exported)までの間にジョブが完了する事の方が多いのですが、スクリプト実行については待機を入れています。そのあたりも確認しながら進めましょう。
次に進みます。
APIを利用して、静止画を1枚取得してみます。
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
device_id
>OS共通
soracom sora-cam devices images export --device-id 7Cxxxxxxxx24 --time 1666044000000
--device-id
には、デバイスIDを指定します--time
には、対象となる日時のUNIXエポック時間(ミリ秒込)を指定します実行結果の中の 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"
}
device_id
>exportId
OS共通
soracom sora-cam devices images get-exported --device-id 7Cxxxxxxxx24 --export-id xxxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx
--device-id
には、デバイスIDを指定します--export-id
には、ジョブ要求時に得た exportId
を指定します実行結果の中の 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"
}
url
ここでのダウンロードファイルは、タイムラプス動画の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回繰り返すことになりますが、代わりにスクリプトで取得できるようにしています。
スクリプトのダウンロード
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 では 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サービスとの組み合わせや、他のセンサーと連動した現場の記録と、さまざまなアイデアが考えられるのではないでしょうか。
是非とも「ソラカメ」の活用アイデアをお寄せください!
本ワークショップで作成したファイルは以下の通りです。必要に応じて退避や削除してください。
~/export_images.ps1
または ~/export_images.bash
~/sora-cam-bins/
の中身とディレクトリそのもの~/.soracom/default.json
(SORACOM CLI の認証情報)~/001.jpg ~ ~/019.jpg
(静止画JPEGファイル)~/output.mp4
(タイムラプス動画)必要に応じて、追加で SORACOM CLI のアンインストールを行ってください。
※ホームディレクトリを中心にファイルを展開しているため、他のファイルを消さないようにご注意ください。