目次
文書の過去の版を表示しています。
小技集
動画配信・自己受信
手持ちの動画をRTSPで再生してSCORER Edgeで1カメラとして受信することで、開発・テストがスムーズにいくケースが多いため、SDK上でも利用可能なスクリプトを用意しました
filestream.zip
exec.shのサンプルコードを改変し、配信対象の動画ファイルパス、配信ポートを設定して実行します。
画像解析結果をXwindow画面で確認(Windowsの場合)
【Windowsでの作業】
下記からXserverツールとしてvcxsrvをダウンロードしてインストールする
https://sourceforge.net/projects/vcxsrv/
(参考)
https://atmarkit.itmedia.co.jp/ait/articles/1812/06/news040.html
起動する場合にDisable access controlにチェックを入れる(デフォルトではOFFになっている)

【SCORER SDKでの作業】
〇CPU端末の場合(GPU端末は不要)
Xserverがインストールされておらず画面を転送できないため
apt -y install libxkbcommon-x11-0 apt -y install xserver-xorg
を実行する
〇GPU・CPU端末共通
Terminalを開いて
# export DISPLAY=(windows端末のIP):0.0
を実行する。
VPNを経由している場合はVPNでのwindows端末のIPを入れる(通常であれば192.168.30.XでSoftetherでVPNに接続する時に表示される)
SCORER Cloud Export Serviceと連携した事後分析
SCORER Cloudにアップロードされた動画や解析結果はSCORER Cloud Export Serviceを利用することでユーザーが管理しているAWS S3にデータを自動的にプッシュすることが可能です。
元動画や解析結果からさらに追加で分析したい場合、SCORER Edge SDKを使えば手軽に始めることができます。
SCORER Cloud Export Serviceで自分のAWS S3へデータ流し込み設定を行う。
SCORER Cloud Export Serviceを設定しましょう
https://blog.futurestandard.jp/entry/2018/08/20/192446
で自分で契約したAWS S3にデータを流し込む設定ができます。
SCORER Edge SDKからAWS S3への接続を設定する
(執筆中)
AWS CLIで接続先設定を行い、AWS操作をPythonで行えるSDK「boto3」をインストールします
Intel NUCの場合はLinux x86 (64-bit)
Raspberry piの場合はLinux ARMのタブのコマンドを実行しましょう
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html
インストールが完了したら
aws configure
を実行し
AWS Access Key ID [None]: 前項で設定したID
AWS Secret Access Key [None]: 前項で設定したkey
Default region name [None]: ap-northeast-1
Default output format [None]: JSON
で設定しましょう
次にこの認証情報を用いてPythonでAWSを操作できるSDK「boto3」をインストールします
pip install boto3
これにて準備完了です。次に下記のPythonスクリプトを実行すると指定の日付間、指定のカメラストリームのデータが受信可能になります。
スクリプトのある階層に「movielist」フォルダを作成すれば動作します。
from boto3 import Session
import boto3
import datetime
from dateutil.relativedelta import relativedelta
import tarfile
from tarfile import TarInfo
import gzip
import json
import os
import cv2
S3Bucket = 'future-standard.XXXX' #ユーザーの指定するバケット名
S3KeyPrefix = 'export/SourceData/' #SourceDataの位置までを指定 エクスポート時にexportプレフィックスを設定した時の例
device_list=['02-410645-D-1'] #デバイス名。S3 Exportの種類(デバイス名かIDか)に応じて指定
sday = datetime.date(2022, 2, 1) #対象期間開始日
eday = datetime.date(2022, 2, 2) #対象期間終了日
stime = datetime.time(7,0,0) #対象開始時間
etime = datetime.time(20,0,0) #対象終了時間
timearr=[]
tmptime = datetime.datetime.combine(datetime.date.today(), stime)
edatetime = datetime.datetime.combine(datetime.date.today(), etime)
while tmptime<=edatetime:
timearr.append(tmptime)
tmptime = tmptime + datetime.timedelta(hours=1)
print(timearr)
daynum = (eday-sday).days+1
date1=sday
date_list = []
for i in range(daynum):
date_list.append(date1.strftime('%Y-%m-%d'))
date1 = date1 + relativedelta(days=1)
print('target date')
print(date_list)
s3client = boto3.client('s3')
beginning_of_the_last_month = sday
end_of_the_last_month = eday
daynum = (end_of_the_last_month-beginning_of_the_last_month).days+1
print("from")
print(beginning_of_the_last_month)
print("to")
print(end_of_the_last_month)
date1=beginning_of_the_last_month
date_list = []
for i in range(daynum):
print(date1)
date_list.append(date1.strftime('%Y-%m-%d'))
date1 = date1 + relativedelta(days=1)
for device in device_list:
for date2 in date_list:
loopPrefix = S3KeyPrefix+device+"/"+ str(date2) +"/videos/upload_"
paginator = s3client.get_paginator('list_objects_v2')
# フィルタリング設定
operation_parameters = {
'Bucket': S3Bucket,
'Prefix': loopPrefix
}
page_iterator = paginator.paginate(**operation_parameters)
dirpath = "movielist/"+device+"/"
os.makedirs(dirpath, exist_ok=True)
for page in page_iterator:
if 'Contents' in page:
for o in page['Contents']:
key = o.get('Key')
filepath=key.split('/')
ttime = datetime.time(filepath[15:16], filepath[18:19], filepath[21:22])
if os.path.exists(dirpath+filepath[5]):
continue
print(key)
if ttime > stime and ttime < etime:
print(device+"/"+date2+"/"+filepath[5])
s3client.download_file(Bucket=S3Bucket,Filename=dirpath+filepath[5], Key=key)
SCORER APIによる一括解析
(執筆中)
