1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

本記事の内容

本記事では、日立制御エッジコンピュータCE50-10Aを活用して、現場に設置した監視カメラ映像をGoogle Cloud Platform(GCP)のCloud Storage上にアップロードする方法を紹介します。
監視カメラの映像は常に発生し続けるデータですので、一定時間ごとに区切ってファイルに保存する必要がありますが、CE50-10Aのデータ入力機能を用いることで簡単&拡張性高く実現できることを示します。

CE50-10Aとは

CE50-10Aは、工場や発電所のような産業・インフラ業界におけるAI活用を念頭に、日立が2021年に販売開始したエッジ製品です。

image.png
引用元:https://www.hitachi.co.jp/products/it/control_sys/platform/cs_edge/index.html

CE50-10Aは、AIアプリケーションの開発/運用を効率よく・確実に行えるようにする4つの機能を提供しています。

  • データ入力機能
    様々なカメラから映像を取得し、解像度やフレームレートを調整してファイル出力します。
  • データ管理機能
    データ入力機能が出力したファイルを管理する機能です。
  • 推論実行機能
    OpenVINOを用いて推論処理を行います。
  • 推論開発機能
    Jupyter Notebookを用いて、推論処理を開発することが出来ます。

image.png
引用元:CE50-10Aユーザーズ・ガイド

各機能はDockerコンテナとして実装されています。
これらの機能を活用してAIアプリケーションを実装することで、疎結合で拡張性の高いマイクロサービス・アーキテクチャで実装することが出来ます。
例えば、オンライン動作中にAI推論機能をアップグレードする、といったことが可能です。

Cloud Storageへのアップロードの実現方法

前置きが長くなりました。
まとめますと、
「CE50-10Aでは、データ入力機能がカメラ映像をファイルに変換するため、生成されたファイルをアップロードだけすればOK」
ということです。

アップロードを実現するコンテナの構成を以下に示します。
image.png

処理の流れは以下のようになります。

  1. データ入力機能は、ボリューム(input_volume)にファイルを出力し、データ管理機能にファイル名を記録します。
  2. データ管理機能は、ボリューム(storage_volume)にファイルを移動します。
  3. アップロード処理は、データ管理機能から未アップロードのファイル名を取得してファイルをアップロードします。
    アップロードが成功したら、データ管理機能にアップロード完了を通知します。

コンテナの設定はdocker-composeを使用します。
ファイルを受け渡すボリュームにtmpfsを用いることで性能向上と搭載ディスクの劣化防止を行います。

docker-compose.yaml
version: '3'
services:
    data_input:
        image: ctrl_edge_ai/data_input:1.0
        network_mode: host
        volumes:
            - ./data_input.json:/config/data_input.json
            - input_volume:/input
        depends_on:
            - data_manager
        devices:
            - "/dev/dri:/dev/dri"
    data_manager:
        image: ctrl_edge_ai/data_manager:1.0
        network_mode: host
        volumes:
            - input_volume:/input
            - storage_volume:/storage
    upload_file:
        build: .
        network_mode: host
        environment:
            - BUCKET_NAME=xxxxxxxxxx
        volumes:
            - ${HOME}/.config:/root/.config
            - storage_volume:/storage
        depends_on:
            - data_manager
volumes:
     input_volume:
          driver: local
          driver_opts:
               type: tmpfs
               device: tmpfs
               o: "size=512m"
     storage_volume:
          driver: local
          driver_opts:
               type: tmpfs
               device: tmpfs
               o: "size=1536m"

データ入力機能の設定はjsonファイルで行います。
ここで解像度やフレームレートを変更することも可能です。
設定項目の詳細はユーザーズ・ガイドを参照してください。

data_input.json
{
    "camera":{
        "name":"camera_no1",
        "type":"ip",
        "connect":{
            "rtsp_url":"rtsp://id:password@192.168.10.205:11712/ipcam_h264.sdp",
            "latency":2000
        },
        "video":{
            "width": 1920,
            "height": 1080,
            "fps": 30,
            "codec": "H264"
        }
    },
    "output":{
        "type":"video",
        "output_dir":"/input",
        "duration":5,
        "video":{
            "width": 1920,
            "height": 1080,
            "fps": 30,
            "codec": "H264"
        },
        "api_url":"http://127.0.0.1:13579"
    }
}

さて、肝心のアップロード処理です。
データ管理機能はREST APIで操作できますので、どんな言語でも簡単に実装出来ます。今回はシンプルにシェルスクリプトだけで実装してみました。
なお、事前にGoogle Cloud CLIコマンドが実行できるよう承認しておく必要があります。

upload.sh
#!/bin/bash

while true
do
    sleep 1
    record="$(curl -q http://127.0.0.1:13579/v1/files 2>/dev/null)"
    file_id=$(echo "${record}" | jq -r .[0].file_id)
    file_path=$(echo "${record}" | jq -r .[0].file_path)
    [[ -e ${file_path} ]] || continue
    echo "Uploading... ${file_path} -> ${BUCKET_NAME}"
    gsutil cp ${file_path} gs://${BUCKET_NAME} && curl -q -X PUT -H 'Content-Type: application/json' -d '{"status":"completed"}' http://127.0.0.1:13579/v1/files/${file_id}
done

アップロード用コンテナは、Google Cloud公式のイメージをベースにしています。

Dockerfile
FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:411.0.0
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update \
    && apt-get install -y jq \
    && apt-get clean -y
COPY upload.sh /root/upload.sh
CMD [ "bash", "/root/upload.sh" ]

docker-compose upすると、以下のようにCloud Storageのバケットにファイルがアップロードされます。

image.png

まとめ

CE50-10Aのデータ入力機能・データ管理機能を用いて、監視カメラが取得した動画をGCPのCloud Storageにアップロードする手順を紹介しました。

CE50-10Aについての詳しい情報は以下のサイトをご覧ください。
https://www.hitachi.co.jp/products/it/control_sys/platform/cs_edge/index.html

免責・商標類

  • 本記事に記載した手順は、その動作や結果を保証するものではありません。
  • 製品の改良により、予告なく記載されている仕様が変更になる場合があります。
  • 本記事に記載の会社名、製品名などは、それぞれの会社の商標もしくは登録商標です。
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?