Python

今までJetBrainsのPyCharm Community EditionでPython開発を行っていたが、jupyter notebookを使う必要性がでてきた。

jupyterのインストールおよび使い方は以下を参考にしてみた。
Jupyter NotebookをWindowsのAnaconda環境にインストールする方法

その他

Webアプリの自動テスト支援ツールとして、有名なものに Selenium があるらしいが、他にTestablishなるものがあるようだ。

Testablish を使って自動テスト

製品なので今の所購入する予定はないが、検討する余地はあり。

JETSON NANO, 組込

今日は朝から昨日(5日)のドカ雪のおかげで、雪かきで疲れました。(笑)
かなり腰にきています。
1日で40センチ以上積もりました。

現在もまだちらほら雪が降っています。

という事で多少疲れてはいますが、
今回は、NVIDIAが提供しているDeepStream SDKの機能を試してみました。

1.DeepStream SDK とは? (説明からの抜粋です)

 (1)カメラ、センサー、IoTゲートウェイからのデータをリアルタイムで分析
  NVIDIAのDeepStream SDKは、マルチセンサー処理だけでなく、AIベースのビデオおよび画像を理解するための完全なストリーミング分析ツールキットを提供します。
  DeepStreamは、ピクセルとセンサーデータを実用的な洞察に変換するためのエンドツーエンドのサービスとソリューションを構築するプラットフォームであるNVIDIA Metropolisの不可欠な部分です。

 (2)複雑なストリーム処理パイプラインをシームレスに開発
  DeepStreamを使用すると、開発者はエッジツークラウドのストリーミング分析アプリケーションを構築できます。
  SDKは、オープンソースのGStreamerを使用して、低レイテンシのストリーミングフレームワークで高いスループットを実現します。
  ランタイムシステムはパイプライン化されており、ディープラーニング機能に加えて、ストリーミングアプリケーションでの画像およびセンサー処理と融合アルゴリズムを可能にします。

2.DeepStream SDKのセットアップ
 
 方法はいくつかあるようですが、ホストPCからSDK Managerを通してセットアップするのが楽ちんのようです。
 これについては以前の「【NVIDIA SDK Manager編】」で既に実施済です。

3.サンプルの動作確認

 sampleの構成ファイルは /opt/nvidia/deepstream/deepstream-4.0/samples ディレクトリにあります

 $ cd /opt/nvidia/deepstream/deepstream-4.0/samples/

 次のコマンドを入力すると 2*4のタイル形式でサンプルmp4に対して約30FPSの物体検知の動画が表示されます。

 $ deepstream-app -c ./configs/deepstream-app/source8_1080p_dec_infer-resnet_tracker_tiled_display_fp16_nano.txt

 ※動画は割愛。

4.カメラ映像をリアルタイム検出してRTSP配信&スマフォ(Android)で見る

 マニュアルや他のconfigを参考にお試し用にのconfigを編集しました。
 https://docs.nvidia.com/metropolis/deepstream/4.0/dev-guide/index.html#page/DeepStream_Development_Guide%2Fdeepstream_app_config.3.2.html

 下記コマンドでお試しを起動。
 $ deepstream-app -c ./configs/deepstream-app/my_test.txt

 スマフォ(Android)のVLCアプリを起動し、ネットワークストリームにて下記にアクセスします。
 ※VLCアプリは別途インストール要。

 rtsp://192.168.0.18:8554/ds-test

 おおっ! Jetson Nanoに接続されているカメラ映像がスマフォで見る事ができました。
 物体検出も見れているようです。

 ※動画は割愛。

5.YOLOを試してみる。

 YOLO(You Only Look Once)はdarknet(C言語で書かれたディープラーニングライブラリ)で開発された画像認識ディープラーニングネットワークで、1回ネットワークを通して、ちょっと後処理しただけで複数の対象物のクラス(種別)と位置を検出するという優れものというものです。
 これについても試してみました。

 (1)YOLOの準備

   $ cd /opt/nvidia/deepstream/deepstream-4.0/sources/objectDetector_Yolo

   以下のコマンドで、YOLOのcfgファイル(ネットワーク構造等を定義しているもの)、weight(ネットワークの係数)を次のコマンド(スクリプト)で一括ダウンロードします。

   $ ./prebuild.sh

   下記コマンドで、Jetson NanoにインストールされているCUDAのバージョンを環境変数として設定します。

   $ nvcc -V

   表示されたバージョンを確認して次の通り設定します。間違うとコンパイルでエラーになります。

$ export CUDA_VER=10.0

   YOLOのPluginをコンパイルします。

$ make -C nvdsinfer_custom_impl_Yolo

 (2)YOLOv3-tinyのサンプルを動かす

   次のコマンドでサンプルが動きます。動き始めるまでは少し時間がかかります。

$ deepstream-app -c deepstream_app_config_yoloV3_tiny.txt

 (3)USB Cameraで動かす

   $ cp deepstream_app_config_yoloV3_tiny.txt deepstream_app_config_yoloV3_tiny_usb_camera.txt

   deepstream_app_config_yoloV3_tiny_usb_camera.txtの[source0]を書き換えます。

    [source0]
   enable=1
   #Type – 1=CameraV4L2 2=URI 3=MultiURI
   type=1
   camera-width=640
   camera-height=480
   camera-fps-n=30
   camera-fps-d=1
   camera-v4l2-dev-node=0
   #uri=file://../../samples/streams/sample_1080p_h264.mp4
   #num-sources=1
   #gpu-id=0
   # (0): memtype_device – Memory type Device
   # (1): memtype_pinned – Memory type Host Pinned
   # (2): memtype_unified – Memory type Unified
   #cudadec-memtype=0

   USB CameraでYOLOv3-tinyを動かします。

   $ deepstream-app -c deepstream_app_config_yoloV3_tiny_usb_camera.txt

   Jetson Nanoに接続されているカメラ映像でYOLOが動作しました。

   ※動画は割愛。

DeepStream技術は様々なニーズがあるようです。
今後も勉強していきたいと思います。

JETSON NANO, 組込

今回はJetson Nanoでリアルタイム画像類推についてです。

1.jetson-inferenceの構築
Jetson NanoにはGitHubでjetson-inferenceというサンプルがあるので、これを試してみました。
以下の手順で、構築しました。

$ git clone https://github.com/dusty-nv/jetson-inference
$ cd jetson-inference
$ git submodule update –init
$ mkdir build
$ cd build
$ cmake ../
$ make
$ sudo make install
$ sudo reboot

2.サンプルを試す
$ cd jetson-inference/build/aarch64/bin

・ペットボトルが検出されるか?
$ ./detectnet-camera –camera=/dev/video0 –network=googlenet coco-bottle

以下は、結果画像です。77%の割合で検出されました。

detectnet-camera

・ペットボトルがどのように認識されるか?
$ ./imagenet-camera –camera=/dev/video0 –network=googlenet

以下は、結果画像です。23,25%の割合で薬箱もしくは常備薬戸棚として認識されました。(笑)

imagenet-camera

面白いですね~。

3.自分作成済のものを試す
それでは、昔PC上で私がちょっと作成してみたもの(一部)もJetson Nanoに落として、試してみます。
※python3で開発したもの。

・物体認識
以下が結果画像です。

物体認識

丸で色のついた部分で物体認識されているようです。

※本当は動画で物体が動く軌跡が描かれるんですが、動画サイズが重いので割愛。

・顔認識
以下が結果画像です。

顔認証

赤の四角で顔が囲まれていて認識されています。

必要なpython3のライブラリをインストールする必要がありましたが、ちゃんと動作しました。

次回はTensorflowをインストールして何か作成してみようと思います。

※最終的にはJetBotを試してみたいです。

JETSON NANO, 組込

1.ホストPCの構築
NVIDIA SDK Managerを使用するにはホストPCを構築する必要があります。

VMwareにUbuntu_18.04.4 LTSを構築しました。
また下記URLを参考に日本語化を実施。
https://www.server-world.info/query?os=Ubuntu_18.04&p=japanese

タイムゾーンも変更し、時間を再設定しました。
# timedatectl
# timedatectl list-timezones
# retimedatectl set-timezone Asia/Tokyo

2.NVIDIA SDK Managerのセットアップ
下記を参考にNVIDIA SDK Managerをインストールし、開発環境をセットアップしてみました。

https://developer.nvidia.com/nvidia-sdk-manager
https://docs.nvidia.com/sdk-manager/install-with-sdkm-jetson/index.html

以下は、作業した画面イメージです。

SDK-Manager-step1

SDK-Manager-step2

SDK-Manager-step3

SDK-Manager-step4

3.カメラの接続

現在チャットなどで使用しているUSB-Webカメラが使えないかと思い、試しにJETSON NANOに接続して確認してみた所、何と認識してくれました。(笑)

・BUFFALO BSWHD06Mシリーズ

USB-Webカメラ接続

4.リモートデスクトップ接続の設定

JETSON NANO本体にディスプレイやキーボード・マウスを繋げて、というのはスペース問題もあるので、Windows PCからリモートデスクトップ接続できる環境を構築しました。

以下の手順で、とりあえずはできました。

# sudo apt-get update
# sudo apt-get -y upgrade
# sudo apt-get -y install ubuntu-desktop xrdp
# sudo systemctl enable xrdp
# sudo systemctl start xrdp
# sudo reboot

※でも動作がちょっと遅いです・・・VNCの方がいいのかな?

次回は、画像認識にチャレンジです。

JETSON NANO, 組込

年明けの1月15日~16日、「JETSON NANO」を1台手に入れたので、早速遊んでみる事にしました。
まずは、セットアップから起動までを試してみました。

1.事前準備

①JETSON NANO:
手に入れたもの

②microSDカード:
microSDXC 128GB SanDisk サンディスク
Extreme UHS-1 U3 V30 4K Ultra HD A2対応
SDアダプター付 [並行輸入品]

51dSMyaGedL._SY90_

③ACアダプター:
SUCCUL ACアダプター 5V 4A 大手メーカーOEM社製品 センタープラス スイッチング式
最大出力20W 出力プラグ外径5.5mm(内径2.1mm)PSE取得品

41FqZ-NCSEL._SY90_

④ジャンパーピン:
Bullet ジャンパーピン(小) 取手付き JP04
※ACアダプターを使用する場合、基板のJ68にジャンパーピンを挿してあげる必要があります。

41REeIwtjoL._SX90_

⑤USB Wifiドングル:
Buffalo WLI-UC-G301N
※昔Wifiハッキングで使用していたもの(笑)
※今後NVIDIA SDK Mangerを使用する事を考慮しSSH接続させる為、必要としました。
※microSDにインストールしたアーキテクチャはarm64で、SDK Managerはamd64で動作する為。

②~⑤は自分で手配・購入しました。

以下は、今回の接続イメージです。

jetson-nano-接続状態

2.セットアップ

下記URLを参考にmicroSDへのOSイメージの書き込みを実施しました。

https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit#write

3.起動

以下は、OSが起動されログインした直後の画面です。

jetson-nano-ログイン直後

※初回時OSが起動された際にはちょっとした設定手順があります。

取りあえずは成功!といった所でしょうか。

4.Wifi接続の設定

起動後にいちいちコマンド実行してWifi接続するのは面倒ですので、OS起動時に自動接続させるように起動スクリプトを作成しました。

/etc/rc.localファイルにその内容を記載し作成しました。

以下は、その内容です。

————————————————————————–
#!/bin/sh -e

nmcli device wifi list
nmcli device wifi connect <ここは接続先のSSID> password <ここはパスワード>

exit 0
—————————————————————————

セットアップしたUbuntu 18.04.3 LTSでは、rc-local.serviceが既に自動起動されるように設定されているので、/etc/rc.localファイルを作成するだけでOKでした。

以下コマンドでOSを再起動し、Wifi自動接続される事を確認しました。

# shutdown -r now

5.SSH接続の設定

セットアップしたUbuntu 18.04.3 LTSでは、SSHが既に自動起動されるように設定されているので、特に何もしなくてもOKでした。

ホストPCからJETSON NANOのIPアドレスへSSH接続し、無事接続される事を確認しました。

次回はホストPCにVMwareでUtbuntuをインストール、そこにVIDIA SDK Managerをインストールし、JETSON NANOとの開発連携をしてみようと思います。

PAGE TOP