苦節1年の試行錯誤でここまで来ました😓
このThermal Camのプロジェクトを始めてWROOM02(WiFi基板)を試行錯誤しましたが、基板自体の知識や電子機器の仕様書の読み方で2年掛かりました。
苦節1年の試行錯誤でここまで来ました😓
このThermal Camのプロジェクトを始めてWROOM02(WiFi基板)を試行錯誤しましたが、基板自体の知識や電子機器の仕様書の読み方で2年掛かりました。
何、それ?
書類の処理から押印を無くして生活を変革していく。1つの例で理解されている様で理解されていない。タイムカードを押してその日のスケジュールを処理する事ではありません。
固定観念を打ち破る必要があります。
こちらとしては費用と期間。学生側の条件を確認中。
仮に無償の場合は何かを支給する事で、より良い条件にしないと良い学生は来ないと思うので整理中。
仮に有償でも何かを支給する事も考えます。つまり時給+支給品。
それより重要な事は会社が何を目指して、学生が何が得られるかを明確化する事。
今会社にある機材リストも重量かもしれません。VIVE PRO, STEREAO LAB, 各種Jetson,
Intel RealSense Depth Camera, RTX2080, GTX1080等々で出来そうな物を想像できる学生に来て欲しいところです。
支給品はJetson NanoかNX、今回のお願いする作業でLinuxのコマンドラインが重要になるのでいつでもどこでもレベルアップ出来、社内の作業の効率化も出来る。コードや開発環境もオープンソースで対応ができる。
アカデミック価格がある場合は金額の立替等で検討する。その場合は前払いが前提なので学生を注意深く選ぶ必要があります。
要件は、Linuxマシン(Ubuntu)操作、C及Pythonの基礎知識(JAVAスクリプトでも良い)、アマゾンウェッブサービス(AWS)知識、MATLAB、
これらが出来れば弊社に来ずに高給が取れるのでこれらを一緒にレベルアップする事にする。学生なので初級でもやる気があれば化ける可能性が大きい。
ここまでの事を要求するからには作るものもそれなりのレベルにする必要がある。
面接はソラコムIoTでテスト。
①現在会社ではサーモグラフィーでAI(深層学習)だけ。一応会社の方向性と実業に関連している。
②次に目指すのはVR(バーチャルリアリティ)やAR(拡張現実)=三次元データと実際のデータを合成した世界を扱う。社内のVive Proの活用。
③ROS(ロボティックス)ここも外せませんが実業に役立てるにはかなりのレバルが必要ですが、今から進めるべき課題です。
これだけに優秀な学生がくるか?
夢のある開発目標も必要です。
例えば、社内の目標も”キュービクル現地調査をVRで実現する。”ある程度はこれで時間を掛ければ簡単なものは出来そうです。無難な感じですが、恐らく驚く様なものにはなりません。
社内の目標はそのままで、学生への目標は”オープンソースを使ってレーシングシュミレータを作る”とします。
仕事でゲームを作るの?と社内ではなるでしょうね。
現在の最新技術の根底はゲームといって過言ではありません。学生に実益を考えて目標を掲げてそれを実現する為に弊社に来てくれるはずもありません。
その為、学生への目標は壮大で夢のある事にしないと優秀な人は集まりません。
上手くいけば大阪商工会議所のAIコンテスト入賞に負けない位の結果がでると思います。
協力して良い作品が出来ればそれらの学生をクレジットしてあげれば成果物により関心を持って取り組んでもらえると思います。また弊社では無いところにいく場合は結果を役立つ様にも配慮するつもりです。
サーマルカムはiPhoneアプリを含むシステムなので機能追加が難しくよってカスタム仕様も煩雑になります。
JetsonシリーズはLinuxシステムで実行までにステップを踏む必要がありますがカスタマイズが容易です。
iPhoneの処理能力はデスクトップパソコン並なのでいろいろな機能を追加して動作する様にしました。
JetsonシリーズはXavier以外は処理能力に限りがある為、機能を絞る必要があります。
Jetsonでも録画機能が必要ですが、Jetson自体の処理をを増やさない様にラズベリーパイに
画面を入力してそちら側で録画の方法を検討中。HMDIをUSB WEBカメラのタイプかHMDIを
カメラシリアルインターフェース(CSI-2)にするか?
前者は比較的簡単に作業が出来ましたが、画質と処理スピードがいまいち。CSI-2は入力の設定をマニュアルでする必要がある。
画質や処理スピードはUSB CAMERAより早い!
冬虫電子ってなんなんでしょう?
設定はまたまた煩雑。。。
RASPIVIDコマンドにGSTREAMERも使ってとって一般的にはつかえません。
緊急追伸:こんなのありました。世界中でユーチューバーが活躍しているからか、あれば助かるものは何でもある。
HMDIから入力、パススルー出力+ハードディスク録画、ついでにWEB配信。。。。
ファイルあたりのMAXの録画時間の制限あると思いますが1TBで1080p60fps最高画質で62時間、高画質で78時間、1080p30fps標準画質で136時間、720p60fps記憶容量優先で180時間480p60fps最低画質で530時間程度になるようです。
128GBのメモリーでいいかも?
思いつくものは何でも安くある。こうなるとRaspberry Pi4は要らないな〜
全く違う製品でした。
監視カメラ用の録画機でした。
因みに近赤外線カメラの返品受け入れて貰いました。Windows7でないと動かないとか
分かりにくい仕様とか安い中華通販は結構大変です。
とりあえず作業やテストに必要な設定を一通りインストール。
NXも同じJetpack4.4のopencv4.1.1だとYOLOv3が遅いのでスクリプトのgstreamerをオフにしする。
cmakeflugsは-D WITH_GSTREAMER=ONをOFFにするコメントアウトしても
gstreamerはインストールされる。システムにエラーが出てきたので一度クリーンインストール。
https://github.com/mdegans/nano_build_opencv
7.5FPSから9.1FPSに改善。
Jeston nano・NX setting
ファイル名を英語に変更
LANG=C xdg-user-dirs-gtk-update
sudo apt-get update
sudo apt-get upgrade
エディター、画像処理ソフト、ドライブ用ソフトをインストール
sudo apt-get install nano
sudo apt-get install ffmpeg
sudo apt-get install gparted
参考用ページ
https://www.nakasha.co.jp/future/ai/vol2_yolov3nvidia_jetson_nano.html
Full Power化
sudo nvpmodel -m 0
sudo jetson_clocks
git clone https://github.com/AlexeyAB/darknet
モデルのダウンロード
Pre-Trained Modelを~/darknetにダウンロードしておきます。
YOLOv3
YOLOv3 SPP
YOLOv3 Tiny
恐らく、Jetson Nanoでカメラと共に使うならTinyモデルの方です。ダメ元でやってみる用にYOLOv3、YOLOv3-SPPも念のため落としておきましょう。
nano .bashrc
export PATH=/usr/local/cuda/bin:${PATH}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:${LD_LIBRARY_PATH}
***********************************************************
GPU=1
CUDNN=1
CUDNN_HALF=1
OPENCV=1
AVX=0
OPENMP=1
LIBSO=1
ZED_CAMERA=0
# set GPU=1 and CUDNN=1 to speedup on GPU
# set CUDNN_HALF=1 to further speedup 3 x times (Mixed-precision on Tensor Cores) GPU: Volta, Xavier, Turing and higher
# set AVX=1 and OPENMP=1 to speedup on CPU (if error occurs then set AVX=0)
DEBUG=0
ARCH= -gencode arch=compute_30,code=sm_30 \
-gencode arch=compute_35,code=sm_35 \
-gencode arch=compute_50,code=[sm_50,compute_50] \
-gencode arch=compute_52,code=[sm_52,compute_52] \
# -gencode arch=compute_61,code=[sm_61,compute_61]
OS := $(shell uname)
# Tesla V100
# ARCH= -gencode arch=compute_70,code=[sm_70,compute_70]
# GeForce RTX 2080 Ti, RTX 2080, RTX 2070, Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Tesla T4, XNOR Tensor Cores
# ARCH= -gencode arch=compute_75,code=[sm_75,compute_75]
# Jetson XAVIER
# ARCH= -gencode arch=compute_72,code=[sm_72,compute_72]
# GTX 1080, GTX 1070, GTX 1060, GTX 1050, GTX 1030, Titan Xp, Tesla P40, Tesla P4
# ARCH= -gencode arch=compute_61,code=sm_61 -gencode arch=compute_61,code=compute_61
# GP100/Tesla P100 - DGX-1
# ARCH= -gencode arch=compute_60,code=sm_60
# For Jetson TX1, Tegra X1, DRIVE CX, DRIVE PX - uncomment:
ARCH= -gencode arch=compute_53,code=[sm_53,compute_53]
# For Jetson Tx2 or Drive-PX2 uncomment:
# ARCH= -gencode arch=compute_62,code=[sm_62,compute_62]
*********************************************************
YOLOv3モデルを使って、WEBカメラで認識させてみます。
./darknet detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights
./darknet detector demo cfg/coco.data cfg/yolov3-tiny.cfg yolov3-tiny.weights -c 0
ラベリングする(アノテーション)
Yoloは上記で作ったイメージファイルの他に、これらに対応したTXTファイルが必要です。(イメージファイルのどの部分に対応するクラス画像があるかを示すテキストファイルで、イメージファイルの枚数分必要です)ここら辺が一番単調で、手作業では時間のかかる部分となります。今回ラベリングソフトはlabelimgを使いました。以下インストール方法ですが、すでにpython3をインストールしている場合は3,4行目は必要ありません。
git clone https://github.com/tzutalin/labelImg.git
sudo apt install pyqt5-dev-tools
sudo apt install python3-pip
sudo pip3 install lxml
cd labelImg
make qt5py3
python3 labelImg.py
そしてJetson NanoでexFATフォーマットのUSBメモリーが使えるように、以下コマンドで「exfat-fuse」と「exfat-utils」をインストールします。
$ sudo apt-get update
$ sudo apt-get install exfat-fuse expat-utils
続いてJetson Nanoにカードリーダーを接続し、そこにSDカードAを接続します。
さらに別のポートにUSBメモリーを接続します。
clone micro SD card
sudo dd bs=4M if=/dev/sde of=jetcard_image.img status=progress count=6250
*6250 x 4MB=25000MB
マイクロSDカードに書込み
sudo dd bs=4M if=jetcard_image.img of=/dev/sde status=progress
CUDAのサンプルコード
https://gihyo.jp/admin/serial/01/ubuntu-recipe/0563?page=4
CUDAのサンプルコードは「/usr/local/cuda-10.2/samples/」にインストールされています。そこでサンプルコードをあらかじめユーザーが読み書き可能な領域にコピーしておきます。
$ cp -a /usr/local/cuda-10.2/samples/ ~/
サンプルコードのトップディレクトリでmakeを実行すればひととおりビルドしてくれます。時間がかかるのが嫌なら,次の例のように個別にビルドしましょう。
$ cd ~/samples/1_Utilities/deviceQuery
$ make
$ ./deviceQuery
$ cd ~/samples/5_Simulations/oceanFFT/
$ make
$ ./oceanFFT
$ cd ~/samples/5_Simulations/smokeParticles/
$ make
$ ./smokeParticles
Swapの設定
https://www.jetsonhacks.com/2019/04/14/jetson-nano-use-more-memory/
git clone https://github.com/JetsonHacksNano/installSwapfile
cd installSwapfile
./installSwapfile.sh
wiwao@wiwao-desktop:~$ free -h
total used free shared buff/cache available
Mem: 3.9G 2.1G 523M 345M 1.3G 1.3G
Swap: 1.9G 24K 1.9G
wiwao@wiwao-desktop:~/installSwapfile$ ./installSwapfile.sh
Creating Swapfile at: /mnt
Swapfile Size: 6G
Automount: Y
-rw-r--r-- 1 root root 6.0G 8月 19 10:03 swapfile
-rw------- 1 root root 6.0G 8月 19 10:03 swapfile
Setting up swapspace version 1, size = 6 GiB (6442446848 bytes)
no label, UUID=d46292ab-c15d-4c3f-937e-870c5a1f6200
Filename Type Size Used Priority
/dev/zram0 partition 506392 132 5
/dev/zram1 partition 506392 132 5
/dev/zram2 partition 506392 132 5
/dev/zram3 partition 506392 132 5
/mnt/swapfile file 6291452 0 -1
Modifying /etc/fstab to enable on boot
/mnt/swapfile
Swap file has been created
Reboot to make sure changes are in effect
wiwao@wiwao-desktop:~/installSwapfile$ free -h
total used free shared buff/cache available
Mem: 3.9G 2.1G 568M 352M 1.2G 1.3G
Swap: 7.9G 528K 7.9G
************************************************************************************
# /etc/fstab: static file system information.
#
# These are the filesystems that are always mounted on boot, you can
# override any of these by copying the appropriate line from this file into
# /etc/fstab and tweaking it as you see fit. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/root / ext4 defaults 0 1
/mnt/swapfile swap swap defaults 0 0
************************************************************************************
*********
スワップファイルのONとOFFはコメントアウトをmnt/swapfile swap swap defaults 0 0に追加もしくは削除
*********
# /etc/fstab: static file system information.
#
# These are the filesystems that are always mounted on boot, you can
# override any of these by copying the appropriate line from this file into
# /etc/fstab and tweaking it as you see fit. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/root / ext4 defaults 0 1
# /mnt/swapfile swap swap defaults 0 0
gpuGraphを使う方法
以下ソフトを使用します。
gpuGraph
For Python 3, Matplotlib may be installed as follows:
$ sudo apt-get install python3-matplotlib
$ git clone https://github.com/JetsonHacksNano/gpuGraph
$ cd gpuGraph
$ python3 gpuGraph.py
オープンフレームワークスのインストール方法
wget https://openframeworks.cc/ci_server/versions/nightly/of_v20200818_linuxarmv7l_nightly.tar.gz
tar -zxvf of_v20200818_linuxarmv7l_nightly.tar.gz
mv of_v20200818_linuxarmv7l_release openFrameworks
mv openFrameworks of_10.1
sudo apt install cmake
cd of_10.1/scripts/linux/ubuntu
sudo ./install_dependencies.sh
1.
nano of_10.1/libs/openFrameworksCompiled/project/makefileCommon/config.shared.mk
else ifeq ($(PLATFORM_ARCH),armv7l)
を
else ifeq ($(PLATFORM_ARCH),aarch64)
2.
nano of_10.1/libs/openFrameworksCompiled/project/linuxarmv7l/config.linuxarmv7l.default.mk
を開き41〜48行目付近
#PLATFORM_CFLAGS += -march=armv7
#PLATFORM_CFLAGS += -mtune=cortex-a8
#PLATFORM_CFLAGS += -mfpu=neon
#PLATFORM_CFLAGS += -mfloat-abi=hard
PLATFORM_CFLAGS += -fPIC
PLATFORM_CFLAGS += -ftree-vectorize
PLATFORM_CFLAGS += -Wno-psabi
PLATFORM_CFLAGS += -pipe
4行にコメント記号を入れ(上記#)、
さらに69〜71行目付近
#PLATFORM_PKG_CONFIG_LIBRARIES += glesv1_cm
#PLATFORM_PKG_CONFIG_LIBRARIES += glesv2
#PLATFORM_PKG_CONFIG_LIBRARIES += egl
3行にコメント記号を入れて保存。
3.追加のファイルをダウンロードしてビルドした後
Download apothecary to recompile kiss and tess2:
git clone https://github.com/openframeworks/apothecary.git
cd apothecary/apothecary/
./apothecary -t linux download kiss
./apothecary -t linux prepare kiss
./apothecary -t linux build kiss
./apothecary -t linux download tess2
./apothecary -t linux prepare tess2
./apothecary -t linux build tess2
アーカイブをコピーしてオープンフレームワークスの中と入替える
apothecary/apothecary/build/kiss/lib/linux/libkiss.a
to
openFrameworks/libs/kiss/lib/linuxarmv7l/libkiss.a
Copy
apothecary/apothecary/build/tess2_patched/build/libtess2.a
to
openFrameworks/libs/tess2/lib/linuxarmv7l/libtess2.a
最終スクリプトの実行
cd of_10.1/scripts/linux
へ行きコンパイルを実行
./compileOF.sh -j4
その後は各サンプルのフォルダーに入ってmake -j4でmake RunReleaseで実行