2021年8月14日土曜日

Raspberry Pi 上でOpenCVを動かす

OpenCVを使うことで、いろいろな画像処理が簡単にプログラムできるということで、Raspberry Piを引っ張り出してきて試してみました。下の写真は、Youtubeにある渋谷交差点のライブ映像をリアルタイムで引っ張ってきて、動いている物体を抽出表示したものです。プログラムはhitomatagiさんのページを参考にさせていただきました。ありがとうございます。歩いている人々が移動物体として抽出されています。

 

こんな簡単なプログラムで出来るとは、恐るべしOpenCV。 

# coding: utf-8

import cv2
import numpy as np
import pafy
import imutils

# 定数定義
ESC_KEY = 27     # Escキー
INTERVAL= 33     # インターバル
FRAME_RATE = 30  # fps

WINDOW_ORG = "org"
WINDOW_BACK = "back"
WINDOW_DIFF = "diff"

# ウィンドウの準備
cv2.namedWindow(WINDOW_ORG)
cv2.namedWindow(WINDOW_BACK)
cv2.namedWindow(WINDOW_DIFF)

#url = "https://www.youtube.com/watch?v=mEx0DiQcOQw"
url = "https://www.youtube.com/watch?v=8QX0uwJpBW4"
ytube = pafy.new( url )
best = ytube.getbest( preftype="mp4" )
mov_org = cv2.VideoCapture( best.url )

# 最初のフレーム読み込み
has_next, o_frame = mov_org.read()
i_frame = imutils.resize( o_frame, width=640 )

# 背景フレーム
back_frame = np.zeros_like(i_frame, np.float32)

# 変換処理ループ
while has_next == True:
    # 入力画像を浮動小数点型に変換
    f_frame = i_frame.astype(np.float32)

    # 差分計算
    diff_frame = cv2.absdiff(f_frame, back_frame)
    # 背景の更新
    #cv2.accumulateWeighted(f_frame, back_frame, 0.025)
    cv2.accumulateWeighted(f_frame, back_frame, 0.01)

    # フレーム表示
    cv2.imshow(WINDOW_ORG, i_frame)
    cv2.imshow(WINDOW_BACK, back_frame.astype(np.uint8))
    cv2.imshow(WINDOW_DIFF, diff_frame.astype(np.uint8))

    # Escキーで終了
    key = cv2.waitKey(INTERVAL)
    if key == ESC_KEY:
        break

    # 次のフレーム読み込み
    has_next, o_frame = mov_org.read()
    i_frame = imutils.resize( o_frame, width=640 )

# 終了処理
cv2.destroyAllWindows()
mov_org.release()


2021年8月11日水曜日

超音波距離センサー

 DFRobotから超音波センサーを購入したので、早速使ってみました。シリアル通信モードで、コマンドを送ると、温度や距離を送り返してきます。 

DFRobotのWebページにに載っていたサンプルプログラムはCで書かれていましたので、それを参考にPythonで書いてみました。普通に動いています。

import serial
import struct
import time
import datetime

ser = serial.Serial( 'COM11', 9600, timeout=None )

def sendCommand():
    txx = [0x22, 0x00, 0x00, 0x22]
    for b in txx:
        a = struct.pack( "B", b )
        ser.write(a)
    ser.flush()
    
def recData():
    while ser.in_waiting <= 0:
        pass
    r0 = ser.read(1)
    while ser.in_waiting <= 0:
        pass
    r1 = ser.read(1)
    while ser.in_waiting <= 0:
        pass
    r2 = ser.read(1)
    while ser.in_waiting <= 0:
        pass
    r3 = ser.read(1)
    rc = int.from_bytes( r1+r2, 'big' )
    return rc
    
fn = 'data.txt'
fp = open( fn, "w", encoding="utf_8" )
for i in range(15):
    for j in range(60):
        for k in range(60):
            sendCommand()
            dist = recData()
            dt_now = datetime.datetime.now()
            print( dt_now, dist )
            fp.write( str(dt_now) + " " + str(dist)+'\n' )
            time.sleep(1)

ser.close()
fp.close()
 


2021年8月6日金曜日

WSJT-X 2.5.0-rc5 リリース

WSJT-X 2.5.0-rc5 がリリースされました。リリースノートの和訳は以下のとおりです。

2021年8月5日

WSJT-X 2.5.0はMAP65 3.0.0を同梱しています。WSJT-X 2.5.0-rc5は以下の修正がはいっています。

MAP65:

  • ウォーターフォール下部をダブルクリックすると、Ftolが100より大きい値になっているときは100へ下げる
  • データをディスクから読んだときは早期デコーディングパスはスキップされる
  • 同じ周波数でのみデコードの複数表示は行わない

WSJT-X:

  • 複合コールサイン、非標準コールサイン局とのQSOバグを修正

2021年8月5日木曜日

自分のインターネットアクセスをチェック

いろいろなアプリをパソコンにインストールしていると、期せずして勝手にインターネット上のサイトにアクセスされていることがあります。インストール時に、一旦、許可してしまうと、以後勝手にアクセスするよろしくないアプリもあります。また、アプリ以外でも、ブラウザのExtensionやアドオンを入れていると、予期せぬアクセスを発生していることがあります。わたしは、秀丸ネットモニターを使って、時々チェックしています。


 

WSJT-X 2.5.0-rc4 ユーザーガイド 日本語訳

 WSJT-X 2.5.0-rc4 ユーザーガイドの日本語訳を公開します。リリースノートにあったように、FT8操作チュートリアルが新しくなっています。

2021年8月2日月曜日

WSJT-X 2.5.0-rc4リリース

WSJT-X 2.5.0-rc4がリリースされました。リリースノートの和訳を公開します。


Copyright 2001 - 2021 by Joe Taylor, K1JT.

WSJT-X 2.5.0-rc4 2021年8月1日

WSJT-X 2.5.0はMAP65 3.0.0を同梱しています。rc3からの変更点は次のとおりです。

MAP65

  • 重複したデコード結果を表示しない
  • .tf2 と .iq ファイルの長さを56秒まで延長
  • 52秒時点での早期デコードを実装
  • map65_rx.logの出力ログを整理

WSJT-X

  • CALL3.TXTと部分マッチするコールサイン検索のバグを修正
  • macOSで、App Nap 省電力をオフにする手順をReadMe.txtに記載
  • FT8モードの基本ユーザーガイドを更新
  • Q65モードでのコンテストとFD運用が可能となるよう変更

WSJT-X 2.7.0-rc3 公開

 WSJT-X 2.7.0-rc3 リリースノート 2024年1月1日 WSJT-X 2.7.0-rc3では、いくつかの新しい機能、たくさんの強化改善、バグの修正を行いました。 「Hamlib更新」機能追加。Windows版では、WSJT-Xから直接Hamlibを更新することがで...