W&T's diary

W&T Thermal Cam に関連する情報

Thmal Cam for BOSON

私たちの作った赤外線カメラを取り付けたESP8266とiPhoneWiFiで接続するという発想のThermal Cam はFLIR LEPTON 1.0,3.0,3.5 で動作が可能です。        

今回は同じような仕組みを使って、より精細な画像とスピードを持つFLIR BOSON QVGA(以下BOSON)で実現させました。さらにThermal Cam3Xと同じように、皆さんが変更可能なAI画像認識機能を加えて様々な応用ができます。

この画像の最初の方は、チョキを認識したら手の温度を表示して、一番温度が高い温度に丸印を表示、更に英語でピースと発生させる設定にしています。画像認識エンジンにはYOLOv3を利用していますが、標準データ(Tinyではありません)で入力画像が416x416です。推論スピードが30fpsを超えることがお分かりいただけると思います。

   起動終了方法は下記「15 起動終了方法」を確認して下さい。AIの使用方法、学習済みファイルのインストール方法はThermal Cam3Xと同じです。こちらを参考にして下さい。 

Thermal Cam for BOSONは、安価で小型のRaspbery PI Zero をFLIR BOSON に接続し、Wi-FiテザリングI経由でiPhoneに画像を再現できます。動画スピードは、10Mhz(10fps)以上のBOSONでは最高30fps前後です。

f:id:TAKEsan:20190922105712p:plain

PI ZeroとiPhoneWi-Fiで相互に交信し合います。PI側ではカメラの持つ性能を最大に発揮させるため8bit処理したRAW16グレースケール画像をiPhoneへ送っています。制御命令はiPhoneから送信しているので、市販のBOSON単体とコンピュータをつないだだけでは実現できない暫定温度測定・感度の微調整・自由な色づけが可能になりました。さらに画像データはmjpegなどで圧縮していないためBOSON本来のノイズの少ないくっきりした画像が再現されます。iPhone側では画像を特性に合った方法で拡大しているので、緻密な画像表現が可能です。市販されているBosonは温度測定機能を持っていませんが、後述したキャリブレーションを行うことで、ある程度正確な温度測定が可能になりました。

iPhoneまたはiPad用のアプリは、app Storeから w&t 、kansaidenki、thermal で検索できます。(2020/4/18)

f:id:TAKEsan:20200415003805p:plain

1.Thmal Cam for BOSONの機能 

Thermal Cam for BOSONは、以下のような機能があります。

    

f:id:TAKEsan:20200404145600p:plain

    f:id:TAKEsan:20190922141525p:plain

カラーレンジONの場合、高画質なiPhone画像は、ソースの工夫で輪郭強調やコントラストを上げなくても、自然な画質で緻密さを失なっていません。FLIRのAGC画像と決定的に違うことは、下記比較画像で理解できると思います。

    f:id:TAKEsan:20190922141548p:plain

    f:id:TAKEsan:20190922141602p:plain

今までのLEPTON画像より画素が多くなったため3D画像は息をのむような美しさです。

f:id:TAKEsan:20200404145659p:plain

f:id:TAKEsan:20200412153003p:plain

iPad動かした例です。あらかじめ記憶した顔の温度を元に、AIで認識した全ての顔について何度の差があるかを表示しています。基準値を超えると音声またはアラート音やフラッシュで警告が設定できます。

    f:id:TAKEsan:20190923105537p:plain

画像のカラーは3種類のポスタリゼーションカラーを含む12色から選択できます。

このほかにiPhoneの設定でReverseをONにすることで、画像の左右が反転できます。

2.1クラス上の美しい画像が表示できます

この画像はBOSON QVGAを直接パソコンにつないだキャプチャー画像です。接続が簡単でWEBカメラとして取り扱えますが、AGC処理後の画像のためノイズ(縦に現れる縞)が多く、コントラストを上げているためか、画像そのものは決して美しいとは言えません。   

f:id:TAKEsan:20190922144959p:plain

BOSON QVGAキャプチャー画像

次の画像は今回のBOSON QVGA(320x256画素)を使ったThermal Cam for BOSONの画像です。落ち着いた画質でノイズが取れ、細かなところまで画像が再現できているのが分かると思います。 (屋内で最高最低温度の差が殆ど無い場面ではノイズが発生します)

f:id:TAKEsan:20190922145037p:plain

Thrmel Cam for BOSON QVGA(320x256画素)の画像

次の画像はBOSON QVGA(320x256画素)の上位機種VGA(640x512画素)を同じiPhoneアプリで再現したものです。一見QVGAと見分けが付かないと思います。ただし引き延ばすと違いが分かりますが、赤外線カメラを使う一般用途であれば価格の安いQVGAでも十分対抗できることがおわかりいただけると思います。

f:id:TAKEsan:20190922145429p:plain

Thrmel Cam for BOSON VGA(640x512画素)の画像

3. 応用例

赤外線画像を利用したAIによる画像認識の応用例です。ここではLEPTONを使っていますが、すでにBOSONでも実現できています。

Maker Faire Kyoto に向けて - W&T's diary

さらにiPhone 11シリーズを使った本格的な「おうちくらうど」も開発中です。

4.必要部品とソフト

この記事で紹介するアプリは、あくまでもPI Zeroを使ったインストール手順で、これだけではThermal Cam for BOSONは動きません。現在アプリストアに申請中のiPhoneアプリが必要です。

  PI3、PI4の場合は、Openframeworks及びOfxCVが動く環境であれば以降6,8,9,10番の作業で動作可能です。

 

FLIR BOSON QVGA (10Mhz以上の機種)

USBケーブル   USBC及びマイクロUSBコネクタが付いているもの

Raspbery PI Zero(インストール時はHDMI、キーボード、マウスを接続)

        インストール後はキーボード、マウス、ディスプレイは必要ありません

マイクロUSBカード(16Gbyte)

pimoroni OnOff SHIM 日本ではスイッチサイエンスで取り扱っていて768円です

            f:id:TAKEsan:20190922110003p:plain

対応 iPhone

  • iPhone SE,7,7Plus,8,8Plus,X,XR,XS,Xs max,11,11 Pro,11 Pro Max
  • 格安SIMを使う場合は、テザリング可能な契約をしてください
  • AI機能を使うにはXs以上が必要となります

Thermal Cam for BOSON PI側アプリ以下を参考にしてインストールして下さい

Thermal Cam for BOSON iPhone側アプリ:Apple アプリストアからダウンロードして下さい

  kansai,kansaidenki,w&t で検索

Thermal Cam for BOSON性能

  • WIFI接続範囲:見通しが良く、電波条件の良いところで最大35m
  • 動画再生スピード:最大30fps(Wi-F-接続条件による)

端末側の機能

  • 最高最低温度表示、指定点の暫定温度表示(体温中心の温度帯で±5℃程度)と指定点周りの温度表示(81カ所)
  • 画像のコントラスト指定(Dynamic Range)
  • 画像コントラスト安定化指定(Color Range)
  • 画像中に極端な温度の対象物が存在してもコントラストに変化が無くなる(Color Range)
  • 動画のリアルタイム画像録画機能-->写真アプリ連動
  • 動画の3D表示-->温度変化をポイントクラウドで確認できる
  • リバース表示:左右反転表示
  • 画像のAI判定と判定結果のカスタマイズ
  • 学習済みデータの入れ替え可能

FLIR BOSON QVGAは320x256 の画素をもつ赤外線カメラで、一般的には10fpsの動画再生能力を持ちます。このカメラは購入前にFLIR代理店と利用手続きを取り交わすことで、最高30fpsまたは60fpsの製品を指定できます。今回はそのカメラを対象としていますが、10fpsのカメラでも作動させることが可能です。

5.RaspiOSのインストール

PI Zeroは他のPIシリーズに比べてスピードや起動が遅いことから、OSのやソースのインストールなど非常に時間がかかります。その代わり他のPIでは実現できない携帯性が加わることになります。RaspiOSを含めて全体のインストールは慣れていても1日くらいの作業量です。途中でエラーが出た場合は最初に戻って再度挑戦して下さい。

NoobsをコピーしてOSをインストールするのは非常に簡単ですが、Pi Zeroでは起動が15秒以上遅くなります。今回はimgファイルを直接SDカードに書き込む必要があります。

開発環境としてOpenframeworksを使用しますが、Raspbianの最新バージョン「Buster」との相性が悪いので、1つ前のバージョンの「Stretch」 をインストールする必要があります。Raspbian付属ソフトが起動スピードの邪魔をするのでrecommended softwareでない標準のものをインストールしてください。

http://ftp.jaist.ac.jp/pub/raspberrypi/raspbian/images/raspbian-2019-04-09/

f:id:TAKEsan:20190922110139p:plain

インストール方法は以下を参考にして下さい。

https://www.raspberrypi.org/documentation/installation/installing-images/README.md

OSの初期設定では必ず自宅の無線ルーターに繋いでください。

IDやPASSはなるべく簡単な方が後々接続が簡単になることと、最終的にiPhoneテザリング接続に限定するので、あまり神経質になる必要はないと思います。今回は ID:pi0 Pass:pi0 にしています

6.ダウンロードファイルの内容

PI Zero側で使用するソースはここからダウンロードして下さい。

ThermalCam_BOSON.zip - Google ドライブ

下記のファイルがすべて入っています。一応PI Zeroの /home/pi   にダウンロードしたフォルダ内部のファイルをすべてコピーして下さい。

PI_BOSON1X  メインプログラムフォルダ

./bashrc        初期設定ファイル(すでに存在している./bashrcへ重ね書きになります)

start.sh         start.pyを起動後iPhoneテザリングアドレスを指定してメインプログラムを起動

start2.sh       iPhoneテザリングを確認してつながっていなければ再接続

aID.txt      iPhoneの新しいIDとPASS

damy.txt     前回スタート時のiPhoneのIDとPASS

start.py    iPhoneのID PASS 設定確認プログラム

config.txt  PIの初期設定ファイル

boson.service 自動起動用のファイル

boson    メインプログラムを手動で動かす場合のshファイル(拡張子なし)

boson_temp.txt 温度補正用のテキストファイル

boson_temp.50 画角50°のBOSON用補正ファイル(使う場合は数値拡張子をtxtに変更)

boson_temp.90 画角90°のBOSON用補正ファイル(使う場合は数値拡張子をtxtに変更)

7.PI Zeroの一時設定

config.txt を /boot にsudoでコピー

sudo cp config.txt /boot/config.txt

Thermal Cam for BOSONに適したPI Zeroのスピードアップなどの設定です。コピーが完了したら必ずrebootします 。

8.BosonSDK のコンパイル

GitHubからBosonLinuxSDKをダウンロードして、/home/pi に移動します。

GitHub - FLIR/BosonLinuxSDK: This is C code Boson SDK for Linux

移動後は解凍したフォルダの場所を確認して下さい---->  /home/pi/BosonLinuxSDK

まず BdonLinuxSDK/EmulatorFiles/ に入りmakeを実行 

次に、 BdonLinuxSDK/ClientFiles_C/

に入り以下のコマンドを実行してsoファイルを6個作成します。

gcc -fpic -c Client_API.c -o boson1.lo

gcc -shared -Wl,-soname,boson1.so boson1.lo -o boson1.so

gcc -fpic -c Client_Packager.c -o boson2.lo

gcc -shared -Wl,-soname,boson2.so boson2.lo -o boson2.so

gcc -fpic -c Client_Dispatcher.c -o boson3.lo

gcc -shared -Wl,-soname,boson3.so boson3.lo -o boson3.so

gcc -fpic -c Serializer_BuiltIn.c -o boson4.lo

gcc -shared -Wl,-soname,boson4.so boson4.lo -o boson4.so

gcc -fpic -c Serializer_Struct.c -o boson5.lo

gcc -shared -Wl,-soname,boson5.so boson5.lo -o boson5.so

gcc -fpic -c UART_Connector.c -o boson6.lo

gcc -shared -Wl,-soname,boson6.so boson6.lo -o boson6.so

9.Openframeworksのインストール

他のSSD接続したパソコンからでもインストール可能ですが、とりあえずPI Zeroでインターネットを立ち上げ

Index of /versions/v0.10.1/

から、of_v0.10.1linux armv6l_release.tar.gzをダウンロードします。最新バージョン0.11.0ではないことに注意して下さい

さらにofxCv addonが必要なので 

https://github.com/kylemcdonald/ofxCv

からofxCvをダウンロードします。

解凍したOFは/home/pi にフォルダごと移動し、フォルダ名称を of_v101に変更してください。

ofxCVは、ofxCV-masterからofxCvに名称を変えて

/home/pi/of_v101/addons に移動します。

OF自体はコンパイルが必要です。

https://openframeworks.cc/setup/raspberrypi/ に従ってコンパイルを実施します。

PI Zeroの場合最低2時間は必要です。

ここまで終わったら、上手くコンパイルできているかどうか確認するため、サンプルファイルを実行してみます。

cd /home/pi/of_v101/ examples/3d/ 3DPrimitivesExample

make

make run

3DPrimitivesExampleを実行した結果です。この画像はMacのものですが、PIの場合は画像が左上に固定され、マウスでWindowが移動できません。また、PIはコマンドモードでも実行画像が表示できます。

f:id:TAKEsan:20190922110554p:plain

10.Thermal Cam for BOSONをコンパイル

ダウンロードしたPI_BOSON1Xをフォルダごとapps/myapps へ移動

さらにこのフォルダに入りBosonSDKの必要ファイルをコピーして、リンクファイルを作成します。

cd /home/pi/of_v101/apps/myApps /PI_BOSON1X/src

ln -s /home/pi/BosonLinuxSDK/ClientFiles_C BOSON          

cp /home/pi/BosonLinuxSDK/BosonLinuxSDK/EmulatorFiles/*.h

cp /home/pi/BosonLinuxSDK/BosonLinuxSDK/EmulatorFiles/*.so

そしてmake を実行します。

cd PI_BOSON1X

make

これもかなり時間がかかります(1時間程度)のでゆっくり待ってください。

エラーがなければ一応一連のインストール作業は完了です。

ここで本当に画像が表示されるかどうかテストします・

まずiPhoneにアプリをインストールして起動しておきます。この時iPhoneは自宅の無線ルーターに接続してください

iPhoneの「設定」から現在接続されているIPを調べます。設定-->Wi-Fi

iPhoneのID PASSを以下のように変更します(一時的に変更しても他のアプリには影響が出ないと思います)

設定-->一般-->情報で名前を選択

ABiPhone

設定-->インターネット共有-->WI-FIのパスワードで

12345678

設定が完了したら、iPhone側でThermal Cam Bを立ち上げておきます。そしてiPhoneと同じ無線ルーターに接続したPI Zeroでプログラムを起動します。このとき最後にiPhoneIPアドレスを加えます(xxx.xxx.xx.xx部分)。

/home/pi/of_v101/apps/myApps/PI_BOSON1X/bin/PI_BOSON1X xxx.xxx.xx.xx

BOSONがPI ZeroのUSBに接続されていれば、PIに接続したディスプレイとiPhone側にBOSONの画像が表示されるはずです。

画像表示が確認できたらctrl cでプログラムを一旦終了します。元のID・PASSに戻す場合は、すべてのテスト完了後としてください。

11.On Off Shimの組み立て

On Off Shimと同封のコネクタを半田付けしてPI Zeroに取付後、以下プログラムをインストールします

curl https://get.pimoroni.com/onoffshim | bash

これはなかなかインストールが進みません(時間が必要で一見ハングアップしているように思えてしまう)が、諦めずにじっと待つ必要があります。

インストールが終了したら、一旦shutdownして、USB電源をOn Off Shim側のコネクタに入れ替え、スイッチを軽く押し、起動するかどうか確認します。

起動したら、ボタンを1秒以上押し離して、自動シャットダウンするか確認します。

これでスイッチによるPI Zeroのオンオフが可能になります。

12.自動起動の設定

今回のプログラムはiPhoneテザリング機能を利用してデータの送受信を行うため、PI側にiPhoneのIDとパスワードを記憶させる必要があります。後々のために以下の設定を行います。

まずaID.txtを /boot にコピーします

sudo cp aID.txt /boot/aID.txt

ファイルの内容は、1行目がiPhoneのID、2行目がiPhoneのパスワードです。

                      f:id:TAKEsan:20190922181749p:plain

PIのOSが入ったSDカードは、Windows又はMacで/bootの中身を変更できます。パスワードなどの変更があった場合にはこれらのコンピューターにPIのSDカードをセットして/boot/aID.txtを変更して下さい。ただしその他のファイルを変更したり、削除したりするとPI が起動しなくなりますので、細心の注意が必要です。

次にpiのsystemdの設定を行います。ダウンロードしたboson.serviceを所定の場所にコピーします。

sudo cp boson.service /etc/systemd/system/boson.service

上手くコピーできないときは以下を直接書き込んで下さい

sudo nano /etc/systemd/system/boson.service

で、内容は

[Unit]

Description=Capture BOSON Image Service

After=network.target

[Service]

Type=simple

ExecStart=/home/pi/start.sh

StandardOutput=nul

WorkingDirectory=/home/pi/

#Restart=always

[Install]

WantedBy= multi-user.target

コピーしたら以下のコマンドを入力して、boot後の起動ファイルを設定します。

sudo systemctl enable boson.service

13.PI Zero起動のスピード化

以下のコマンドで時間のかかる不必要なプログラムを停止させます。この操作により本体のキーボードも使えなくなりますが、以降は他のコンピューターからssh接続してください。元に戻したい場合は disableをableに、purge -y --auto-remove部分をinstallに変更すれば可能です。

まずraspy-configを起動してコマンドライン起動に変更します。ディスクトップ画面に設定するとメモリを消費する上に、Pi Zeroでは起動に非常に時間がかかります。

Linux初心者の方、起動時間が気にならない方は、以下コマンド実行は避けた方が無難です。

 

再起動後他のコンピューターからsshでpiに入り次のコマンドを実行

sudo systemctl disable dphys-swapfile.service

sudo systemctl disable keyboard-setup.service

sudo systemctl disable apt-daily.service

sudo systemctl disable wifi-country.service

sudo systemctl disable hciuart.service

sudo systemctl disable raspi-config.service

sudo systemctl disable triggerhappy.service

sudo systemctl disable ntp.service

sudo apt-get purge -y --auto-remove exim4 "exim4-*"

sudo apt-get purge -y --auto-remove dphys-swapfile

sudo apt-get purge -y --auto-remove plymouth

sudo apt-get purge -y --auto-remove alsa-utils

さらに

/boot/cmdline.txt

を以下の通りに変更します。(バックアップファイルを忘れずに!!)

dwc_otg.lpm_enable=0 root=PARTUUID=dec2b11e-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait

これで20秒程度で起動できるようになります。

これですべて終了です。PIをrebootするとプログラムが自動で立ち上がるようになります。

次に起動する時点で、PIに繋いだディスプレイやキーボードが必要なくなります。

 

14.PIの設定などを変えたい時

無事起動できた場合、その後の設定は必要ないと思いますが、PIは上記の設定でキーボードやマウスが使えません。また、シリアル通信も止めているためPI本体では修正が不可能です。SSH接続になりますが、この場合は、iPhoneテザリングをONにしてコンピューター側でルーターiPhoneに指定してから、ターミナルでPIとSSH接続します。

  • iPhone の設定-->インターネット共有 でインターネット共有をONにします。
  • PIのスイッチを入れ、iPhoneに接続されたことを確認します。
  • メインコンピューターがMacの場合は 設定-->ネットワーク 出てきたダイアログボックスの左のWIFIを選択してネットワーク名称でiPhone の IDを選択します。
  • 後はターミナルを立ち上げて ssh pi@XXX.local  でPI Zeroにつながります

    f:id:TAKEsan:20190922110648p:plain

15.起動・終了の方法

  • 導入当初はiPhone又はiPadのユーザー名・パスワードを変更する必要があります。初期設定値 ABiPhone   12345678 です。ユーザー名は、設定->一般->概要->名前。パスワードは、設定->インターネット共有->"Wi-Fi"のパスワード で変更します。
  • iPhoneとPIを接続するときは、非常につながりにくくなる可能性があるので、なるべくiPhone側のBluetoothと位置情報サービスをOFFにしてください(OFFにしないと接続後もアプリの動作がもたつく可能性があります)。iPadに関しては特に問題ありません。
  • 一番最初にアプリを使う前に、iPhone又はiPadの電源を落とし、再起動をして下さい。
  • 終了処理はPI ZeroのOnOff Shimボタンを長押しします。3秒ほどで終了します。PI側のON OFFは必ずOn Offスイッチを利用してPI ZeroのLED消灯を確認して下さい。(②参照)プログラム動作中に電源等が遮断された場合、SDカードに書き込まれたOSが損傷を受ける可能性があります。

  ① 基本的な起動方法

iPhoneを先にテザリングON し(コントロールセンターの設定画面は接続できるまでそのままにする)、そのあとPIを立ち上げた場合、約45秒ほどで画像が表示されます。 iPhone側アプリ立ち上げは、PIとの接続前後どちらでもかまいません。 

テザリングON:コントロールセンターを表示させ、Wi-Fiマーク長押しし、モバイル通信がオフの場合はオンにした後、インターネット共有ボタンを押します。

f:id:TAKEsan:20191218231935p:plain

  ② PI側でアプリが稼働しているかどうかの確認方法

PI側では自動でiPhoneとの接続を確認した後、PI側アプリを起動します。以下のようにPIのLED(本体付属の緑のLED)点滅状態でアプリが立ち上がったことを確認することができます。

  • PIスイッチON-->システムを読み込んでいるので20秒ほど激しく点滅する。
  • Wi-Fiの接続トライ中-->起動後LEDは点灯したままになり、定期的に点滅する。
  • Wi-Fi接続が確認された場合-->アプリを読み込んでいるため3秒ほど激しく点滅する

  ③ テザリング接続(インターネット共有)が上手くいかない場合など

このシステムはiPhoneまたはiPadテザリング機能を使って通信しています。iOS13以降、特にiPhoneではテザリングがつながりにくい傾向にあります。通常PI起動から約20秒後「1件の接続」表示の後、一旦切れて再度「1件接続」が表示され、アプリ読み込み状態になって画像出力が始まります。通常2〜3回目の自動トライ接続で安定するようです。また、接続が確立するまでコントロールセンターはそのまま表示させておきます。

なかなか接続できない場合は、

  • 機内モードを一度OFFにしてその後ONにしてみます。1分ほど様子を見て、「1件接続」が表示された後2〜3秒激しくLEDが点滅すれば正常に接続できています。つながらない場合は機内モードON・OFFを繰り返して見て下さい
  • PIを再起動してみてください

この段階で、たいてい接続できると思いますが、それでもなかなかつながらない場合は、

  • iPhoneを再起動してみて下さい
  • iPhoneの再起動を行っても改善されない場合、Bluetoothと位置情報サービスがONの場合は両方ともOFFにしてみてください
  • 電波の状況により、アプリが止まる場合があります(Bluetoothと位置情報サービスONの場合が多い)が、その場合はアプリを再起動して下さい。
  • 周囲に多数の携帯端末や、Wi-Fi中継点の存在する場所では、テザリング接続が失敗する場合があります。
  • モバイルデータ通信のできない環境では使用できません。

一度接続が確立すれば、かなり安定して動作します。

  ④ iPhone またはiPadのユーザー名パスワードを元に戻したい場合

上記設定で自分の端末のユーザー名パスワードを変更した後、元に戻したい場合はPI側の設定を変更する必要があります。

  • 自分のiPhoneまたはiPadのユーザー名とパスワードを設定する(ユーザー名変更:設定->一般->情報->名前、パスワード変更:インターネット共有->"Wi-Fi"のパスワード
  • PI ZeroのSDカードを抜き取り、コンピューター(WindowsまたはMac)に読み込ませる。
  • SDカード名称:bootの中のaID.txtを開き、1行目はユーザー名、2行目はパスワードを書き込み、保存する。(他のファイルを触るとPIが起動しなくなりますので充分に気をつけて、また余計なスペースなどは入れないでください)
  • PIにSDカードを設定して完了

  ⑤ WIFIが障害物や遠距離のため、切れた場合

常にiPhoneテザリングIPを確認しているため、通信圏内(iPhoneから35m以内)に入り最大20秒待つと再び動画が表示されます。

⑥ 動作中の注意

  • AI機能をONにしている場合、iPhoneの場合コントロールセンターでの動画録画機能を使うと不安定になる場合がああります
  • iPad pro(2020/4月以降最新機種)の場合はコントロールセンターでの動画録画機能が使用可能です。
  • このアプリ自体録画機能を持っていますので、動画を録画する場合は、アプリの録画ボタンを使用して下さい。
  • 動作中は本体がかなり熱くなりますので、長時間使用する場合は市販のファンなどで本体を冷却して使って下さい。

16.BOSONの温度キャリブレーションについて

現在手に入るBOSONは温度補償されておらず、SDKにも対応命令がないため、温度測定ができません。内部的には対象物の放射温度に反応し、0~65535(16bit整数値)の範囲でデジタル出力しています。この出力値は線形にはなっていないことと、BOSON本体の温度とレンズ焦点距離、BOSON自体の温度変化により、出力値が大きく変わることが測定により確認できました。ただし、以下の手順で近似式を想定し、補正を加えることで実際の対象物の温度が測定できます。算出された温度はあくまでも近似値であることにご注意下さい。

  • 温度差があらかじめ分かっていて、大きく温度の異なる3つの物体を用意する
  • BOSONの温度が安定してきた時点でこの3物体のRAW数値とBOSON本体の温度を記録する
  • PIの設定ファイルを変更する

測定範囲内でなるべく温度差のある3つの物体を用意することになりますが、一番身近に用意できるのは、0°に近い氷水と100°付近の熱湯、それに36°前後の自分の顔です。

今回PIに組み込んだプログラム(PI_BOSON1X)は、ターミナル画面上でカメラに写った物質の最高、最低のRAW数値、及びBOSONの現在温度を表示できます。

一般的な室内で氷水と熱湯を写し、すぐにカメラの向きをを変えれば顔が最高温度として表示されます。この測定値をキャリブレーションファイルとして保存すれば、PI_BOSON1Xアプリは、測定値を読み込み-->近似式の係数を算出-->補正を加えて対象物の温度としてiPhoneへ送信といった動作を行います。手順は以下の通りで少々大変ですが、一回の設定でOKです。設定が終了すれば、BOSONが冷えている状態からスタートさせても、ほぼ近似温度を測定することが可能です。

  • BOSONの画像がiPhoneで確認できる状態にして、パソコンをiPhoneテザリングアドレスに接続(すなわちiPhoneルーターになる)
  • iPhone側でThermal Cam for BOSONが立ち上がっていれば、一旦終了させる
  • パソコン側からPI Zeroにsshで接続するiPhonessh接続ができるアプリをインストールしていればパソコンは不要です。以降ssh接続した後のターミナル画面での操作となります。接続は「14.PI側の設定を変えたいとき」参照
  • すでに立ち上がっているPi側のBOSONプログラムを終了させる(PI側ではすでにPI_BOSON1Xがバックグラウンドで立ち上がっているので、そのプログラムを終了させる)

     top  と入力してPI_BOSON1Xのプロセス番号を調べCtrl+Cで topコマンドを終了させ  

     sudo kill xxxx  でPI_BOSON1Xを終了させる(xxxxはプロセス番号)

  • そのままBOSONの温度が安定するまで30分程度待つ
  • できれば黒いコップ(使い捨てプラスチックコップに黒色の色を塗ればOK)に温水と(黒い容器に入った電気ポットでもOK)、氷をたくさん入れ温度の変化がないうように水を用意。
  • あらかじめ顔とこの2つのコップを赤外線温度計(ホームセンターで1800円前後)で測定(顔については温度変化があるのでなるべくその場所を動かないように)
  • 用意ができたらプログラムをスタート。最初に氷水と温水を測定。画像はアプリが起動していれば確認可能。

  プログラムのスタートは  ./boson   です。

        f:id:TAKEsan:20191218230432p:plain

       対象物から60cm程度程度離してカメラをセットするとこんな画面になります

  • すぐレンズの向きを変え顔を写す(10秒程度そのまま)。
  • プログラムを終了させ、RAWをメモして、結果をファイルに書き込む

f:id:TAKEsan:20191218223129p:plain

上のように5秒毎に最低最高のRAW数値とBOSON温度がターミナルに出力されますが、Maxの数値を確認することで顔のRAW値が確認できます。この例の場合4行目のMin(氷水),Max(熱湯)値及び5行目のMax(顔の温度)を採用。測定時のBOSON本体温度は42.2°となります。顔を測定する場合は、事前に背景が体温より低い温度であることを確認して下さい。BOSONの温度が安定するとTempの値は殆ど変化がなくなりますが、Tempの値に変化がないことに注意して下さい。測定範囲は-60℃〜+200℃前後のようです。

次にnano boson_temp.txt で数値を変更します。変更内容は以下の通りです。

mimTempD= 1.0   <---氷水の温度℃
mimTempR= 15616      <---氷水の上記RAW数値
midTempD= 35.5          <---顔の温度℃
midTempR= 21692       <---顔の上記RAW数値
maxTempD= 100.0       <---熱湯の温度℃
maxTempR= 40019      <---熱湯の上記RAW数値
nawTempD= 42.2         <---上記BOSONの温度℃

ファイルは数値のみ訂正して下さい。訂正が終わったら Ctrl+oで保存Ctrl+xでnano終了

  • 再度プログラムを動かし(./boson)実際の温度との差があれば、Dの部分の温度(氷水、顔、熱湯)を微調整します。最終的にiPhone側のアプリを起動することで設定した温度が確認できます。

※BOSON50°、90°に関してはすでにキャリブレーション済みファイルを用意しています。boson_temp.50及びboson_temp.90 です。もし同じカメラの場合は拡張子の数値部分をtxtに変更して使って下さい。ただし、製品によりばらつきがあるので、温度が合わない場合にはキャリブレーションの必要があります)

                                 以上

 ⇐Goto Home

Thermal Cam の AI機能について Thermal Cam AI function(Yolo v3 Object Detection)

新しいThermal Cam は Our new feature of Thermal Cam

画像認識機能が付いています。Thermal Camの特徴は暗視カメラであることと、携帯端末とカメラを分離できることです。カメラ自体が非常に軽量で、ESP8266を使用した場合には電波の飛距離が伸び、さらに自由に入れ替え可能な画像認識AIが加わるため様々な応用が可能になりました。ただし、Thermal Cam アプリをダウンロードしただけではAI機能を実行できません。下記を参考にしてまず学習済みファイルをダウンロードして下さい。

We add object detection for  thermography. One of feature for Thermal Cam is night vision and our system is divided display from FILR sensor.

ESP8266 helps to transmit WiFi longer and light weight low battery consumption all at the same time.

Furthermore, various applications are possible by adding image recognition AI.

However, AI function cannot be executed just by downloading Thermal Cam application. Please download the Pre-learned file first referring to the following.

ESP8266 helps to transmit WiFi longer and light weight low battery consumption all at the same time.

Furthermore, various applications are possible by adding image recognition AI.

However, AI function cannot be executed just by downloading Thermal Cam3x application. Please download the Pre-learned file first referring to the following.

f:id:TAKEsan:20191107133217p:plain

特徴は?    New feature ?

  • iPhone Xs,Xs Maxm,Xr,11,11 Pro,11Pro Max,iPad Pro 11,12.9inchに関して (A12,A13 Bionicを使っているiPhone,iPad)、「設定」YOLO ONトグルスイッチをONにすることで画像認識機能が働きます。*1
  • 認識エンジンはYOLOv3を使用しています。これはTiny版ではないので優れた認識能力を発揮します。
  • 学習済みファイルが自由に選択可能で、ユーザー自身が用意したWeightデータを使用することができます。*2
  • 認識結果を利用して、英語または日本語の音声、アラーム、カメラフラッシュ対象物の認識個数表示、タイムスタンプ表示をユーザーが自由に設定できます。*3 

f:id:TAKEsan:20191109223950p:plain

認識結果のアラートや対象物(以降Class)の表示名称を自由に変更することが可能です。これには一般テキストファイルの編集ソフトが必要です。「Edidown」の事前インストールをおすすめします。

For iPhone Xs, Xs Max, 11, 11 Pro, and 11 Pro Max, the image recognition function works by turning YOLO ON toggle switch at the setting of iPhone.

* 1 The recognition engine uses YOLOv3. Since this is not a Tiny version, it demonstrates excellent recognition ability.Pre-learned files can be freely selected, and the weight data prepared by the user.

* 2 Using the recognition results, the user can freely set Siri voice in English or Japanese, alarm, camera flash and display number of objects recognized, time stamp.

* 3 You can freely change the above alert and the text of the target object (hereinafter referred to as Classification). This requires a general text file edit software. Although it is a paid application, it is recommended to install “Textor” or "Edidown" in advance.

Thermal Cam BOSON版は

赤外線画像の他に、BOSONが接続されていない場合は。iPhoneカメラ画像に切り替わります。カメラ画像についても下記の画像認識アラートが使えます。また認識した同一クラスの対象物について、中央付近81点の温度測定を行い最高温度を表示するコマンドを新しく追加しました。

 

1.学習済みファイルのダウンロード方法 How to download Pre-learned files

画像認識をさせるには、まず学習済みデータのダウンロード作業が必要です。学習済みファイルは100Mbyte~250Mbyteの大きさになりますので、自身のiPhone容量を確認してから使用して下さい。

現在ダウンロードできる物体認識モデルは、以下の3種類です。Thermal Cam3xThermal Cam Bではデータ内容が違いますのでご注意ください。

a)は赤外線画像用、b),c)は一般カメラ画像用に特化したデータです。

 Thermal Cam 3X用データ

a)   https://drive.google.com/file/d/1IzfCwoilTfw-8zrgSAWc8zM16P8I4N-Z/view?usp=sharing

(LEPTON赤外線画像を対象:車、人間、自転車、大型車両、歩道、犬、グー、チョキ、パー、顔の認識 32Bit

b)  https://drive.google.com/file/d/1fHe5Czv4wO1UaygwHsb6vCT5iuHVc-gr/view?usp=sharing

(標準RGB画像が対象:80種類の物体検出で、赤外線カメラでどの程度認識するかを確認するための試験用データ。一般的なCOCOです 16bit)

c)  https://drive.google.com/file/d/1o-PyBH9AztUpAsSc6QfZmyzi7bhfnkHz/view?usp=sharing

(標準RGB画像が対象:80種類の物体検出で、赤外線カメラでどの程度認識するかを確認するための試験用データ。一般的なCOCOです 32bit

 Thermal Cam B用データ

a)  https://drive.google.com/file/d/1MHE-uPRZvWx3CIAAe-lWHChLa3xnzk1h/view?usp=sharing

(LEPTON赤外線画像を対象:車、人間、自転車、大型車両、歩道、犬、グー、チョキ、パー、顔の認識 32Bit

b)  https://drive.google.com/file/d/1AgJYFT9N56wRX_MulEPgEu01K7Ih3hil/view?usp=sharing

(標準RGB画像が対象:80種類の物体検出で、赤外線カメラでどの程度認識するかを確認するための試験用データ。一般的なCOCOです 16bit)

c)  https://drive.google.com/file/d/18fF6tw_krbSJlepeqp9rMJ946BjjTM39/view?usp=sharing

(標準RGB画像が対象:80種類の物体検出で、赤外線カメラでどの程度認識するかを確認するための試験用データ。一般的なCOCOです 32bit

ダウンロード方法を以下に説明しますが、URLを指定してダウンロードしたzipファイルを解凍後、Thermal Cam3x専用フォルダに入れるだけなので、手順に惑わされないようにして下さい。

To perform image recognition, you must first download the Pre-learned data. The Pre-learned file will be 100Mbyte ~ 250Mbyte, so to start with, please use one of them after checking your own iPhone capacity.

The following three types of the Pre-learned models is available at the moment.

a) https://drive.google.com/file/d/1LGmp1Y62Y1egbhEUtFuzissI4PWZNVt4/view?usp=sharing

(Target LEPTON infrared image: recognition of car, human, bicycle, large vehicle, sidewalk, dog 16bit)

b) https://drive.google.com/file/d/1XiEgkwlJctOlpsCYdVwl3Ud_QCfF-jCd/view?usp=sharing

(Target LEPTON infrared image: recognition of car, human, bicycle, large vehicle, sidewalk, dog 32bit)

c) https://drive.google.com/file/d/1au2JzuK7hJxnvbMluZ6eoPiqo0PPAJh9/view?usp=sharing

(Standard RGB image is targeted: 80 kinds of object detection, test data to confirm how much is recognized by infrared image. This is a general COCO 16bit)

d) https://drive.google.com/file/d/1q4UDFE3LKq55nRMRBTlLQjihtcBXIPrL/view?usp=sharing

(Standard RGB image is targeted: 80 kinds of object detection, test data to confirm how much is recognized by infrared image. This is a general COCO 32bit)

The download method is explained below, but please specify the URL and unzip the downloaded zip file, and then put it in the folder dedicated to Thermal Cam3x.

1.1 サファリの設定からダウンロード先を選択します。Select the download destination from iPhone Safari settings

サファリのダウンロード先を自分のiPhoneに変更します。標準ではiCloudとなっていますが操作が慣れてからiCloudに変更することをおすすめします。

Change the safari download location to your iPhone internal file. Although iCloud is the standard download location, we recommend to change to iCloud after getting used of it.

f:id:TAKEsan:20191110203225p:plain

1.2 上記のアドレスの中から学習データを選択します。Select Pre-learning data from the above addresses.

最初はa)を選択してみて下さい。ジャンケンの手の形や顔も判定できるので、手元で確認するには十分だと思います。どんな角度でも面白いようにジャンケンの手の形を判断する様子を確認できると思います。赤外線カメラの特徴としてWeb Cameraのように車などの画像を写しても対象物を手軽に判断できません。熱を発生する実物である必要があります。つまり手の形なら卓上ですぐに判定可能で、車の判定をさせるには外に出て実際の車を写さなければなりません。

First of all, select b).

Rock-Paper-Scissors✌️ of your hand or your face😃 can be detected, good enough to check feature to start with. You can see how to judge the shape of your hand and our model can detect at any angle of your hand. As a feature of the infrared camera, even if a thermal image of a car captured like Web Camera, the target cannot be easily determined. It must realy generate heat. In other words, if it is in the shape of a hand, it can be judged immediately at home, and in order to judge the car, you must go outside and capture the actual cars.

f:id:TAKEsan:20191110203327p:plain

1.3 ファイルアプリを開き以下の操作を実行します。Open the file app and do the following:

標準でインストールされているファイルアプリは、多少のコツが必要です。事前にファイルのコピー方法などを試してから以下に進んで下さい。特にiCloudの中にいるのか自分のiPhoneに入っているのか練習で感覚をつかむ必要があるようです。

The file app that is installed by default requires some tips. Please try the file copy method in advance.

And then proceed to the following. In particular, it seems to be necessary to practice whether you are in iCloud or in your iPhone internal file.

f:id:TAKEsan:20191110203408p:plain

このiPhone内->Download を選択します。ダウンロードが完了していれば、w_t.zip が確認できます。

Select This iPhone-> Download. When the download is complete, you can check w_t.zip.

f:id:TAKEsan:20191110203505p:plain

解凍した後はzipファイルが必要なくなるのでこれを削除、解凍したフォルダをアプリ専用のフォルダ(Thermal Cam3x又はThermal Cam Bフォルダ)に移動します。

After unzipping, the zip file is no longer needed, so delete it and move the unzipped folder to a folder dedicated to the app (Thermal Cam3x or Thermal Cam B folder).

f:id:TAKEsan:20191110203550p:plain

Thermal Cam3x 又は Thermal Cam B のフォルダを選択し、w_tフォルダを移動します。

Select the Thermal Cam3x folder and move the w_t folder.

f:id:TAKEsan:20191110203740p:plain

ダウンロードしたフォルダ名称はすべてw_tとなります。下図のように1つのフォルダと3つのテキストファイルが確認できます。内容を識別するにはw_tフォルダクリックしてREADME等のファイル内容を確認して下さい。また、w_t.namesファイルで何が認識できるか確認することができます。テキストファイルを編集することで拡張が可能ですが、編集作業はiPhone標準アプリではできないようなので、テキストファイル編集専用アプリ「Textor」などで作業を行う必要があります。

他のテキストファイル編集アプリ

  • Edidown(無料アプリ):現在はこれがおすすめです
  • Pythonista(有料アプリ:編集機能使用)

※現在Textorはアプリストアで公開されていません。GitHub - louisdh/textor: A plain text editor for iOSからダウンロードしてコンパイルする必要があります。

All downloaded folder names will be w_t. You can check one folder and three text files as shown below. Click the w_t folder to check the contents of files such as README. You can also check what can be recognized in the w_t.names file. Although it is possible to extend by editing the text file, editing work seems to be impossible with the iPhone standard application, so it is necessary to work with text file editing application “Textor” etc.

Other text file editing apps

  • Edidown(Free app:I recommend this now)
  • Pythonista (paid app:using editing function)

* Thor is not currently available on the app store. GitHub-louisdh / textor: Must be downloaded from A plain text editor for iOS and compiled.

f:id:TAKEsan:20191110204118p:plain

ファイル内容は以下の通りです。iPhoneでは拡張子が確認できない場合があるので注意して下さい。

  • w_t.mlmodelc 学習済みファイルが入ったフォルダ。内容は絶対変更しないで下さい。
  • w_t.names クラスの名称を改行コードを挟んで書き込んであります。この名称を使ってバウンディングボックスのクラス名称が表示されます。名称の変更が可能ですが、変更する場合は日本語に対応していない点と、全体の行数を変えないよう注意して下さい。あらかじめ作られた画像認識モデルは認識数が限定されています。
  • w_t.txt 認識後のアラートと、全体の認識率(しきい値)を設定するファイルです。このファイルのパラメーターを変更することで、認識結果に関するアラートを様々な形で変更できます。内容や変更方法は「3.認識結果アラートの設定方法」を確認して下さい。
  • README.txt ダウンロードした学習済みファイルの特徴が記入されています。

The file contents are as follows. Please note that the extension(.txt & .names) may not be confirmed on iPhone.

w_t.mlmodelc Folder containing Pre-learned files.

Never change the contents.

w_t.names

The name of the class is written across the line feed code(/n). The class name of the bounding box is displayed using this name. You can change the name, but please be careful not to change in Japnese(must not be 2bites language) and  the total number of lines. Pre-made image recognition models have a limited number of recognitions.

w_t(.txt)

This file sets alerts after recognition and the overall recognition rate (threshold). By changing the parameters in this file, you can change alerts related to recognition results in various ways.

Please confirm “3. Setting method of recognition result alert” for contents and change method.

README.txt

Contains the characteristics of the downloaded learned file.

2.画像認識スタート Start image recognition

 設定で選択すると、Thermal Cam 画像認識が開始されます。通常GPUをフルに使うと携帯端末がかなりの熱を帯びてきますが、今回のアプリはスピードをコントロールしているので極端に熱くはなりません。ただしポケットなどに入れてアプリを動かすことはなるべく避けて下さい。また電池の消耗が早いので、電池残量に気をつけて使用することをお勧めします。長時間使用する場合には電源を確保することと、携帯端末用の冷却ファンを使用して下さい。

When selected in Thermal Cam settings, Thermal Cam3x image recognition starts.

Normally, when you use the GPU(A13 Bionic) fully, your mobile device gets a lot of heat, but this app does not get extremely hot because it controls the speed. However, avoid walk with running the app in a pocket. In addition, caution as the battery is consumed quickly. When using for a long time, ensure the power supply and use a cooling fan for iPhone.

f:id:TAKEsan:20191110204200p:plain

3.認識結果アラートの設定方法 Setting recognition result alert

下図は「Textor」の編集画面でw_t.txtを開いた画像です。ここではそれぞれの設定内容を説明します。=を含めた左側の文字は変更しないで下さい。また、=の右側には必ず数値か文字を記入する必要があります。指定範囲外の数値を記入した場合は、標準値が適用されるので注意して下さい。

The figure below is an image of w_t.txt opened on the “Textor” editing screen. This section explains each setting. Do not change the characters on the left-hand side including the =. In addition, it is necessary to enter a numerical value or a character on the right side of =. Please note that the standard value will be applied if a value outside the specified range is entered.

f:id:TAKEsan:20191110204434p:plain

  • conf_all=0.4   全体の認識率(認識できるクラスのすべて)のしきい値を設定します。この値は0.1~0.9の範囲です。数値を小さくすると誤認識が多くなります。標準は0.4です。
  • iou_all=0.3   バウンディングボックスの重複係数を指定します。この値は0.1~0.9の範囲です。この数値を大きくすると同じクラス名での重複するバウンディングボックスが増えて画像がうるさくなります。標準値は0.3です。     

conf_all = 0.4

Set the threshold for the overall recognition rate (all classes that can be recognized). This value ranges from 0.1 to 0.9. Decreasing the number increases misrecognition. The standard is 0.4.

iou_all = 0.3

Specifies the overlap factor of the bounding box. This value ranges from 0.1 to 0.9. Increasing this number will increase the number of overlapping bounding boxes with the same class name and make the image annoying. The standard value is 0.3.

f:id:TAKEsan:20191110204943p:plain

iou_allを0.9にした場合の画像です。バウンディングボックスが重複してしいます

これらの数値の調整やダイナミックレンジスライダーの調整で、対象クラスの焦点を絞ることが可能です。また、学習モデルにより微妙に変更する必要がある場合があります。

以下の設定は、指定したクラスについて認識結果を基に特殊なアラートを出します。今のところ対象クラスは1種類だけとなります。

  • class=7 学習済みファイルのクラス数又は0を指定します。対象とするクラス番号です。w_t.namesに書き込んであるクラス名称の先頭番号を1として指定します。アラートが必要ない場合は0を記入します。下図の場合でclass 7はGooを指します。

By adjusting these values and adjusting Dynamic Range !! slider, you can focus on the target class. It may also need to be changed slightly depending on the Pre-learning model.

The following settings issue a special alert based on the recognition result for the specified class. Currently there is only one target class.

class = 7

Specify the number of classes of Pre-learned files or 0. The target class number. Specify 1 as the top of the class name written in w_t.names. Enter 0 if no alert is required. In the case shown below, class 7 refers to “Goo”.

    f:id:TAKEsan:20191110205031p:plain

  • conf=0.7 対象とするクラスのしきい値を入力します。0.7とした場合は、対象とするクラス番号7が70%以上の認識率であった場合、アラート処理を実施するという意味になります。0.1~0.99の範囲で指定します。標準値は0.7です。
  • disply=1   画面左下にクラス名称などを表示させます。  

  0 :画面左下にクラス名称の表示は行いません。
  1 :画面の左下に対象とするクラス名称と同一画面に映った対象物の数を表示します。      

conf = 0.7

Enter the target class threshold. When 0.7 is set, it means that alert processing is executed when the target class number 7 has a recognition rate of 70% or more. Specify in the range of 0.1 to 0.99. The standard value is 0.7.

disply = 1 : Class name etc. are displayed at the lower left of the screen.

0: Class name is not displayed at the bottom left of the screen.     

f:id:TAKEsan:20191110205143p:plain

    2 バウンディングボックスの数値部分をタイムスタンプに変更します(標準は認識率表示)。この設定は指定クラスに依存しません。

 

f:id:TAKEsan:20191110205359p:plain

   3 BOSON版のみで機能します。クラス名称のみ表示され数値は表示されません

2: Change the numerical part of the bounding box to the time stamp (standard is the recognition rate display). This setting does not depend on the specified class.

  • thermals=0.9   BOSON版のみで機能します。0以外でメモリー機能ON。数値を記入すると、メモリーした温度がここで指定した温度以上の場合に以下のcountry命令を実行します。thermalsに0以外の数値を記入した場合、カーソル指示はできなくなりカーソルは中央固定になります。1回タップで class,conf の条件に合った対象物を認識した場合、認識した対象物中心の32x64ポイント(2048点)の中の最高温度を記憶。ダブルタップでメモリーがクリヤされます。温度が記憶された段階で、認識した対象物の中心部温度(2048点の最高温度)とメモリー温度との差が表示されます。メモリークリヤすると、温度表示は対象物の温度表示に切り替わります。一度メモリー登録をするとダブルタップするまでメモリーは消えません。メモリーした温度が少し違う場合は、すぐダブルタップして「メモリー解除->温度を見ながらシングルタップ」を繰り返します。メモリー登録中はカーソルを移動すると右の9x9画像表示が変わります(中の温度も)小さくて見にくいですが一応カーソル温度も確認できます。thermalsを0にすれば一般機能に戻ります。また、この機能が働いている場合、display機能は無視されます。

f:id:TAKEsan:20200419111825p:plain

例)class=8(チョキ)conf=0.7、thermals=0.3の場合。

thermalsの数値が0以外でメモリーがクリア状態の場合(右中央の温度表示が画像中央のカーソル部分の温度が白で表示)は、display、country命令は無視されます。そして画像上のチョキである確率が70%以上のとき、バウンディングボックス中央部にカーソルが現れて、バウンディングボックス中央を中心に2048点の中での最高温度を表示します。複数のチョキが現れた場合は、高い温度の方のカーソル中央部に黒丸が表示されます(画像左側のチョキ)。標準機能に戻すにはthermals=0である必要があります。

 

f:id:TAKEsan:20200419111945p:plain

例)class=8(チョキ)conf=0.7、thermals=0.3かつ事前に計測した温度がメモリーされている場合

thermalsの数値が0以外でメモリー状態の場合(右中央の温度表示はメモリーされた温度を緑で表示)は、country命令が実行されます。つまり、「country=ja  voice=発熱者が発見されました 」であれば、画像上のチョキである確率が70%以上で、かつメモリー温度との差が0.3以上の場合Siriは「発熱者が発見されました」と警告します。標準機能に戻すにはthermals=0である必要があります。

  • country=us    アラートの種類を指定します。(すべて英半角2文字で指定)   

   ja又はus指定した認識率以上であれば英語または日本語で以下voiceに書き込まれた文章を読み上げます。

   so  soundの略。指定した認識率以上であれば、警戒音を出します。口笛の音限定です。

   fl   flashの略。指定した認識率以上であればカメラのフラッシュを2回発光します。

  • voice= Please_note_that_is_a_car

countryをja又はusとしたときに発声する文章を記入します。英語の場合は60文字以内、日本語の場合は30文字以内で、なるべく1.5秒以内で終了する文章を記入して下さい。英語の場合は、空白部分を必ずアンダーバーに置き換えて下さい。jaに設定した場合で英語表記をすると英語発声が非ネイティブになります。

この設定例でclass番号を3に変更した場合、例えばLEPTON端末を自転車の後ろに設置して、iPhoneアプリを実行させ、後ろから70%以上の認識率の車が迫ってくると Please note that is a car !! とiPhoneが教えてくれます。日本語指定の場合は「車が来ます」でも良いですね。赤外線カメラですから当然真夜中でも!!

country = us

Specify the type of alert.(All specified with two single-byte characters)

ja or us: If the recognition rate is higher than the specified rate, the text written in the Siri voice below will be read out in us=English or ja=Japanese.

so: Abbreviation for “sound”. If the specified recognition rate is exceeded, a warning sound is emitted. Only “whistling” sounds.

fi: Abbreviation for flash. If the specified recognition rate is exceeded, the camera flash will fire twice.

voice = Plaese_note_that_is_a_car

Enter the text to be uttered when country is ja or us. For English, enter up to 60 characters, for Japanese(2bites), up to 30 characters. it should be sound within 1.5 seconds.

For English, be sure to replace the blank with an underscore(_). If it is set to ja and English is used, English utterance will be non-native.

If you change the class number to 3 in this setting example, for example, if you install the LEPTON terminal behind the bicycle and run the iPhone application, if a car with a recognition rate of 70% or more approaches from the back, Plaese note that is a car !! and iPhone(Siri) will tell you. In the case of ja, “car will come” is also in Japanese. Of course, it’s an infrared camera, even at midnight ! !

f:id:TAKEsan:20191107125316p:plain

実際に実現させたら.....。特に自転車では危険な細い道ではアラーム効果の利点が確実に体験できました。実際には左下にCarと表示された認識率70%段階でアラームが鳴っています。(開発段階の動画です)

Actually tested … The advantage of the alarm effect was definitely experienced on the narrow roads that are particularly dangerous for bicycles. Actually, the alarm is sounding at the recognition rate of 70% displayed as Car in the lower left. (This is a video at the development stage.)

 

 w_t.txtの内容を「textor」等で編集してDoneで保存した場合、すぐに設定が反映されますので、変更しながら最適なアラートを見つけて下さい。

When you edit the contents of w_t.txt with “textor” and save it with Done, the settings will be reflected immediately, so find the best alert while changing your setting.

-----------------------------------------------------------------------------------------------------

4.YOLOv3学習済みファイルの変換方法 How to make YOLOv3 Pre-learned files.

ここからは十分に経験と知識のある方、NVIDIAGPUを積んだLinuxマシンが動く環境が使える方が対象です。最初は非常に複雑なインストール作業を伴いますが、2回目以降はさほどでもありません。概要は以下の通りです。内容を理解した段階でMac側の一連の作業をPython等にまとめると効率が上がります。

linuxマシンで学習->学習済みweightsファイルをmacにコピー->h5ファイルに変換->coremlファイルに変換->coremlcファイルに変換->txtファイルを3つ作成-->zipに圧縮 

From here, it is for those who have sufficient Deep learning experience and knowledge, and who can use an environment where Linux machines with NVIDIA GPUs can run. The first involves a very complex installation(according to https://github.com/AlexeyAB/darknet), but not much after the second time. The outline is as follows. When you understand the contents, you can improve the efficiency by grouping a series of tasks on the Mac side into Python.

Learning on linux machine-> Copy learned weights file to mac-> Convert to h5 file-> Convert to coreml file-> Convert to coremlc file-> Create three txt files-> Compress to zip

4.1 録画した赤外線画像データをアノテーションする。Annotating LEPTON images and learning

学習データ画像はThermal Cam3xで録画したファイルを使います。アノテーション及び学習方法はこのページを参照して下さい。

YOLOオリジナルデータの学習 - Take’s diary

YOLOオリジナルデータの学習その2(追加学習) - Take’s diary

さらに詳しい内容は以下URLを参考にして下さい。

darknet/cfg at master · AlexeyAB/darknet · GitHub

 

iOSで実行するためには特に以下の設定が必要です。

  • 設定ファイル(CFGファイル)は yolov3-voc.cfg又はyolov3.cfgを使用します。
  • 入力画像の大きさは with=416 heights=416 限定です。
  • YOLOv3.cfgの設定ファイルは参考ページにも説明していますが、classがらみで合計10カ所以上の変更が必要です
  • 学習の収束を早めるための初期weightsファイルは、darknet53.cov.74をダウンロードして使用します。

The learning data image uses a file recorded with Thermal Cam3x. Please refer to this page for annotation and learning methods.

YOLOオリジナルデータの学習 – Take’s diary

YOLOオリジナルデータの学習その2(追加学習) – Take’s diary

Please refer to the following URL for further details.

darknet/cfg at master · AlexeyAB/darknet · GitHub

In order to run on iOS, the following settings are required.

Use yolov3-voc.cfg or yolov3.cfg as the configuration file (CFG file).

The size of the input image is limited to with = 416 heights = 416.

The configuration file of YOLOv3.cfg is also explained on the reference page, but it is necessary to change a total of 10 or more locations in relation to the class

Download and use darknet53.cov.74 as the initial weights file to speed up learning convergence.

4.2 MacにYAD2Kをインストールする。Install YAD2K on your Mac.

以下python3.7用のanaconda環境を作り、YAD2K及びkerasをインストールします。インストール方法は各々冒頭に記述されています。ただし最初のKerasインストール時はTensorflowインストールコマンドのみ conda install -c anaconda tensorflow==1.14 つまりtensorflowのバージョンは1.14にして下さい。

Create Anaconda environment for python3.7 below and install YAD2K and keras. Each installation method is described at the beginning. However, when installing Keras for the first time, only the Tensorflow installation command is used. Conda install -canaconda tensorflow == 1.14 That is, tensorflow version should be 1.14.

GitHub - allanzelener/YAD2K: YAD2K: Yet Another Darknet 2 Keras

GitHub - qqwweee/keras-yolo3: A Keras implementation of YOLOv3 (Tensorflow backend)

4.3 Kares を使ってYOLO学習済みファイルをコンバートする Convert files created in 4.3 to mlmodel

keras-yolo3-masterフォルダに入ってから、以降もanaconda環境の中で作業を行います。

まずconvert.py を実行しますが、このままではエラーが出てしまうので、convert.pyの88行目をinput_layer = Input(shape=(416, 416, 3))に変更します。

次に、同じディレクトリへ該当するweightsファイル、そして学習で使ったcfgファイルを入れておきます。

cfgファイルのはじめに設定しているパラメーターを bach=1 subdivisions=1に変更しておき、以下のコマンドで 新たにh5ファイルを作成します。cfg、weightファイル名はコピーしたそれぞれのファイル名に変更し、.h5ファイルは好きな名称を付けます。

この例ではdataフォルダにh5ファイルができます。

After entering the keras-yolo3-master folder, the following work is also performed in the anaconda environment.

First of all, convert.py is executed, but an error will occur if this is done, so change the 88th line of convert.py to input_layer = Input (shape = (416, 416, 3)).

Next, put the corresponding weights file in the same directory and the cfg file used for learning.

Change the parameter set at the beginning of the cfg file to bach = 1 subdivisions = 1, and create a new h5 file with the following command. Change the cfg and weight file names to the copied file names, and give the .h5 file a name of your choice.

In this example, an h5 file is created in the data folder.

./convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

4.4 4.3でできたファイルをmlmodelに変換する

Apple 提供のcoremltoolsをインストールします

pip install coremltools

新たにフォルダを作成し(yolo_coremlと仮定)

mkdir yolo_coreml

cd yolo_coreml

以下のpythonプログラムを作成します

この中で3行目の ../../keras-yolo3-master/model_data/yolo.h5 は先ほど作成したh5ファイルを指定して下さい。

Install coremltools provided by Apple

pip install coremltools

Create a new folder (assuming yolo_coreml)

mkdir yolo_coreml

cd yolo_coreml

Create the following python program

In this, please specify the h5 file created earlier for ../../keras-yolo3-master/model_data/FLIR_J.h5 on the third line.

coreml.py

--------------------------------------------------------------------------------------------------

import coremltools

 

coreml_model = coremltools.converters.keras.convert('../../keras-yolo3-master/model_data/yolo.h5', input_names='input1', image_input_names='input1',  image_scale=1/255.)

coreml_model.input_description['input1'] = 'Input image'

 

coreml_model.author = 'Original paper: Joseph Redmon, Ali Farhadi'

coreml_model.license = 'Public Domain'

coreml_model.short_description = "The YOLOv3 network from the paper 'YOLOv3: An Incremental Improvement'"

 

coreml_model.save('w_t.mlmodel')

 --------------------------------------------------------------------------------------------------

python coreml.py

の実行で、フォルダ内にw_t.mlmodelファイルが作成されます。多少時間がかかります。

python coreml.py

Execution will create a w_t.mlmodel file in the folder.

4.5 標準では32ビットデータなのでデータ容量を減らしたい場合は16bitに変換する Standard is 32-bit data, so if you want to reduce the data capacity, convert it to 16-bit

16bitモデルは認識率が多少落ちるので、用途に応じて対応して下さい。16bitモデルに変更する場合は以下のpythonプログラムを作成して実行します。

The 16bit model has a slightly lower recognition rate. To change to the 16bit model, create and execute the following python program.

convert16.py

--------------------------------------------------------------------------------------------------

import coremltools

model_spec = coremltools.utils.load_spec('./w_t.mlmodel')

model_fp16_spec = coremltools.utils.convert_neural_network_spec_weights_to_fp16(model_spec)

coremltools.utils.save_spec(model_fp16_spec, 'w_t.mlmodel')

--------------------------------------------------------------------------------------------------

4.6 mlmodelをmlmodelcに変換する Convert mlmodel to mlmodelc

mlmodelコンパイルしてmlmodelcファイル(実はフォルダ)を作成します。必ず最終ファイル名はw_t.mlmodelcであることを確認して下さい。

Compile mlmodel and create mlmodelc file (actually folder). Make sure that the final file name is w_t.mlmodelc.

/Applications/Xcode.app/Contents/Developer/usr/bin/coremlc compile w_t.mlmodel ./

4.7 さらに3つのファイルを用意する Prepare 3 more files

w_t.names   : 学習に使ったクラス名称ファイルで、ファイル名称を変更して使用します。

w_t.txt   :「3.認識結果アラートの設定方法」を参考にして下さい・

REDME.txt :名称、内容とも任意で、実際には使用しません。今回の作業ファイルはすべて同じ名称にしなければないので、後から確認できるようにデータ内容の説明を記入して下さい。

w_t.names : The class name file used for learning is used by changing the file name.

w_t.txt        : Refer to “3. Setting method of recognition result alert”.

REDME.txt : Name and content are optional and are not actually used. All work files must have the same name, so please enter a description of the data so that you can check it later.

4.8 合計4つのファイルを新たに作成したw_tフォルダに移動する Move a total of 4 files to the newly created w_t folder

w_tフォルダを作成して、中にw_t.mlmodelcフォルダ、w_t.names、w_t.txt.、README.txtをコピーします。

Create a w_t folder and copy the w_t.mlmodelc folder, w_t.names, w_t.txt., and README.txt into it.

4.9 フォルダをzipに変換して自分のアカウントを持つicloudへuplodeする Convert folder to zip and uplode to icloud with your account

w_tフォルダをzipに圧縮します。iPhoneから一番使いやすいダウンロード先はiCloudです。今回のThermal Cam3xはフォルダ名がw_t限定なので、モデル毎にフォルダ管理して下さい。

Compress the w_t folder to zip. The easiest download location for iPhone is iCloud. Since this Thermal Cam3x folder name is limited to w_t, please manage folders for each model.

 

最後に Finally

Thermal Cam はOSCを使ってデータを送受信していて、OSC通信を使ったシンセサイザーや、複数のESP8266、コンピュータとの交信が可能です。また今回のバージョンはユーザーが用意した画像認識データを自由に利用できるAI画像認識に対応できたので、赤外線カメラを利用したいろいろなアイディアがiPhoneiPad で実現できます。今後は認識アラートの強化を進めていく予定ですが、皆さんのちょっとしたアイディアが、実用性と面白さを伴って生み出されて行くことを願っています。

Thermal Cam3x transmits and receives data using OSC, and can communicate with synthesizers using OSC communication, multiple ESP8266s, and computers. This version also supports AI image recognition that allows users to freely use image recognition data prepared by the user, so various ideas using infrared cameras can be realized on the iPhone or iPad. In the future, we will continue to strengthen awareness alerts, but I hope that your little ideas will be produced with fun.

Goto Home

----------------------------------------------------------------------------------------------------------------------------

 

 

 

*1:残念ながら内臓GPU性能に依存するためiPhone X以前の機種では使用できません。また事前に学習済みファイルを所定のフォルダにダウンロードする必要があります。Unfortunately, it depends on the built-in GPU(Bionic chip) performance and cannot be used with iPhone X or earlier models. In addition, it is necessary to download the learned files to a predetermined folder in advance.

*2:現在公開しているテスト用学習済みファイルは3種類です。There are three types of test-learned files currently available.

*3:複数のESP8266にメッセージを送るなど今後機能を増やしていく予定です。We plan to add more functions in the future, such as sending messages to multiple ESP8266.

Maker Faire Kyoto に向けて

W&T Thermal Cam1,3,D,Y ?

LEPTONとは米国FLIR社が製造している超小型サーモグラフィーカメラ(センサー)で、大きく分けて画素が80x60のLEPTON1、160x120のLEPTON3が販売されています。I2CとSPIを使って制御する少々お高いセンサーですが、格安ESP8266を利用して、iPhoneで表示させるアプリを作りました。

          f:id:TAKEsan:20180924212322p:plain

私たちが製作したものは、LEPTON1、3とも制御可能で、さらに2台同時に使うことにより距離認識が可能です。概要は、FLIR社のMaker Community   https://lepton.flir.com/community-showcase-items/thermal-stereo-cam/

          f:id:TAKEsan:20190129210342j:plain

に掲載されています。今回Maker Fair Kyotoへの出展応募に当たり、この仕組みを応用してワクワクするような展示を考えています。

PI3 LEPTON

過去2回Maker Faire Tokyoに出展経験がありますが、会場ではWIFIが繋がりにくく、急遽ビデオによる紹介しかできずに悔しい思いをしていました。そのため、今回はESP8266の代わりに有線LANでもWIFIでも対応できるラズベリーパイ3(以降PI3)でLEPTON3を動かすことにしました。海外でこの組み合わせに成功した事例が公開されているので楽勝かと思ったのですが、大きな問題がありました。Linuxマルチタスク処理が主な原因で、LEPTON3+PI3では数分〜数時間で止まってしまうのです。FLIRがこの組み合わせのソースを公開していない理由が、体験を通して理解させられることになりました。でも、私たちは基盤とソフトの工夫で、これを克服することができています。PI3単独で赤外線画像(暗視画像)を表示するだけでなく、iPhoneの代わりに使ったNvidiaのTX2やXavierからでもLAN経由で画像制御と動画表示が可能です。まずこれが1つ目の展示です。

f:id:TAKEsan:20190131141622j:plain

               PI3は電源供給だけ!後ろの画像はPI3から送られた画像をNVIDIA Xavierで表示させてます。 

f:id:TAKEsan:20190131101008p:plain

ホストマシンの画像です。2D、3D画像や画像調整、17種類のカラー表示が2D、3D側別々に指定可能。ポイント温度はもちろんポイント周辺の温度も測定できます。

PI BOSON

FLIRにはLEPTONの上位機種でBOSONという名称のサーモグラフィーカメラも存在します。こちらは2種類。320x256(QVGA)又は640x512(VGA)の画素で非常に小型な上、フレームレートも最高60fps(LEPTONは日本国内では10fps以下)というとんでもない性能。たまたまVGAカメラを借りることができましたが、こちらは価格が60万円以上という宝石並みの高額商品です。この時の比較テストで、LEPTON3のたかだか160x120画素でも、私たちが今まで開発したものは画質がかなり良いことが分かりました。VGAカメラの1/3の価格であるQVGAでこのアルゴリズムを応用した場合どうなるのか…?果たしてVGAの代替え機種になるのでしょうか?私たちの2つ目の展示予定作品です。

                                     

                    BOSON VGA の参考画像画像。流石に素晴らしいスピードと解像度です。

        f:id:TAKEsan:20190130130732p:plain           f:id:TAKEsan:20190130130805p:plain

          160x120 LEPTON3出力(GloupGes PURETHRMAL 2)                           今回の画像(319x239補完画像) 

               両者同じLEPTON3.5で撮影したものですが全く印象が違うことが確認できます。

f:id:TAKEsan:20190129214131p:plain

    画角は異なるが左がThermal Cam 3(LEPTON3.0)画像。右はBOSON VGA 。LEPTON 160x120でもディテールがかなり再現できている。

f:id:TAKEsan:20190129214154p:plain

            同上。この方法で、BOSON QVGA(320x256画素)がVGA(640x512画素)に追いつく可能性があります!!

おうちクラウドAI 

PI3と同一LAN上に接続した小型で省電力なGPUを持つNVIDIA TX2やXavierで、AIを活用しない手はありません。ただし、これらの機種でも標準的なデータセットで動画認識のスピードを上げるには、かなりの努力が必要です。私たちはまずTX2やXavier でYOLO V3やV2を現実的なスピードで実行する方法を考えました(眠っている昔のGPU付きマシンでも実現可能)。PI3で処理した赤外線画像データをメインPCに送り、AIで認識したバウンディングボックス座標をPI3に表示させたらどうなるか?これが「おうちクラウドAI」です。XavierもPI3もGPIOが使えるので、お互いにAIを応用した様々な制御が可能になります。この仕組みはAWSに応用できると思いませんか?今できているシステムはこれです。どちらも開発が容易なOpenframeworksで実現していることにも注目して下さい。さらに発展させて、高画質化したBOSON QVGAで展示しようと思っています。それが3つ目の展示予定作品です。ジャンケン判定で何か動くものを作ってみようと思います。

              

                                                                                  どんなのかは、この動画で!!

f:id:TAKEsan:20190129223322p:plain

                        夜間の動物被害に応用できそう。

サーボジンバル

もともとESP8266+LEPTON3+iPhoneの構成は、小型ドローン搭載により安価な計測システムを作ることが目的でした。基盤やソフトの改良で電波到達距離を伸ばしましたが、機体が姿勢制御で揺れた場合、画像がすぐ画面から外れてしまいます。よってカメラ側の揺れ対策が最後の課題。誰でも導入できてシステム価格が安く、軽くできたら…。DJ1やDOBYへ手軽に搭載できて、撮影対象物を大きく外す事なく録画できたら…。ドローンから発生する様々なノイズ対策は、私たちにはとても難しい課題でしたが、もう少しの改良で実現できる確信があります。4つ目の展示として鋭意作成中です。

                最後に

素人エンジニアと素人プログラマーが作った複雑で高度な処理が、あっけないほど手軽に実現できる様子を会場でお見せできると思っています。

追伸

おかげさまで、今まで作ったすべてのモノをさらに進化させて展示することができました。いろいろな意見をいただいて、とても有意義な2日間となりました。みなさんありがとうございました。

f:id:TAKEsan:20190510223431p:plain