Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

高機能なGPSモジュールZED F9Pをつかう その3:RasPiでつかうときはボーレートを自力で変更する

RaspberryPiで使用する場合、i2cのボーレートを上げないといけません

qwiic.QwiicUbloxGps().address
============================================================================
 NOTE:
 For and of the ublox gps units to work on the Raspberry Pi, I2C clock stretching
 must be enabled.
 The following line must be added to the file /boot/config.txt
    dtparam=i2c_arm_baudrate=10000
 For more information, see the note at:
          https://github.com/sparkfun/qwiic_ublox_gps_py
============================================================================
66

というわけで、

余談

どういうわけかI2Cチャンネルが 'Qwiic 4m Distance Sensor (ToF)'と同じ0x42を使っておりブッキングをおこしています……

高機能なGPSモジュールZED F9Pをつかう その2:NMEAフォーマットを扱う

以前の記事でも紹介した通り、GPS信号はNMEAフォーマットというのできます。
これが最高に使いづらく、一々使い捨てパーサーを書くのもなんか負けた気がします。

環境がPythonの場合は、パーサーライブラリがあります。
ユーザーが多い環境は便利だなぁ(白目

github.com

import pynmea2
msg = pynmea2.parse("$GPGGA,184353.07,1929.045,S,02410.506,E,1,04,2.6,100.00,M,-33.9,M,,0000*6D")

msg.timestamp
#>> datetime.time(18, 43, 53)

msg.lat
#>> '1929.045'

msg.lon
#>> '02410.506'

【読書メモ】実践GAN ~敵対的生成ネットワークによる深層学習~

機械学習はまるで分野外だったのですが、勉強会でめっちゃ凄い本が紹介されたので衝動買い。

お堅い教科書調ではなく、ほどよく洒落の効いた表現もあって読みやすい。

で、敵対的生成ネットワークって何よって話ですが。
たまにTwitterで出てくる、AIが自動生成した萌え絵とかいうアレです。
まったく知らなかったのですが3年ほど前に技術革新があったらしく、結構いろんな絵が生成できるようになったみたいです。
ほとんど違和感のない猫の画像も生成できるとか。
……フェイクニュースやり放題じゃないか壊れるなぁ……。

サンプルはpythonで書かれてます。
ただ、要求する知識が中級者以上で、その上いくつかのライブラリにあらかじめ習熟してる必要がある等々、
はじめて勉強する私みたいなのには敷居が高いかも。

というわけで中身の妥当性はまだわからんのですが、GANの応用と今後を紹介してくれる11章はだいぶ勉強になりました。
医療情報でサンプル画像が不足してるところを解決したくだりとか、現場もまだまだ苦労してるんだなぁと。

で、締めの12章に「倫理」という小項目があるあたりに、この技術の抱える問題と可能性のほどを感じます。

【読書メモ】シナリオのためのSF事典 知っておきたい科学技術・宇宙・お約束120

大企業がSF作家を雇って未来予想部署に据える世の中です。
SFも古典文学同様一般教養になる日もそう遠くないでしょう。

というわけで、創作目的というより見識を広める意味で読んでみました。

技術要素や世界観についての言及はあると思ってましたが、
個人的に意外だったのが巨大構造物の章。
ガンダムにおけるスペースコロニー等々、舞台装置として重要ですもんね。

あと、宇宙的恐怖……もといクトゥルー神話への言及も腑に落ちる解説で勉強になりました。

Sipeed Maix Bitで遊ぶ その4:特定の色を検知したときにフラグ

前回はカラーピッカーをやりました。
では、特定の色を検知した場合、何らかのフラグを立てるには……?

実際のところ

import sensor,  image, lcd,  time
lcd.init()
sensor.reset()
sensor.set_pixformat(sensor.RGB565)
sensor.set_framesize(sensor.QVGA)
sensor.run(1)
green_threshold   = [(0,   80,  -70,   -10,   -0,   30)]
myroi=[(320//2)-(50//2), (240//2)-(50//2), 50, 50] # 50x50 center of QVGA.

while True:
    img=sensor.snapshot()
    blobs = img.find_blobs(green_threshold,roi=myroi)
    if blobs:    
        for b in blobs:
            tmp=img.draw_rectangle(b[0:4]) 
            tmp=img.draw_cross(b[5], b[6]) 
            c=img.get_pixel(b[5], b[6])
    lcd.display(img)

動き

普段はこのように中心になにもありませんが
f:id:shuzo_kino:20200522001709p:plain

閾値範囲に収まった「緑っぽいところ」がでると、□が描画されます。
f:id:shuzo_kino:20200522001605p:plain

説明

キモはimageクラスのfind_blobsメソッド。
これに閾値のタプルを渡してあげれば、該当するとこに□がでます。
定義によると、以下のようにRGBで下限、上限の順に格納する様子。

The thresholds must be a list of tuples. [(lo, hi), (lo, hi), ..., (lo, hi)] Define the range of colors you want to track.

こんな値、どう抽出すんじゃって話ですが、ここで公式IDEヒストグラムがでてきます。

To get the threshold of the tracked object, simply select (click and drag) the tracking object in the IDE framebuffer. The histogram will be updated accordingly to the area. Then just write down the color distribution in the starting and falling positions in each histogram channel. These will be the low and high values ​​of thresholds. Since the difference between the upper and lower quartiles is small, the threshold is manually determined.

You can also determine the color threshold by going to Tools -> Machine Vision -> Threshold Editor in the OpenMV IDE and dragging the slider from the GUI window.

f:id:shuzo_kino:20200522003042p:plain

参考もと

image · MaixPy DOC