2020年8月30日日曜日

方向性は間違っていない。

基準温度を元に測定する方法は徐々に浸透しているようです。
Thermal Cam3Xのアプリを使った方法だと初期設定に手間が若干掛かる事と当然電話の際にシステムが停止する問題があるので、Jetsonを使って専用アプリにするのも 今だから出来る事なのかもしれない。 黒体炉を使って基準温度から入室する顔の温度を計測してる感じ。Thermal Camは距離によっても温度差がでるので距離と温度の相関関係をどう処理するか? もう一つの問題はブレイクアウトボードこれがなかなか手強くて(といっても自分の設計能力の問題。。。)1Ωのシャント抵抗でそれぞれのレギュレータの短絡電圧を測って見ました。 オリジナル
今回製作の基盤

要求されている出力が出ていない。 なぜ?
Hello Dear, We confirm it is real issue of wrong part we made. So sorry. But it happened, let's deal with it together. There are 20pcs of this part, if avaible we will resend the parts to repair? or if you can purchase in your local market we will cover 10$ for you. or balance to next order? How do you think? if you have better comment please let us know. Thanks.
基板実装メーカーの部品間違え😅 前も間違うし。。。 やり直しです。この基板は何とか完成させたい長年の課題。 またAIメンテくんもいよいよ日の目を見そうなので構成を考えてリリースします。 Thermal Cam3Xで機能をてんこ盛りにしたので、Jetsonでシンプルな機能にしようと思います。 ジンバルはほぼ完成ですが、距離を伸ばす改造も途中で終わってます。orz
やり残しが多いですね。すみません。

2020年8月19日水曜日

Jetson Nano/NXの設定(追記9月1日)

とりあえず作業やテストに必要な設定を一通りインストール。

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で実行

2020年8月15日土曜日

結果発表 THE COVID-19 DETECT AND PROTECT CHALLENGE(国連COVID-19コンペティション)

落選です。受賞者の作品です。

AIや医療関係作品は尽く落選です。
チャレンジといいながら、法的なリスクを避けた感じの選定でした。
 

2020年8月12日水曜日

外光の反射を抑えるPLフィルター

①車内の確認には、屋外の太陽光が強い場合は限定的な効果になります。 

(後部座席の画像を確認下さい。)


②太陽を背にした場合は効果は上がります。
(PLフィルターを装着可能なデジカメが古いので画質は悪いですが、PLフィルター効果は最新デジカメでも同じです。)
(後部座席を確認すると、ほぼ反射は取れています。車内が暗いのは画面を後部座席のみにして露出を上げれば何とかなると思います。)

③室内での効果の確認用です。
外交の反射はソフトで処理することは難しいのでカメラはフィルターを取り付けれるタイプが必須になります。

ただ単に対象を撮影するにも環境条件に合わせて光学アクセサリーと設定を上手く使いこなす必要があります。

2020年8月10日月曜日

カメラの基本

 今回のプロジェクトはカメラで画像を記録(録画も基本は一緒)するのですが、趣味が役に立つことになりました。

今がカメラが賢くなってスマホでもボタン一つで難なく記録できる様になりました。


が、基本機能を理解しないと良いデータは撮れません。

レンズを通してセンサーに光を当てて記録するので、センサーの露出時間をコントロールするので基本はセンサーの感度、シャッタースピード、絞りの組み合わせです。

ここからはフィルムカメラの知識が必要です。

センサーの感度は俗にISO感度(屋外はだいたいISO100、室内はISO400が基本。)

シャッタースピードはデジカメでも1秒から1/2000秒の設定

レンズの絞り(F値)は1.4から16段くらいです。ステップの基準はだいたい決まっていて、

F1から1.2, 1.4 ,2.0, 2.8, 4.0, 5.6, 8.0, 11, 16のステップを段といってシャッタースピードとの組み合わせを決めます。

標準レンズは焦点距離50mm(35mmフィルム基準)で画角が決まります。

標準レンズとは人が基準でだいたい見て認識している範囲(焦点の合う範囲)になっています。45mmと言う人もいますが、大抵50mmがどのレンズメーカーでも基本です。

*実際眼に映る範囲はもっと広く170度くらいはあり、その範囲で動きがあれば感じます。

ウキペディアの画角を参照。

次にISO感度です。今はセンサー技術が飛躍的に進んでロウソクの光で昼間の様に写せます。
フィルムの時代は大体ISO400から1600位でしたが最新はISO51200です。
感度は万能ではなく感度を高くすると画像が荒れてきます。今のデジタル一眼レフだとISO3200位なら普通の人なら問題の無い画質です。

シャッタースピードは、普通は1/1000秒あれば十分、遅いと手ブレは被写体ブレになります。レンズの焦点距離によって若干変わります。
昔教わったのは、1/焦点距離以下のスピードで手ブレする。
50mmレンズだとシャッタースピード1/50秒で手ブレし始める。

それぞれの組み合わせ早見表。
例えば       : 基準とした場合。 ISO感度をあげれば絞り優先で
ISO感度      :   ISO100 ,       ISO200
絞り(F)      :   F2.0,                    F2.8
シャッタースピード :     1/60秒                1/60秒

例えば       : 基準とした場合。 ISO感度をあげればシャッタースピード優先で
ISO感度      :   ISO100 ,       ISO200
絞り(F)      :   F2.0,                    F2.0
シャッタースピード :     1/60秒                1/120秒

手ブレをしない様にシャッタースピード優先でシャッタースピードを絞りに対してあげて行きます。
焦点を浅くして(焦点を合わせている所以外をボケさせて撮影する場合)絞り優先です。

なので対象物に焦点を合わせてブレなく画質を上げる為にそれぞれを調整する必要があります。全自動になっても、条件が厳しくなれば人間が何に優先するかと決めて撮影する必要があります。

上記を体感する為にはフィルムカメラです。(笑)
10年程前にデジタル一眼レフを初めてなんでも自動で思った様な写真が撮れないと、気づいてからオークションでライカを手に入れました。(ライカ(西ドイツ製)とはカメラの世界では車で言うベンツかロールスロイスといったところです。)なにせ100年以上の歴史なのでバースデイライカと言って自分の生まれた年のカメラを買うようです。
私はライカのM2-R(1969年にライカのニューヨーク支店がアメリカの顧客向けに2000台を限定生産したモデルを10万円で落札して3万円でオーバーホールしました。)
今でも状態の良いモデルは50万円は下らない値段で取引させています。レンズも10万円でその時のセットされていた同じモデルを入手しました。
因みに当時のセットの完品の状態の良いモデルは100万円は下りません。
車と一緒でそれらは実用する為では無く眺める為で、勿体なくて使えません。(笑)
もちろん全てマニュアル操作です。
フル装備でこんな感じ。。。
■主な特徴1969年から1970年にかけて生産されたM型ライカの限定モデルです。
このモデルは、ライカが1966年にアメリカ軍用として製作したもののキャンセルされてしまった幻のモデル「KS-15(4)」がライカコレクターの手に渡り、ニューヨークライツより1969年から1970年にかけて2000台限定販売されたものです。
このモデルのポイントとして、「KS-15(4)」の大きな特徴であった基本ベースはM2でありながら、フィルム装填は後継機種のM4より導入された「ラピッドローディング」を標準装備したこと、
そしてボディ単体での販売のほかに、このモデル用に一度生産終了された高性能レンズ「DRズミクロン50mmF2」がこのモデルのために復刻されました。
今では限定モデルも時折見かけるライカではありますが、古くは1930年代よりライカはユーザー向けに限定モデルを販売しており、
当時からのファンの多さに驚かされます。
■主な仕様型式:35mm距離計連動式フォーカルプレーンシャッターカメラ
使用フィルム:35mmフィルム
画像サイズ:24×36mm
レンズマウント:ライカMマウント(バヨネット式)
シャッター:横走り布幕式フォーカルプレーンシャッター
シャッタースピード:T、B、1、1/2、1/4、1/8、1/15、1/30、1/60、1/125、1/250、1/500、1/1000秒等間隔目盛
距離目盛:∞~0.7m
セルフタイマー:ボディ前面に配置。(10秒)
ファインダー:ブライトフレームファインダー、35mm、50mm、90mm
フィルム感度:ASA感度表示
フィルム巻き戻し:ノブ式
フィルムカウンター:手動式(※フィルム装填後、自信でカウンターを「1」にする必要あり

能書きはこれくらいで、ぼちぼちカメラの選定します。レンズも今回の用途用に分けないといけないかも?予算つけてくれるの?初めてなので選定ミスしたらこちら負担?
どの程度リスクを見てくれるかでこちらの費用も変わってきます。