1.1.6.4. 動作確認をする(実行コード例)

本項では、「構成D: Wasabiオブジェクトストレージ・カメラセンサー利用」における動作確認方法・実行コード例について記載しています。

なお、本書中の設定値の「< >」の表記については、ご利用の環境により各自入力いただく箇所となります("<"から">"までを設定値に置き換えてください)。

データ転送テストをする

Raspberry Piにてデータ転送をする

  1. あらかじめ、転送したい画像ファイルをRaspberry Pi内に保存しておきます。

  2. Raspberry Piのターミナルを開きます。

  3. 以下のコマンドを実行します。

    $ curl -X PUT --data-binary '@<画像ファイルのパス>' an1.icgw.ntt.com:8081/<Wasabiのバケット内の保存先パス>.jpg --header 'Content-Type: image/jpg'
    
  4. レスポンスステータスが「200 OK」であることを確認します。

Wasabiオブジェクトストレージにてデータの受信確認をする

  1. 以下のサイトにアクセスし、Wasabiオブジェクトストレージ(以下Wasabi)にログインします。

  2. 画面左のメニューの「データアクセス」内、「バケット」をクリックします。

  3. 画像ファイルを転送したバケットを開き、指定したパスを開きます。

  4. 画像ファイルが保存されていることを確認します。

実行Pythonコードサンプルを確認する

画像ファイルの取得およびWasabiへのデータ転送を繰り返し(※)実行するPythonコードのサンプルを掲載します。

なお、画像ファイル名およびWasabiにおける格納先パスは、画像を撮影した日時を基に指定しています。

注釈

  • (※)実行を停止するには、「Ctrl」+「c」を入力します。

Img_Wasabi.py

import time
import datetime
import subprocess
import os

# Set Parameters
ADDR = "an1.icgw.ntt.com"

WIDTH = "640"
HEIGHT = "480"
TIMEOUT = "500"
SERVER_PATH = "<画像ファイルのパス>"

try:
    devnull = open('/dev/null', 'w')

    while True:
        # 現在時刻取得
        datetime_now = datetime.datetime.now()
        year = datetime_now.strftime('%Y')
        month = datetime_now.strftime('%m')
        day = datetime_now.strftime('%d')
        hour = datetime_now.strftime('%H')
        minute = datetime_now.strftime('%M')
        second = datetime_now.strftime('%S')
        datetime_now_jst_tc = (datetime_now.utcnow() + datetime.timedelta(hours=9)).strftime('%Y-%m-%dT%H:%M:%S')
        filename = datetime_now.strftime('%Y%m%d_%H%M%S') + ".jpg"
        wasabi_path = "wasabi/" + datetime_now.strftime('%Y-%m-%d/')

        # 画像をカメラモジュールから取得
        filepath = str(SERVER_PATH) + str(year) + str(month) + str(day) + "_" + str(hour) + str(minute) + str(second) + ".jpg"

        cmd = "libcamera-jpeg --output " + str(filepath) + " --nopreview --width " + str(WIDTH) + " --height " + str(HEIGHT) + " --timeout " + str(TIMEOUT)
        print(cmd)
        proc = subprocess.run(cmd, shell = True, stdout = devnull, stderr = devnull)

        # 画像ファイルが存在する場合
        if os.path.exists(str(filepath)):
            print("Last valid input: " + str(year) + "/" + str(month) + "/" + str(day) + " " + str(hour) + ":" + str(minute) + ":" + str(second))

            # 画像をICGW経由でWasabiへ送信
            cmd = "curl -X PUT --data-binary '@" + str(filepath) +"' " + str(ADDR) + ":8081/" + str(wasabi_path) + str(filename) + " --header 'Content-Type: image/jpg'"
            proc = subprocess.run(cmd, shell = True)

            print("\nSent an image to Wasabi!\n")

            # 画像を削除
            cmd = "rm " + str(filepath)
            proc = subprocess.run(cmd, shell = True)
            print("\nDelete image from local disk!\n")

except KeyboardInterrupt:
    print("Cleanup")
    print("Ended program by KeyboardInterrupt.")