miniskill

文書の過去の版を表示しています。


小技集

手持ちの動画をRTSPで再生してSCORER Edgeで1カメラとして受信することで、開発・テストがスムーズにいくケースが多いため、SDK上でも利用可能なスクリプトを用意しました
filestream.zip
exec.shのサンプルコードを改変し、配信対象の動画ファイルパス、配信ポートを設定して実行します。

【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に接続する時に表示される)

imshowなどXwindowへの表示を含むようなコードを実行するとWindowsマシン上に別ウィンドウで表示される。

SCORER Cloudにアップロードされた動画や解析結果はSCORER Cloud Export Serviceを利用することでユーザーが管理しているAWS S3にデータを自動的にプッシュすることが可能です。
元動画や解析結果からさらに追加で分析したい場合、SCORER Edge SDKを使えば手軽に始めることができます。

SCORER Cloud Export Serviceを設定しましょう
https://blog.futurestandard.jp/entry/2018/08/20/192446
で自分で契約した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)

(執筆中)

  • miniskill.1644125294.txt.gz
  • 最終更新: 2022/02/06 14:28
  • by satoshi