1.1.6.4. 動作確認をする(実行コード例)¶
本項では、「構成D: Wasabiオブジェクトストレージ・カメラセンサー利用」における動作確認方法・実行コード例について記載しています。
なお、本書中の設定値の「< >」の表記については、ご利用の環境により各自入力いただく箇所となります("<"から">"までを設定値に置き換えてください)。
データ転送テストをする¶
Raspberry Piにてデータ転送をする¶
あらかじめ、転送したい画像ファイルをRaspberry Pi内に保存しておきます。
Raspberry Piのターミナルを開きます。
以下のコマンドを実行します。
$ curl -X PUT --data-binary '@<画像ファイルのパス>' an1.icgw.ntt.com:8081/<Wasabiのバケット内の保存先パス>.jpg --header 'Content-Type: image/jpg'
レスポンスステータスが「200 OK」であることを確認します。
Wasabiオブジェクトストレージにてデータの受信確認をする¶
以下のサイトにアクセスし、Wasabiオブジェクトストレージ(以下Wasabi)にログインします。
画面左のメニューの「データアクセス」内、「バケット」をクリックします。
画像ファイルを転送したバケットを開き、指定したパスを開きます。
画像ファイルが保存されていることを確認します。
実行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.")