Help us understand the problem. What is going on with this article?

ラズパイで撮影した動画をLTE回線でAmazon Kinesis Video Streamに送信

メカトラックス社様からお借りした4G通信モジュールを使用して、Amazon Kinesis Video Streamに送信したウエブカメラの動画をAmazon Rekognitionに解析させてみました。
今回は、LTE回線経由でラズパイ ⇒ Kinesis Video Streamの部分を主に記載します。(Kinesis Video Stream ⇒ Rekognitionの続編も予定してます)

4GPiとは

4GPi(フォージーパイ)はラズベリーパイ専用に開発された4G(LTE)通信モジュールです。
携帯電話網経由の通信のためWi-Fi等のネットワーク環境がない場所でもラズパイからインターネットに接続できます。
4GPiの詳細はこちら

概要

       outline01.png

環境

・Raspberry Pi 3 Model B(ラズパイ)
・4GPi
・SIMカード※1、SIMカードアダプター※2
・MicroSDカード、MicroSDカード対応Reader/Writer※2
・ラズパイ接続用のUSBキーボード、USBマウス、モニタ、モニタ接続用HDMIケーブル
・LOGICOOL HD Webcam C525(ウエブカメラ)
・作業PC
・Wi-Fi環境※3
・AWSアカウント

(※1)個人のスマホから抜きました。Nano-SIMだったので標準SIMに変換するSIMカードアダプターを別途調達。
(※2)家電量販店で調達しました。
(※3)ラズパイに4GPiのモジュールをインストールするまで使用します。

作業の流れ

  1. 4GPiの装着
  2. Raspbianのインストーラ作成
  3. Raspbianのインストール
  4. 4GPiの設定
  5. AWSの設定
  6. Raspbianの設定
  7. ウエブカメラの動画をKinesis Video Streamに送信する

1. 4GPiの装着

ラズパイに4GPiを装着します。
raspi3.png

# 説明 # 説明
ラズパイ本体 HDMIケーブル(to モニタ)
4GPi本体 4GPi-ラズパイ接続用のUSBコネクタ(形状はUSB mini-Bメス)
電源コネクタ(to ACアダプタ) USBコネクタ x 4個(to キーボード、マウス、ウエブカメラ、⑥)
4Gアンテナ x 2本 SIMソケット(標準SIMカード対応)

※①、⑤、⑦はラズパイ、②~④、⑥、⑧は4GPi
※ラズパイ本体への電源供給は、ACアダプタに接続された③電源コネクタで4GPiから①ラズパイ本体に給電しているので不要です。

2. Raspbianのインストーラ作成

作業PCでラズパイにインストールするOSのインストーラを作成します。
OSはDebianベースのRaspbian(Buster)を使用しました。

  • ブラウザからRaspberrypi.orgのダウンロードページにアクセスしてNOOBSの「NOOBS_v3_x_x.zip」をダウンロードします。
    ※ダウンロードに10時間以上かかりました。ミラーサイトのほうが早いかも。。 1.png
  • 作業PCにMicroSDカード対応Reader/Writerを接続してMicroSDカードを差し込みます。
  • SD Card Formatter等で作業PCに装着したMicroSDカードをフォーマットします。
  • エクスプローラでダウンロードしたNOOBS_v3_x_x.zipをMicroSDカード上に解凍します。

3. Raspbianのインストール

ラズパイにRaspbianをインストールします。

  • ラズパイ裏面のMicroSDカードスロットにMicroSDカードを差し込んでラズパイの電源を入れます。
  • Raspbianの初期設定ウィザードが表示されたら下表の通りインストールしてRaspbianを再起動します。
項目 設定値
Country Japan
Language Japanese
Timezone Tokyo
new password (任意)
Select WiFi Network (接続可能なWifiを選択します※)
Check For Updates (SkipしてOKです)

※4GPiの設定が完了するまでインターネット接続はWi-Fiを使用します。

4. 4GPiの設定

RaspbianのLXTerminalツールを起動し、メカトラックス社の設定スクリプトを実行して4GPiを設定します。

  • Raspbianにリポジトリを追加します。
$ curl https://mechatrax.github.io/setup.sh | sudo bash
  • Raspbianに4GPiパッケージをインストールしてRaspbianを再起動します。
$ sudo apt install 4gpi-utils 4gpi-net-mods 4gpi-networkmanager
$ shutdown -r now
  • アクセスポイントに接続して接続状況を確認してみます。
    ※ドコモspモードはアクセスポイント名(APN)として「spmode.ne.jp」が指定できます。
$ sudo nmcli con add type gsm ifname "*" con-name 【接続名】 apn 【APN】 user 【ユーザー名】 password 【パスワード】
$ sudo nmcli dev status
  • cdc-wdm0デバイスの状態が「接続済み」となり、インターネットにあっさり接続できました。
     3.png

  • Wi-Fi接続が不要になったので、画面右上のネットワークアイコンから「Turn Off Wi-Fi」をクリックしてWi-Fiを切断します。

これで4GPiの設定が完了です。

5. AWSの設定

作業PCのブラウザ(Google Chrome推奨)からAWSマネジメントコンソールにログインしてAWS側の設定を行います。
※AWSアカウントが必要です。

5.1 IAMユーザーの作成

AWSマネジメントコンソールでIAMユーザーを作成します。

  • マネジメントコンソールのサービスメニューから「IAM」を開き、ユーザー画面の[ユーザーを作成]をクリックします。
  • ユーザー作成画面のユーザー名を入力後、「プログラムによるアクセス」を選択して[次のステップ]をクリックします。
  • 「既存のポリシーを直接アタッチ」オプションから「AmazonKinesisVideoStreamsFullAccess」を選択し、[次のステップ]をクリックします。 iam02.png
  • アクセスキーIDとシークレットアクセスキーをメモ張にコピペします。 5.png

5.2 Kinesis Video Streamの作成

Kinesis Video Streamにウエブカメラの動画を受け取るのストリームを作成します。

  • マネジメントコンソールのサービスメニューから「Kinesis Video Stream」を開きます。
  • ビデオストリーム画面から下表の設定としてビデオストリームを作成します。
項目 設定内容
ビデオストリーム名 testKinesisVideoStreams01
  • 作成したビデオストリームをクリックしてビデオストリームARNの値をメモ帳にコピペします。 2.png

6. Raspbianの設定

RaspbianからAWSサービスにアクセスするための環境を構築します。
LXTerminalを起動して以下の作業を実施します。

6.1 AWS configの設定

  • AWSコマンドラインインターフェース(AWS CLI)をインストールします。
$ sudo apt install python3-pip
$ sudo pip3 install awscli --upgrade
  • aws configureコマンドを実行して下表のパラメータを定義します。
    プロファイル名は「awsconfigure01」としました。
$ aws configure --profile awsconfigure01
項目 設定値
AWS Access Key ID (5.1節のアクセスキーID)
AWS Secret Access Key (5.1節のシークレットアクセスキー)
Default region name Tokyo
Default output format json

6.2 C++ Producer SDKのインストール

ウエブカメラの動画をKinesis Video Streamsに送信するために必要となるライブラリ(C++ Producer SDK)をインストールします。

  • ライブラリのインストール前に必要なパッケージをRaspbianにインストールします。
$ sudo apt-get update
$ sudo apt-get install -y git
$ sudo apt-get install byacc flex
$ sudo apt-get install openjdk-8-jdk
  • 環境変数JAVA_HOMEを定義してcmakeをインストールします。
$ export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-armhf/
$ sudo apt-get install cmake
$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp
  • インストールスクリプトの実行前に必要なパッケージをインストールします。
$ sudo apt-get update
$ sudo apt-get install libssl-dev libcurl4-openssl-dev liblog4cplus-1.1-9 liblog4cplus-dev
$ sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base-apps
$ sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-tools
$ sudo apt-get install gstreamer1.0-omx
  • スクリプトを実行して「Success!」と表示されたらインストール完了です。
$ ./min-install-script

6.3 ウエブカメラの認識

LXTerminalでlsusbを実行してウエブカメラが認識されていることを確認します。
21.png

7. ウエブカメラの動画をKinesis Video Streamに送信する

  • libgstkvssink.soファイルが存在するディレクトリを抽出します。
$ dirname `sudo find / -type f |grep libgstkvssink.so`

/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build
  • 抽出したディレクトリを環境変数「GST_PLUGIN_PATH」にセットします。
$ export GST_PLUGIN_PATH=/home/pi/amazon-kinesis-video-streams-producer-sdk-cpp/kinesis-video-native-build:$GST_PLUGIN_PATH
  • ウエブカメラの動画をビデオストリームに送信します。
    ※コマンドの実行前にラズパイを再起動する場合はGST_PLUGIN_PATHを再セットします。
$ gst-launch-1.0 v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! omxh264enc control-rate=2 target-bitrate=512000 periodicity-idr=45 inline-header=FALSE ! h264parse ! video/x-h264,stream-format=avc,alignment=au,profile=baseline ! kvssink stream-name="testKinesisVideoStreams01" access-key="【5.1節のアクセスキーID】" secret-key="【5.1節のシークレットアクセスキー】" aws-region="ap-northeast-1"
  • マネジメントコンソールのKinesis Video Stream画面でウエブカメラの動画が再生されました!
    stream05.png

  • 動画が再生されない場合は、過去の時刻に戻して「再生ヘッドコントロールを保存」をクリックしてみてください。
    stream06.png

最後に

4GPiのLTE通信を使用してラズパイに装着したウエブカメラの動画をAmazon Kinesis Video Streamに送信できました。
Wi-Fi環境のない僻地や移動体通信が必要となる場所で活用できそうです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした