FT232HとMPU-9250/6500

お世話になりました。

https://qiita.com/kotai2003/items/0c96143b7d6e84629d99

https://zadig.akeo.ie/

https://learn.adafruit.com/circuitpython-on-any-computer-with-ft232h/windows

Python:datetimeモジュールで細かい時間(msec, μsec)を出したいとき

datetimeで作った時刻データでは、秒よりも細かい6桁の数字が含まれています。

単位はマイクロ秒 なので ミリ秒で出したいときは下記のように出せます。

結果出力

Python: numpyとlistのappendの違い

numpyとlistのappendの違い

センサーから時系列で入ってくるデータを変数に格納したい時、ありますよね。

普段はlistとしてli = []のような空リストを作ってからli.append(入ってくるデータ) でどんどんリストの要素として追加していましたが、時間方向の分解能を高めるために、numpyを使おうとすると、直感ではうまくできなかったので、メモしておきます。

numpyのappendは破壊的でないため、変数に再代入しなくてはappendの結果が反映されません。注意点はここだけです。

 

 

python:flaskの基本2 GET, POST, PUT, DELETE

今日はflaskが実行されているサーバーのIPアドレス127.0.0.1:5000に対して、クライアントからPOSTするやりかたを見ていきます。

flaskサーバー側のスクリプト

flaskのメインスクリプトに下記の関数を追加します。

これをVScode右上の再生ボタンでRUNさせておきます。

127.0.0.1:5000でRUNし始めたはずです。

クライアント側のスクリプト

これに対して、クライアント側からPOSTするために、pythonファイルを新規作成してrequestsモジュールのpostメソドを使ってアクセスしてみます。

で、これをVScode上ではなくて、cmdを開いてそこから実行すると。

cmdでクライアント側のスクリプトを実行

(‘username’, ‘mike’)が返ってきています。

 

以上、GET, PUT, DELETEも同じやり方です。

python:flaskの基本

flaskをちょっといじってみます。

IPアドレスは127.0.0.1:5000がデフォルトとのこと。

  • トップページ
  • トップページの下層にページ1
  • トップページの下層に引数付きのページ2
 

テンプレートを使ってみます。

同層にディレクトリtemplatesを作成して、その中に下記のようなhtmlファイルを作成します。{% ○○ %} を使うとif文が使用できたりします。

 

pythonファイルにはrender_templateを使用して下記のようにhtmlファイルを呼び出します。

 

次回は、get, post, ,put, delete をやっっていきます。

 

 

 

 

 

OpenCV:異物検出プログラム

Jetaon Nanoで異物を検出したいのですが、まずは使い慣れたPCで作ってみます。

カメラ

エレコム WEBカメラ 200万画素 マイク内蔵 MAC対応 ブラック UCAM-C0220FBNBK

2015年に買った、2000円くらいの安物です。

レア過ぎて価格にプレミアがついていました。

インストール

参考にさせていただきました:https://www.kkaneko.jp/tools/win/cv2.html

Python3.7.7を入れました。最新の3.8.2はOpenCVが対応してない可能性があるのでやめておきました。

https://www.python.org/downloads/release/python-377/

Windows x86-64実行可能インストーラー

cmdでpythonとして、 3.7.7が起動させます。

pip listをすると

pip 19.2.3
setuptools 41.2.0
WARNING: You are using pip version 19.2.3, however version 20.0.2 is available.
You should consider upgrading via the ‘python -m pip install –upgrade pip’ command.

とバージョンアップを促されるので、

python -m pip install –upgrade pip

します。

numpyも入れてみましょう。

pip install numpy で1.18.2が入りました。

ではVScodeを起動させて、メニュー>view > select interpriter で python 3.7.7を選択し・・・たいところですが、ありません。

一旦VScodeを起動させ(まだpython 3.7.7は表示されない。)、そしてVScode下部のターミナルで一旦pythonを起動させます。3.7.7が起動しました。

スクリプト実行を何回かさせて、numpyがないよー、と言われながら、interpriterの指定を開くと,python 3.7.7が選択できるようになっていました。

で、スクリプトを実行すると、今度はcv2がないよー、といわれましたので、cmdから

で入れました。opencv-python-4.2.0.34が入りました。

cmdでエラーが出るときは、Power Shellを管理者権限で開いてやってみましょう。

で、確認です。

その他のライブラリをインストール

VScodeをいじっているとpylintをいれてと促されるので

$ -m pip install -U pylint –user

いろんなライブラリも同時に勝手にはいりました。

Package Version
—————– ——–
astroid 2.3.3
colorama 0.4.3
isort 4.3.21
lazy-object-proxy 1.4.3
mccabe 0.6.1
numpy 1.18.2
opencv-python 4.2.0.34
pip 20.0.2
pylint 2.4.4
setuptools 41.2.0
six 1.14.0
typed-ast 1.4.1
wrapt 1.11.2

エラー

こんなんがでます、frame.shepeがわからないそうです。
File “c:/Users/keita/scripts/shihenDetector/main.py”, line 39, in <module>
height, width, channels = frame.shape
AttributeError: ‘NoneType’ object has no attribute ‘shape’

 

frame.shepe[:3]にして、カメラ番号を1から0に変更したら内蔵カメラが映りました。

webカメラをUSBに指して、カメラ番号1に戻したらこれでも映りました。

ということで[:3]は関係なかったと思われます。

画像処理

OpenCVで

案1:BGR画像→グレースケール→検査窓トリミング→現在画像→二値化

案2:BGR画像→グレースケール→検査窓トリミング→初期画像と現在画像を差分を取る→二値化

 

の2案をやってみましたが、結果的に案1を採用します。

案1は、背景が動いたりカメラが動いたりしたときでも、検出精度は変わらない利点があります。

案2は、初期画像と現在画像を比較するので、背景になんらかの均一でない構造があったとしても、初期画像と現在画像で比較するので異物検出のロバスト性が高くなる利点があります。しかし、背景が動いたりカメラが動いたりして、初期画像とのズレが発生するとと検出できないか検出精度が大幅に落ちます。

今回は、よりシンプルな案1でやっていきます。

結果

スクリプトを回すと自動的に時系列データがcsvファイルとして入ってきます、

グラフ化

作成されたcsvファイル読み込んでグラフ化しました。

横軸が時間、縦軸は検出された異物(黒)の画素数です。

 

検出画像

開始5秒の画像は異物がない、まっさらな状態です。影一つありません。

開始15秒で5mm程度の異物を置いてみました。黒い点が現れます。

開始60秒で1mmと5mm程度の異物を置いてみました。どちらも黒い点になって現れます。200万画素の安物カメラでもこれだけの精度が用意に出ます。

周囲の照明コンディションが良ければ、0.5mm程度までは検出できそうです。

メインスクリプト

グラフ作成スクリプト

pandasとmatplotlibを使うのでインストールします。

pip install pandas

installed pandas-1.0.3 python-dateutil-2.8.1 pytz-2019.3

pip install matplotlib

installed cycler-0.10.0 kiwisolver-1.2.0 matplotlib-3.2.1 pyparsing-2.4.7

はい、ではスクリプト実行しましょう。

以上です。

shihenDetector

Python:一定の時間間隔でプログラムを実行する方法

一定の時間間隔でプログラムを実行する方法を考える必要がありましたので、考えたスクリプトをメモしておきます。

これを使えば、OpenCVを使っているときに、while文の中で動画を取得し処理している最中に、任意のインターバルで時刻や分析データをファイルに保存することができます。

スクリプト

出力結果

0.001sec つまり 0~1msec程度の遅れがあります。

私の用途では、十分許容できます。

 

以上

 

Jetson Nano: Python OpenCVからMIPIカメラへアクセスする方法

参考にさせていただきました。

https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32

 

今回で画面が緑色になってしまう問題を解決できるか!

試運転:shellからでは映像が出力できています。

 

Python3から nano_cam_test.py を実行してみるとエラーが出ます。

エラー:

たぶん、カメラが対応している解像度と違うからでしょう。

直してみましょう。

Jetson Nano: OpenCV 4.1.0をインストールする

やっていきましょう。

参考にさせていただきました。

  1. https://qiita.com/daisuzu_/items/8cc8de8ea8dc557a2aad
  2. https://qiita.com/wawoon/items/f61338d6e11a8e9521a4
  3. https://pysource.com/2019/08/26/install-opencv-4-1-on-nvidia-jetson-nano
  4. https://qiita.com/tsutof/items/2d2248ec098c1b8d3e32

自動インストールのシェルスクリプトを保存

下記、シェルスクリプトをファイル名 install_opencv4.1.0_Nano.shとしてホームディレクトリに保存します。まだ保存するだけです。

メモリ領域の確保

メモリ領域を確保するために下記4つを、順番にやりますが、一つ一つに時間がかかりますので、進まないからといってターミナルを4つ開かないように!(やって失敗したのは私だけで十分です。)

で、この4つではOpenCV4.1.2もOpenCV4.1.1もうまくいかなかったので、気を取り直して下記の3つをやりました。

おそらく、上記4つは必要ないと思いますので試しに飛ばしてみてください。(リブートしなかったのが良くなかったのか?したかどうかも覚えてませんw)

目的は同様にメモリの確保で、4GBでよいっぽい。デフォルトが2GBなので 式中の割る2を削除すればOKです。

リブートできたら、コンパイル~インストールしましょう。

Pythonでインポートして確認

import cv2してprint(cv.__version__)で

4.1.0と出力されたらOKです。

課題:MIPIカメラが使えない

・pythonからvideoCapture(0)したところ、MIPIカメラでは緑一色の画面しか出力されない。numpy.arrayなのでRGBを確認すると、きれいにすべての画素でR, G, B =[0, 255, 0] ですw 助けてくださいw

・安物のwebカメラではvideoCapture(1)したところ、問題なく映像が出力されています。ついでに顔認識などやってみましたが問題なし。

うーん、このままUVCカメラしか使えないのも尺ですしねえ。せっかくの800万画素のソニーIMX219センサが無駄になってしまう・・・

解決法ありましたら、コメントお願いします🙏

いつか4.1.2を入れられるようになりたいです。

Jetson Nano:カメラの試運転

使ったカメラ

SainSmart IMX219 AIカメラモジュールNVIDIA Jetson Nanoボード用8MPセンサー77度FoV

商品の謳い文句です

  • このカメラモジュールはNVIDIA Jetson Nano BoardとRaspberry PI CM3用に設計されています。
  • 800万画素のIMX219センサーを搭載し、77度の視野を備えています。 (ドライブボードは不要になりました。)
  • 1080 p @ 30 fps、720 p @ 60 fpsおよび640 x 480 p 60/90ビデオ録画をサポートします。 電源インターフェースにより、3.3Vの出力電源にも対応しています。
  • このカメラモジュールは、AIインテリジェント認識、顔認識、道路識別線認識、ナンバープレート認識などに広く使用されています。
  • 1年間の保証:製品についてご質問がある場合は、電子メールでお気軽にお問い合わせください。不良品が届く場合、または非人為的な故障が出る場合、無料交換できます。

パラメータ

CMOSサイズ:1/4インチ
絞り(F):2.8
焦点距離:2.4mm
視野:77度
歪み:<1%
解像度:3280 x 2464
4つのネジ穴:定位置用
サイズ:25mm×24mm×19mm

パッケージ一覧

1×SainSmart IMX219 AIカメラモジュール「発送重量:0.02kg」

マニュアル

http://wiki.sainsmart.com/index.php/101-40-249

カメラが機能するか確認します

カメラモジュールが正しく認識していると /dev/video0 というディレクトリが自動的に作成されますのでcd で確認してみましょう。

同時にwebカメラを接続してみたところvideo1というディレクトリも作成されました。

デスクトップにカメラ画像を映し出すには

$ nvgstcapture

と打ちます。

参考にさせていただきました。

http://www.neko.ne.jp/~freewing/raspberry_pi/nvidia_jetson_nano_setup_raspberry_pi_camera_module_v2/