アフィリエイト広告を利用しています

広告

この広告は30日以上更新がないブログに表示されております。
新規記事の投稿を行うことで、非表示にすることが可能です。
posted by fanblog

Jetson Nano - その5: Homebridge-camera-ffmpegを動かす

とりあえず、いつものごとくHomebrigdeを入れてカメラを動かします。

○Jetson Nano用のFFMPEGをインストール
Jetson Nano用にコンパイルして、FFMPEG上でNVENC、NVDECというHWエンコーダを使えるようにします。

こちらのサイトを参考にビルドしてインストールしてください。


○Nodeのインストール
ここのHomebridgeのサイトに書いてある通りにインストールします。

ちなみに今のイメージでは、8.10.0がプリインストールされている筈です。

コマンドは以下の通りです。

# setup repo
curl -sL https://deb.nodesource.com/setup_14.x | sudo bash -

# install Node.js
sudo apt-get install -y nodejs gcc g++ make python net-tools



何事も問題なければ、以下のバージョンが表示されると思います。

# Check installed version
node -v
v14.15.4

npm -v
6.14.10



○Homebridgeのインストール

1) Homebridgeのインストール
私はUIを使っていないので、本体は以下の一行で終わりです。

sudo npm install -g --unsafe-perm homebridge



2) Homebridge-camera-ffmpegのインストール
ここのサイトに書いてある通りに以下のコマンドで実行します。

sudo npm install -g homebridge-camera-ffmpeg --unsafe-perm



3) config.jsonの編集
まず、何もせずに以下のコマンドでhomebridgeを実行します。

homebridge


すると、.homebridgeの下にconfig.jsonが見つかりませんという感じのメッセージが表示されると思います。
一旦、Control-Cか何かで実行したプログラムを止めます。

ここでサンプルのconfig.jsonをコピーしてきます。

cp /usr/lib/node_modules/homebridge/config-sample.json ~/.homebridge/config.json


コピーしたconfig.jsonをエディタで開いて、camera-ffmpegを追加します。
私はconfig.jsonはこんな感じで設定しています。

(1) 入力ソースを前回設定したrtspサーバーにしています。
"source": "-i rtsp://localhost:8554/test",

(2) Jetson Nano用のFFMPEGを使うように以下のように設定しています。
"videoProcessor": "/usr/local/bin/ffmpeg", <= Jetson Nano用のFFMPEG
"vcodec": "h264_nvmpi", <= NVENCを使うように設定


ちなみに、NVDECを使おうとすると動作しなくなります。
config.jsonを以下のように変更するとDecoderとしてNVDECが呼ばれるのですが・・・上手く動作しません。

"source": "-codec h264_nvmpi -i rtsp://localhost:8554/test",





○実行

1) RTSPサーバーの立ち上げ
以下のコマンドで720P@30FrameでRTSPサーバーを立ち上げます。

./test-launch "nvarguscamerasrc ! video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! omxh264enc ! queue ! rtph264pay name=pay0 pt=96"


ちなみに、画質をいじりたい場合は、こんな感じでnvarguscamerasrcにパラメータを渡します。
NVIDIAのフォーラムのここに書いてありました。

./test-launch "nvarguscamerasrc gainrange='8 8' exposuretimerange='5000000 5000000' ! video/x-raw(memory:NVMM), width=1280, height=720, framerate=30/1 ! omxh264enc ! queue ! rtph264pay name=pay0 pt=96"


2) Homebridgeの実行

以下のコマンドを実行すると、QRコードが表示されると思いますので、iPhoneでHomeKitにアクセサリを登録します。
homebridge



3) デモ

あとは、登録されたビデオを開くとこんな感じでカメラの画像がiPhone(iPad)でみれると思います。

(Jetson側で)Encode=>Decode=>Encode=> (iPhone/iPad側で)Decodeをやっている割にはLatency(=0.5秒ぐらい)も悪くないように思えます。




ちなみに、以下のようにjtopでNVENCが動いていることがわかります。

Screen Shot 2021-02-08 at 23.10.13.png



Jetson Nano - その4: RTSPサーバーを立ち上げ

カメラ画像をRTSP経由で、他の端末でも受けれるようにします。。

Gstreamerのテストコードを立ち上げるだけなのですが・・。

こちらのNVIDIAフォーラムサイトに記載があったのでその通りにするだけなのですが・・。

ライブラリのインストール。

sudo apt-get install libgstrtspserver-1.0 libgstreamer1.0-dev


ダウンロードしてテストコードをビルド。

wget https://gstreamer.freedesktop.org/src/gst-rtsp/gst-rtsp-server-1.18.3.tar.xz

tar -xvf gst-rtsp-server-1.18.3.tar.xz 

cd gst-rtsp-server-1.18.3

cd examples

gcc test-launch.c -o test-launch $(pkg-config --cflags --libs gstreamer-1.0 gstreamer-rtsp-server-1.0)


サーバーの立ち上げ

./test-launch "nvarguscamerasrc ! video/x-raw(memory:NVMM), format=NV12, width=1920, height=1080, framerate=30/1 ! nvvidconv ! video/x-raw, width=640, height=480, format=NV12, framerate=30/1 ! omxh265enc ! rtph265pay name=pay0 pt=96 config-interval=1"



母艦Macから以下のコマンドで、VLCでストリームを受けます。

open -a vlc rtsp://IPアドレス:8554/test


こんな感じ。

Screen Shot 2021-02-08 at 0.14.36.png


Jetson Nano - その3: OpenCVをCUDA対応にする

OpenCVを4.5のCUDA対応版にします。

最新のイメージでも、4.1のCUDA非対応版がプリインストールされているので、一新したいと思います。

jtop


上記のコマンドを打って、6 (INFO)でOpenCVのバージョンが確認できます。
ここで、compiled CUDA: NOの場合は、CUDA対応のOpenCVをインストールします。


Screen Shot 2021-02-07 at 22.58.54.png


ビルド・インストールの方法は、こちらのサイトに丁寧に記載されているので、この通りにやればできます。

ただし、ビルドに2時間ぐらいかかるので、お気をつけください。

以上




Jetson Nano - その2: dlibを使用して顔認識

今回、dlibを使用して顔認識のサンプルコードを動かします。

基本の手順はここのサイトに書かれているのですが、記載されているdlibのバージョンが若干古く、今の最新ではバグ修正が 入っており、手順が若干異なります。

1) 必要なツール関係のインストール

sudo apt-get update

sudo apt-get install python3-pip cmake libopenblas-dev liblapack-dev libjpeg-dev

pip3 install numpy



2) dlibのインストール
19.21のインストールはこちらのNVIDIAのForumに記載があります。
wget http://dlib.net/files/dlib-19.21.tar.bz2
tar jxvf dlib-19.21.tar.bz2
cd dlib-19.21/
mkdir build
cd build/
cmake ..
cmake --build .
cd ../
sudo python3 setup.py install
sudo pip3 install face_recognition


3) doorcam.pyのインストール
wget -O doorcam.py tiny.cc/doorcam


4) 実行
python3 doorcam.py


こんな感じになります。
Raspi Camera V2が接続されていてJetson Nanoであれば勝手に動作するようになっています。

Screen Shot 2021-02-07 at 22.42.40.png

Jetson Nano - その1: 準備 (Remote VNC Access)

一年以上前に購入したJetson Nanoを最近触るようになったので、自分の記録メモとして書いていこうかと思います。
Raspi Camera v2のカメラを使って、色々できそうなので、ドアカメラを作ろうと考えています。

IMG_5755.png


○準備するもの

1) Jetson本体
(私のJetsonは旧モデルのA01ですが、今、購入するならB01を購入すべきかと思います。)

NVIDIA Jetson Nano 開発者キット B01

新品価格
¥12,075から
(2021/2/6 23:59時点)




2) 電源アダプタ

【PSE認証品】 ACアダプター 20W/5V/4A DCプラグ外径:5.5mmΦ×内径:2.1mmΦ×長さ:9.5mm AD-A050P400

新品価格
¥1,550から
(2021/2/7 00:08時点)




3) カメラ (Raspi Camera v2)

Raspberry Pi Camera Module V2 ラズベリーパイ カメラ ソニーIMX219PQ CMOS画像センサ 8メガピクセル Raspberry Pi 4、3B 、3B、Zero/Zero W、NVIDIA Jetson NanoやGoogle Coral 開発ボードなどに対応可能

新品価格
¥3,280から
(2021/2/7 00:11時点)




4) SDカード

サンディスク microSD 128GB UHS-I Class10 読取り最大100MB/s 【Nintendo Switch メーカー動作確認済】 SanDisk Ultra SDSQUAR-128G-EPK エコパッケージ

新品価格
¥2,280から
(2021/2/7 00:14時点)




5) ケース
私の持っているケースはカメラアームが付いているのですが、今は販売していないようです。

NVIDIA Jetson Nanoケース、冷却ファン付きNVIDIA Jetson Nano開発者キット用アクリルケース(3.0-5.8V)シェルエンクロージャークーラー

新品価格
¥1,397から
(2021/2/7 00:19時点)





○イメージのダウンロードと起動
1) ここから最新のイメージをダウンロードします。
私が使用しているのは、現在最新のイメージです。

# R32 (release), REVISION: 5.0, GCID: 25531747, BOARD: t210ref, EABI: aarch64, DATE: Fri Jan 15 22:55:35 UTC 2021



2) SDカードに焼き込む
私はMacが母艦なので、ここに記載されているように Etcherというアプリで焼き込みます。

3) Jetsonを起動
JetsonにUSBマウス、USBキーボード、ディスプレイ、LANケーブルを接続して電源ONにします。
あとは、メニューに従って設定していくだけです。
イメージのバージョンによって、設定する内容が色々変わってきています。
今回のイメージでは、パワーモードを設定するところがあり、面倒なので"MAXN"にしておきます。

○基本設定
ここのサイトに詳しく書かれているので、それに沿っていけば良いかと思います。

1) jtopのインストール
どのHWブロックがON/OFFになっているのか一目瞭然なので、入れておきましょう。
sudo pip3 install jetson-stats
sudo jtop


2) swapファイルの拡張
私はマニュアルで以下のように設定していますが、ここのスクリプトを使った方が便利そうです。

Command: sudo fallocate -l 6G /var/swapfile
sudo chmod 600 /var/swapfile
sudo mkswap /var/swapfile
sudo swapon /var/swapfile
sudo bash -c 'echo "/var/swapfile swap swap defaults 0 0" >> /etc/fstab'


3) CUDAのPATH設定


~/.bashrcをエディタで開いて以下の2行を追加。
export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}

source ~/.bashrc

nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Wed_Oct_23_21:14:42_PDT_2019
Cuda compilation tools, release 10.2, V10.2.89


上記、1)、2)でSystem rebootが必要なので、このあたりRebootを入れおくと良いかもしれません。

○Remote VNCの設定
一応あったら便利なのが、Remote VNC経由で接続することです。
SSHアクセスできるので必須ではないのですが、画像を扱う時に便利かなということで設定しておきます。

Ubuntuには標準でDesktop Sharing(デスクトップ共有) 機能が標準で付いていて、VNC経由でアクセスできる筈なのですが、Jetson NanoのL4Tでこの設定を行うと(古いGnomeとの互換性の問題で)クラッシュします。


ここのサイトに設定手順が詳しく書いているので、この通りに設定します。


私の場合、母艦がMacなので、以下の二通りの方法で問題なくアクセスできました。

1) FinderからGo -> Connect to Server -> "VNC:192.x.x.x"
2) VNC Viewer


しばらく、この手の作業を書いて行こうかと思います。


<< 前へ    
検索
検索語句
記事ランキング
最新記事
×

この広告は30日以上新しい記事の更新がないブログに表示されております。