TP-LINK USB-LANアダプタ

ドライバインスト必要なアダプタ、M1 MacBook Airでは使えていたけど、M4 MacBook Proではドライバがうまくインストできない

システム情報がこんな怪しげな状況にもなる、

特にTP-LINK製は最近のAppleでドライバインストールの時の条件が厳しくなっているようで、LLMに聞くとセーフモードで立ち上げてセキュリティ外せみたいなことことを言われたから、そんなもんなら使うのやめたほうがいいだろう

代替えとして、Belkinとかを紹介しているから、Macではドライバ必要な周辺デバイスは選択の対象外というのが認識となりました、そもそもUSBがType-Aだからその時点で時代遅れ(使いづらい)になっているわけですが

 

admin

 

 

ラズパイ5のWi-Fi不具合

元々の問題(今現在解決できていないので途中経過)

ラズパイ5でSSIDが追加できない、より正確に言えば以前はpreconfiguredのWi-Fi SSIDがなければ他のSSIDに接続できていたのが接続できなくなったのでその調査として、ラズパイ0でやってみたことと、ラズパイ5の振る舞い

<wpa_supplicant.confを作成必要な問題:これはラズパイ0での実行時>

昨年終わり頃にOSがbookworm版にアップされているので、ラズパイ0で最新のOSでWi-Fiの初期設定を追加(rpi imagerでラズパイ0用のヘッドレスのイメージ書き込んでやってみた)、しかし最初の壁は起動したと思える時間待ってもWi-Fi内にラズパイ0が見つからない

作成したSDカードのルートに以下のwpa_supplicant.confファイルを作成してやると見えるようになった

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
    ssid="your SSID"
    psk="your PW"
}

<nmcli(bookwormからはこのコマンドで制御になってる)での必要コマンド>

rescanやらないとキャッシュがクリアされないから、今接続中のSSIDしか見えない
$ sudo nmcli device wifi rescan

次にlist出力させる
$ sudo nmcli device wifi list

一回の入力で済ますなら、
$ sudo nmcli device wifi rescan && sleep 2 && nmcli device wifi list

SSIDの追加設定
$ sudo nmcli device wifi connect aterm-eb69c6-g password “your PW” hidden yes
Device ‘wlan0’ successfully activated with ‘unique UUIDの値’

設定済み接続リスト(-gに切り替えている)
$ nmcli connection show

接続先を切り替える時は例えば、
$ sudo nmcli connection up preconfigured

ここまでは正常動作、自宅以外のSSIDもちゃんと見えている普通の姿

————————–

<ラズパイ5のWi-Fi問題>

1. 自宅内と周辺のセンスできるはずのSSIDがほとんど見えない、感度が低下している状態と言えなくもないが、その割には受信できてるSSIDの電波強度はかなり強い

2. かつpreconfigured以外は見え方が不安定で、見えたり見えなかったり

3. 見えてる状態でSSID切り替えしようとすると、ハング状態になるからVNC接続では電源切るしかない

4. 当初は複数のSSID登録できて、自動切り替えもできてたから、その後のシステムの変更で発生しているようにも見える、ケース(筒)の影響の可能性は?ケースに収めた後に問題発生しているように思うから

そもそもアンテナが基板(CPU側)に構成されていて、なおかつクーリングファンの影響(遮蔽)も受けるだろうから、感度がそれほど期待できないということがある

ただしwavemonで見た限りは問題ないね

原因がどうしても判明しないときにはUSB Wi-Fiドングル(多分その方が無線的な特性はまともだろうと思う)、あるいはWi-Fiアダプタ使って有線LANでつなげるという選択肢もあるかな

 

admin

画像の物体検出軽量化(ラズパイ5)

Yoloは性能的には十分すぎる感じですが、やはりリソースを相当に消費します

https://isehara-3lv.sakura.ne.jp/blog/2025/04/12/yoloとefficientnetの違いと用途/

で、目的を人検出に絞って軽量化を検討してみた

efficientdet_lite0.tfliteのモデルをTFliteで動かすのが現状の割とメジャーな選択だと思われるのでやってみた

<ターゲット>

・ラズパイ5:8GBメモリ/256GB SSD

<コード>

LLMとの対話で生成された最終的なコード、カメラ画像のデータ(RGB)の並べ替えが必要です、パッケージ競合でPython用の環境は新しく作成しています

import cv2
import numpy as np
import tflite_runtime.interpreter as tflite
from picamera2 import Picamera2

# EfficientDet Lite0 モデルロード
interpreter = tflite.Interpreter(model_path="efficientdet_lite0.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# ラベル読み込み
with open("coco_labels_91.txt", "r") as f:
    labels = [line.strip() for line in f.readlines()]

def preprocess_image(image):
    resized = cv2.resize(image, (320, 320))
    resized = resized[:, :, [2, 1, 0]]  # RGBに
    return np.expand_dims(resized, axis=0).astype(np.uint8)

def postprocess_results(boxes, scores, classes, count, image_shape):
    detections = []
    for i in range(count):
        if scores[i] > 0.4:
            ymin, xmin, ymax, xmax = boxes[i]
            (left, right, top, bottom) = (
                int(xmin * image_shape[1]), int(xmax * image_shape[1]),
                int(ymin * image_shape[0]), int(ymax * image_shape[0])
            )
            detections.append({
                'box': (left, top, right, bottom),
                'class_id': int(classes[i]),
                'score': float(scores[i]),
                'label': labels[int(classes[i])] if int(classes[i]) < len(labels) else f"id:{int(classes[i])}"
            })
    return detections

def draw_detections(image, detections):
    for detection in detections:
        left, top, right, bottom = detection['box']
        label = f"{detection['label']} {detection['score']*100:.1f}%"
        cv2.rectangle(image, (left, top), (right, bottom), (0, 255, 0), 2)
        cv2.putText(image, label, (left, top - 10),
                    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)

def main():
    # Picamera2 初期化
    picam2 = Picamera2()
    picam2.preview_configuration.main.size = (640, 480)
    picam2.preview_configuration.main.format = "RGB888"
    picam2.preview_configuration.align()
    picam2.configure("preview")
    picam2.start()

    while True:
        frame = picam2.capture_array()

        input_data = preprocess_image(frame)
        interpreter.set_tensor(input_details[0]['index'], input_data)
        interpreter.invoke()

        boxes = interpreter.get_tensor(output_details[0]['index'])[0]
        classes = interpreter.get_tensor(output_details[1]['index'])[0]
        scores = interpreter.get_tensor(output_details[2]['index'])[0]
        count = int(interpreter.get_tensor(output_details[3]['index'])[0])

        detections = postprocess_results(boxes, scores, classes, count, frame.shape)
        draw_detections(frame, detections)

        cv2.imshow("EfficientDet + PiCamera2", frame)
        if cv2.waitKey(1) & 0xFF == ord("q"):
            break

    cv2.destroyAllWindows()

if __name__ == "__main__":
    main()

<実行結果>

タブレットに写した人物画像から人検出を行っていますが、それなりの確度で検出できてます、精度そのものはYoloよりは低い

ラズパイ5のリソースはCPUが100%程度で、メモリフットプリント的にも余裕はあります、CPU温度はファンは常時回転中で60℃程度、長時間だと全体がほんわりと暖かくなりますが、夏場も何とか耐えそう

ここのパーツはほぼ決まりだろうから、全体構成図を掲載、これからパーツを結合してアプリを作ります

 

 

 

admin

 

timemachineバックアップ失敗対策のその後

以前の記事ですが、

https://isehara-3lv.sakura.ne.jp/blog/2025/04/06/apple-silicon系のmacbookでnasへのtimemachineバックアップ失敗/

この時点でまだバックアップ設定は成功していなかった

<第一段階の設定の追加>

・NASは毎日5:00AMに起動していて、数時間経過(毎日のバックアップが完了したと思う頃)したら電源オフをプログラム設定している

・MacBook設定 -> これはハズレだったので週一のリフレッシュブートに戻す

% sudo pmset repeat wakeorpoweron MTWRFSU 05:10:00

% pmset -g sched

Repeating power events:

  wakepoweron at 5:10AM every day

設定を戻した、restartと他の設定は共存できないから

% sudo pmset repeat restart S 05:00:00

% pmset -g sched

Repeating power events:

  restart at 5:00AM Saturday

・TimeMachinEditorはバックアップできなかったらリトライする設定 -> 本質ではないけどリブート後の自動スタート(ログオンしたらtimemachineが自動起動)には有効であった

・バッテリーでディスプレイオフ時にスリープさせない -> 本質ではない

<ログファイルから対策>

(2025/4/10)

今朝うまくいかなかったログをLLMに入れると、解決案として~/Logを除外するというのがあったから除外を設定

但しアプリの設定も復元したいならば全部を除外してはいけない

—————————–

~/Library/Application Support や ~/Library/Preferences を 除外しないように注意。

アプリによっては ~/Library/Containers に大事なデータを保存していることもある。

—————————–

とあったからその三つのディレクトリは対象にした

 

設定後のシステムログからtimemachineバックアップ関連を抽出

log show --predicate 'subsystem == "com.apple.TimeMachine" AND eventMessage CONTAINS "Backup"' --style syslog --info --start "2025-04-13 05:00:00" --end "2025-04-13 06:00:00" --timezone local

〜〜〜前後省略して結果だけ〜〜〜

2025-04-11 05:41:47.556152+0900  localhost backupd[504]: (TimeMachine) [com.apple.TimeMachine:CopyProgress] Finished copying from volume “Data”

      77624 Total Items Added (l: 3.7 GB p: 3.89 GB)

      23459 Total Items Propagated (shallow) (l: Zero KB p: Zero KB)

    2718279 Total Items Propagated (recursive) (l: 467.4 GB p: 236.17 GB)

    2795903 Total Items in Backup (l: 471.1 GB p: 240.06 GB)

      66165 Files Copied (l: 3.37 GB p: 3.54 GB)

       9056 Directories Copied (l: Zero KB p: Zero KB)

       2271 Symlinks Copied (l: 171 KB p: Zero KB)

      17029 Files Move Skipped (l: Zero KB p: Zero KB) | 17029 items propagated (l: 4.12 GB p: 4.1 GB)

       6430 Directories Move Skipped (l: Zero KB p: Zero KB) | 2677791 items propagated (l: 463.29 GB p: 232.06 GB)

         80 Files Cloned (l: 191 KB p: 328 KB)

         52 Files Delta Copied (l: 332.8 MB p: 346.6 MB)

この時刻がデスクトップから見える終了時刻、実際にはこの後unmount処理されて終了

以上で3日間は正常(土曜日は再起動後にtimemachineが走り始めたけど、これはTimeMachineEditorの設定が効いている)なので、とりあえず問題は回避できていると思って良さそう、要はtimemachineバックアップでLogファイルをロックできなくてバックアップ処理が途中で止まっていたのが問題で、対象(復元には無関係だろう)のLogファイルをバックアップの処理対象から除外したということ、除外した三つのLogディレクトリをバックアップ時に同じことが起こらないのかという疑問はありますが

 

admin

YoloとEfficientNetの違いと用途

ラズパイ5のカメラから動画取り込んでリアルタイムの認識は、

https://isehara-3lv.sakura.ne.jp/blog/2025/03/29/yoloを使ってみる/

でやってみたけれど、EfficientNetとの比較をラズパイ5でやってみる

Yoloのコードは極めてシンプルだけれども、EfficientNet(TFlite上で動作)は

前処理(cv2使用)やラベルテキスト(ImageNetLabels.txt)からの抽出処理を自前でやらないといけない、まあコードはLLM生成ではありますが

判定を甘くして、上位5個の候補を出力しています、TF(Tensor Flow)だともう少しコードは簡単らしいけれども

# 画面全体から尤もらしい物体を選択する

import cv2
import numpy as np
import matplotlib.pyplot as plt
import tflite_runtime.interpreter as tflite

# モデルロード
interpreter = tflite.Interpreter("EfB3_imagenet.tflite")
interpreter.allocate_tensors()

# 入出力情報
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()

# 画像前処理
img_path = "test.jpg"
img = cv2.imread(img_path)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img_resized = cv2.resize(img, (300, 300))
input_data = np.expand_dims(img_resized, axis=0).astype("float32")

# 推論
interpreter.set_tensor(input_details[0]['index'], input_data)
interpreter.invoke()
output_data = interpreter.get_tensor(output_details[0]['index'])[0]

# ラベル読み込み
with open("ImageNetLabels.txt", "r") as f:
    labels = [line.strip() for line in f.readlines()]
if labels[0].lower() == "background":
    labels = labels[1:]  # ずれを修正

# 結果表示
top_k = output_data.argsort()[::-1][:5]
for i in top_k:
    print(f"{labels[i]}: {output_data[i]*100:.2f}%")

# 結果を画像に描画
for i, idx in enumerate(top_k):
    label = labels[idx]
    score = output_data[idx]
    cv2.putText(img, f"{label}: {score*100:.2f}%", (10, 30 + i*30),
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2)

# 表示と終了処理
img_bgr = cv2.cvtColor(img, cv2.COLOR_RGB2BGR)
while True:
    cv2.imshow("Window", img)
    if cv2.waitKey(1) & 0xFF == ord('q'):  # qキーで終了
        break
cv2.destroyAllWindows()

<Yolo>

 

 

<EfficientNet>

 

ということで目的によっての使い分けですが、person検出目的ならばYoloだろうというのが現時点、EfficientNetのラベルテキスト(ImageNetLabels.txt)にはpersonというラベルは存在してません

人検出で軽量化を目指すなら、TFlite + efficientdet_lite0.tfliteのような解もありそうですが、ラベル(coco_lables.txt)には80分類ぐらいあります、ちなみにyoloは50分類

 

admin

SpotifyConnect vs AirPlay

時々ではありますが、iPadでSpotifyを動作させているときに、接続が切れてしまう時が月一ぐらいで発生する

iPad(Spotifyインストール) — Node 2(BlueSound)/Volumio2(Raspberry PI zero)の構成でSpotify ConnectでNode 2を選択すれば、Node 2が再生権利を持っていてダイレクトにSpotifyを再生します、接続切れ問題発生時は多くはNode 2のリブート、あるいはWi-Fiルーターの再起動で回復しますが、今回は回復せず

代替え手段としてAirPlayがありますが、これはCD品質なのでそこそこ音は良いのですが、iPadでデコードするから消費電力は増加するはず、Spotify Connectの時はiPadは単なるコントローラーで、iPadは音楽再生時の音源処理がないから

AirPlayを使ってみると、遅延(再生スタート・停止時の)があるようです、と言ってる間に復旧したから原因は不明、Spotify Connectを無効にしてしまうタイミング(一時的にアカウント無効になったとか)があるとしか思えないけども

 

admin

Apple Silicon系のMacBookでNASへのtimemachineバックアップ失敗

まあ以前からMx系のMacBookでは問題は時々起きていますが、

https://isehara-3lv.sakura.ne.jp/blog/2023/10/08/しばらくtimemachineが遅延で完了してなかった/

timemachineeditor使って、毎日早朝にNASのHDDにバックアップしてますが、

最近ほぼ確実にtimemachineバックアップに失敗して、マニュアルでバックアップ起動してます、おそらくIntel CPUに比較してApple siliconのパワーマネージメント系エンハンスが原因だろうと思うので、

スリープさせない設定にして、1回目はバックアップ取れてた、まあまだこの先はわからないけれどもね、ダメなら次を考える

timemachineeditorのマニュアル見る限りも、sleep時のバックアップは不安定と書いているし

https://tclementdev.com/timemachineeditor/

schedule wakesのリンク先には、

https://support.apple.com/ja-jp/guide/mac-help/mchl40376151/mac

sleepを解除する方法の記載、最初からスリープさせなきゃ良いだろうと取れる

 

P.S. (2025/4/7)

ハズレ、でした

 

admin

iTermが原因で夜間のUpdate適用ができなかった

ターミナルソフトをiTerm2に変えると、夜間のアップデート適用に失敗していた、

原因はiTerm終了時に確認を求める設定だからと言うことで、設定のPrompt before closingをneverに設定すれば良いと、確かにアプリ閉じる時に確認されなくなった

 

admin

VMware上のUbuntu24.04のファイル領域拡張

滅多に行わない作業ということと、Ubuntuのバージョンで変わってきている様子、

概ね目安は80%に達したら拡張というふうに考えているので、10GBだけ拡張、参考は以下のサイト

https://qiita.com/mcyang/items/a32b914db073f308a3cb

やることは、

① 物理ボリューム拡張

② 論理ボリューム拡張

③ ファイルシステム拡張

の3点になります、実行結果だけですが、

およそ50%まで余裕ができました、

コンテナが標準で使うようになって、VMwareのUbuntuの出番は少ないのですが、何かの時には出番というところ

 

admin

MacBook Proのターミナルが開かなくなった

突然ですが、Pythonのスクリプト起動中にターミナルが使えなくなりました、正確にはターミナルが消滅して、起動しようとしても以下のメッセージ出て起動ができない

ターミナル使えなかったらパソコンとしては無価値だから代替え手段を探すとiTermというのがあるらしいのでインスト

https://iterm2.com

無論コマンドラインではできないからappをダウンロードして起動すると、

普通に使えそうです良かった、というかターミナルの強化版だから、最初からiTerm使ってた方が良かったんじゃないかな

他にないか調べると、Rustで書かれたAlacirttyというのもあるからこれも入れてみた

https://alacritty.org/index.html

dmgだからターミナルなくてもインストできる

P.S. 2025/4/1

原因を探ってみると、ChatGPTの回答の参照リンク(以下)

https://qiita.com/koma3/items/5df98663463571a14272

に該当していて、以下の対応ディレクトリ(ちょうど起動出来なくなった頃のタイムスタンプのファイルが存在)を一時的にデスクトップに退避すると起動出来ました、まあ標準ターミナルはもう使わないけどね

 

admin