以前から開発を進めているピープルカウンタ[1]で, 人物の検出にYOLOv3[2]を試してみたいと思い, Jetson Nanoを購入した.
まずは, Jetson NanoでIntel RealSense D415を繋いで, 開発環境を整えるところから.
関連記事:
・Jetson NanoでIntel RealSenseを試してみる(1)
・Jetson NanoでIntel RealSenseを試してみる(2)
・Jetson NanoでIntel RealSenseを試してみる(3)
・Jetson NanoでIntel RealSenseを試してみる(4)
1. Jetson Nanoセットアップ
準備したもの.
新規購入品:
・NVIDIA Jetson Nano
・microSDXC 64GB SanDisk Extreme UHS-1 U3 V30 4K Ultra HD A2対応
・ACアダプタ 5V4A
・アクリルケース
保有品:
・モニタ(IODATA GigaCrysta EX-LDGCQ241DB, LCD-DTV223XBE)
・キーボード/マウス
・HDMIケーブル/Display Portケーブル
・LANケーブル
等
Jetson Nanoのセットアップについては, 公式サイト[3]を始め, 多くの記事[4][5]があるのでそちらを参照ください.
developer.nvidia.com
簡単にセットアップできると思ったのだが, Jetson Nanoが起動しない(?)のか, モニタ画面に「入力信号なし」と表示される.
SDカードが問題かと, 他のSDカードで試すも症状同じ.
いろいろと試し悩んだが, どうもDisplay PortケーブルでEX-LDGCQ241DBに繋いでいたのが原因のようで, HDMIで繋ぐとnVIDIAのロゴ画面が表示され一応Ubuntuが起動したが , 画面表示がおかしい.
結局, LCD-DTV223XBEにHDMI接続すると, 問題なく動作(Ubuntu起動&表示)した.
Jetson NanoとEX-LDGCQ241DBの相性の問題かとも思ったが, どうも2560x1440の解像度がダメのようだ!!
Ubuntuの「System Configuration」を行い, ログインするとこんな感じ.
2. Intel RealSense SDK 2.0インストール
Jetson NanoからIntel RealSense D415を使用したいので, Intel RealSense SDK 2.0[6]をインストールする.
インストール方法はJetsonHacks[7]を参照した.
www.jetsonhacks.com
(1) swapファイル
$ git clone https://github.com/jetsonhacksnano/installSwapfile $ cd installSwapfile $ ./installSapfile.sh
(2) librealsense
ビルド時にPythonからも利用可能なように, コンパイルオプションが設定されていることを確認.
$ git clone https://github.com/jetsonhacksnano/installLibrealsense $ cd installLibrealsense $ ./installLibrealsense.sh
さらに, カーネルにpatchをあてる場合には, 以下を実行する.
D435iを使用する場合は必須のようだ.
カーネルのビルドが始まるが, ビルドに1時間以上かかった.
$ ./patchUbuntu.sh
新しいTerminalを起動して, python3からpyrealsense2のimportを試みたところ, 問題はなさそうだ.
$ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pyrealsense2 >>>
3. OpenCVセットアップ
OpenCVは'3.3.1'がデフォルトでインストールされているが, python3からはimportできなかった.
$ python Python 2.7.15+ (default, Nov 27 2018, 23:36:35) [GCC 7.3.0] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.3.1' >>>
$ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 ImportError: numpy.core.multiarray failed to import Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: numpy.core.multiarray failed to import >>>
Numpyのバージョンが古いようなので, アップデートする.
$ sudo apt install python3-pip (省略) $ pip3 install numpy --upgrade Collecting numpy Downloading https://files.pythonhosted.org/packages/da/32/1b8f2bb5fb50e4db68543eb85ce37b9fa6660cd05b58bddfafafa7ed62da/numpy-1.17.0.zip (6.5MB) 100% |████████████████████████████████| 6.5MB 78kB/s Building wheels for collected packages: numpy Running setup.py bdist_wheel for numpy ... | done Stored in directory: /home/aska/.cache/pip/wheels/cc/99/ab/d71e4d18bd33901983b7caf3e1ab75ad0c9a6d6f55b2b7939c Successfully built numpy Installing collected packages: numpy Successfully installed numpy-1.17.0 $ python3 Python 3.6.8 (default, Jan 14 2019, 11:02:34) [GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import cv2 >>> cv2.__version__ '3.3.1' >>>
4. D415動作確認
以前作成していたプログラムで, 動作確認.
############################################# ## D415 Depth画像の表示 ############################################# import pyrealsense2 as rs import numpy as np import cv2 TARGET_DISTANCE = 2.0 # meter WIDTH = 640 HEIGHT = 480 FPS = 30 # Configure depth and color streams pipeline = rs.pipeline() config = rs.config() config.enable_stream(rs.stream.depth, WIDTH, HEIGHT, rs.format.z16, FPS) config.enable_stream(rs.stream.color, WIDTH, HEIGHT, rs.format.bgr8, FPS) # ストリーミング開始 profile = pipeline.start(config) # Depthスケール取得 # 距離[m] = depth * depth_scale depth_sensor = profile.get_device().first_depth_sensor() depth_scale = depth_sensor.get_depth_scale() # 対象範囲の閾値 distance_max = TARGET_DISTANCE/depth_scale print('Depth Scale = {} -> {}'.format(depth_scale, distance_max)) try: while True: # フレーム待ち(Depth & Color) frames = pipeline.wait_for_frames() depth_frame = frames.get_depth_frame() color_frame = frames.get_color_frame() if not depth_frame or not color_frame: continue color_image = np.asanyarray(color_frame.get_data()) # Depth画像前処理(2m以内を画像化) depth_image = np.asanyarray(depth_frame.get_data()) depth_image = (depth_image < distance_max) * depth_image depth_graymap = depth_image * 255. / distance_max depth_graymap = depth_graymap.reshape((HEIGHT, WIDTH)).astype(np.uint8) depth_colormap = cv2.cvtColor(depth_graymap, cv2.COLOR_GRAY2BGR) # 入力画像表示 images = np.hstack((color_image, depth_colormap)) cv2.namedWindow('RealSense', cv2.WINDOW_AUTOSIZE) cv2.imshow('RealSense', images) if cv2.waitKey(1) & 0xff == 27: break finally: # ストリーミング停止 pipeline.stop() cv2.destroyAllWindows()
一応, Jetson Nano上で, D415動いていそうだ.
あまりJetson Nanoさわる時間取れなかったこともあるが, D415を動かすのに思った以上に時間がかかってしまった.
次は, Jetson Nano上でYOLOv3を動かしてみよう!!
----
参照URL:
[1] ピープルカウンタを考えてみる(1) ~ (5)
[2] YOLO: Real-Time Object Detection
[3] https://developer.nvidia.com/embedded/learn/get-started-jetson-nano-devkit=Getting Started With Jetson Nano Developer Kit | NVIDIA Developer
[4] 小型 AI コンピュータ NVIDIA Jetson Nano 開発者キットのセットアップ
[5] Jetson Nanoをセットアップしてディープラーニングで画像認識を試してみた
[6] Intel RealSense SDK 2.0 | Intel Software
[7] Jetson Nano - RealSense Depth Camera - Jetson Hacks
NVIDIA Jetson Nano Developer Kit - 強力 AI コンピュータ 開発者キット
|
GeeekPiクリアアクリルケースキット、冷却ファン付きNVIDIA Jetson Nano開発者キット小型AI強力なコンピュータ
|
Geekworm Jetson Nano 用2.5インチ SATA SSD/HDD ストレージ拡張ボードT300 V1.0 、NVIDIA Jetson Nano開発キットに適用
|