2023,江端さんの技術メモ

まず動画の部分をクリックします。

メニューに「再生」タブが表われます。

「開始」をチェックして、「自動(A)」「再生が終了したら巻き戻す」にします。

これで、そのページの表示と同時に、動画が動き始めます(開始クリックの手間が省けます)。

時々上手く動かない時がありますが、その場合が動画部分をクリックすれば動き出すようです。

 

2023,江端さんの技術メモ

映像テストの実験用に使っているのですが、Mozcの日本語-直接入力がサクサクできず、ちょっとした検索もできず、困っておりました。

手当たり次第、探した結果、(私の場合は)このキーに割り当たっていたようでした。

ちゃんと設定すべきところ、それすら面倒くさくて ―― 私は、これで十分です。

ましてや、SKKを入れる気力は、絶無です。

2023,江端さんの技術メモ

    1. 背景
      最近映像回りの試験をやっていて、ネットワークの劣化状態を作り出す必要が出てきました。
      私、20年程前に、NISTNET というLinuxカーネルを改造する専用のパソコン作っていたので、これをもう一度作ろうと思っていたのですが、NISTNETの情報が、ある時を境にパッタリと消えてしまっていました。変だな、と思って調べてみたら、カーネルレベルでなくて、アプリのレベルでほぼ同様の機能ができるLinuxTC(Traffic Control)というものができたらしい、ということが分かりました。まあ、最近のPC性能メチャクチャ良いから、カーネルレベルやるまでもないのかな(?)とか考えました。
    2. アプローチ
      なるべく、サクっと作りたいので、ジャンク箱に入っていたラズパイ3B(Ubuntu16.04)をそのまま使うことにしました。
      『動かなければ、その時考えればいいかな』と。
      参考文献はこちらです。

      Ubuntuのブリッジ化とネットワークエミュレート(簡易版)

    3. 構成図
      こんな感じです。

    4. 購入したもの
      2つ目のNICが必要でしたので、これを購入しました(クリックすればAmazonに飛びます)。

      GBのアダプタにしたのは、ネットワーク上限にならないといいな、と思ったのですが、ラズパイ(PI 3B)のNICがGBじゃないのですから、意味なかったかもしれませんが。
    5. 事前調査
      アダプタを差して、ifconfigは、こうなりました。

      enx207bd2222d29 とか、enxb827ebde37fc とか、なんじゃらほい? と思われるかもしれませんが、これ、eth0 とかeth1と同じものと思って頂ければ結構です(正直、これで、ちょっとごたごたしましたが、今回、"そういうものだ"と思って貰えればO.K.です) 。https://wp.kobore.net/%e6%b1%9f%e7%ab%af%e3%81%95%e3%82%93%e3%81%ae%e6%8a%80%e8%a1%93%e3%83%a1%e3%83%a2/post-10990/

       

    6. TCのインストールと設定
      Step 1 ブリッチの作成
      $ sudo brctl addbr br0 
      Step 2 ブリッジにIPアドレスを割り当てる
      $ sudo ip addr add 192.168.0.200/24 dev br0   (で、以後、192.168.0.200は、sshサーバのアクセス先にもなります)
      Step 3 ブリッジ化のためにネットワークポートのIPアドレスを消去
      $ sudo ip addr flush enx207bd2222d29
      $ sudo ip addr flush enxb827ebde37fc
      Step 4 ブリッジにネットワークポートを紐づける
      $ sudo brctl addif br0 enx207bd2222d29
      $ sudo brctl addif br0 enxb827ebde37fc
      Step 5 ネットワークポートをプロミスキャスモードに設定
      $ sudo ip link set dev enx207bd2222d29 promisc on
      $ sudo ip link set dev enxb827ebde37fc promisc on
      Step 6 ブリッジの起動
      $ sudo ip link set dev br0 up
      Step 7 TC起動の確認
      $ brctl show

       

    7. 状況現在、何の設定もしていない状況なのですが、すでに映像遅延が発生しています。PI 3Bではちょっと負荷が重いのかもしれません。
      ちなみにifconfigで以下がbr0が追加されているのが確認できます。(192.168.0.200で、登録)

    8. その他TCの設定については、こちらを参考にしながら勧めていく予定です。

      ラズパイでtcコマンド(遅延・パケロス・フィルター・帯域制御)やってみた

2018,江端さんの技術メモ

    • 2018-08-26(日) 09:57:44
  • 1.問題
    • 文字通り、この問題で嵌った
    • 具体的には、ping google.comをしても "unknown"と言われる
    • 本当に困ったのは、名前解決する為のsudo apt-get update, sudo apt-get installが全く使えなくなったこと
  • 2.解決法
    • 結果として問題は解決した
    • いろいろ弄ってみたが、どれが原因で動き出したのかよく分からない
    • 結果的に、やったことを「逆順」に説明する
  • 3.前提
    • raspberry pi をホームサーバ(監視システム)として運用しているので、固定IPアドレス(192.168.0.10)で使っている。
    • DHCPサーバに、このラズパイのMACアドレスを登録しての適用除外としている
  • 4.結果的に、やったことを「逆順」に説明する
    • Step N
      • (1)IPV6のサポートを外す
        • /etc/sysctl.conf」に以下の2行を追加。
        • net.ipv6.conf.all.disable_ipv6 = 1
        • net.ipv6.conf.default.disable_ipv6 = 1
      • (2)DNSのネームサーバ設定
        • /etc/resolvconf/resolv.conf.d/baseに以下の1行を追加
        • nameserver 8.8.8.8
      • (3)どちらも設定したらUbuntuを再起動
    • Step N-1
      • /etc/nsswitch.confを編集
        • # hosts:          files mdns4_minimal [NOTFOUND=return] dns
        • hosts:          files dns
    • Step N-2
      • /etc/network/interfacesを編集 (dns-servers とか dns-nameservers とかを)
        • # interfaces(5) file used by ifup(8) and ifdown(8)
        • # Include files from /etc/network/interfaces.d:
        • source-directory /etc/network/interfaces.d
        • # The loopback network interface
        • auto lo
        • iface lo inet loopback
        • auto eth0
          • iface eth0 inet static
          • address 192.168.0.10
          • netmask 255.255.255.0
          • gateway 192.168.0.1
          • dns-namaservers 8.8.8.8
        • # dns-servers 8.8.8.8
        • # dns-nameservers 8.8.8.8
    • Step N-3
      • /etc/NetworkManager/NetworkManager.conf の編集は、しなかった

        • しかし、この内容も、なんとも怪しさ満載である
  • 5.考察
    • 諦めよう
      • アップグレードで、勝手に仕様変更されて動かなくなる、というケースがママある。今回もそれに嵌った可能性が高い
      • とても迷惑であるが、OSSと一緒に生きていくなら、「仕方ない」のかもしれない(仕様を変更して、改善を図ろうとする開発者を責められない)
      • 人生の時間を有意義に使いたのであれば、「OSSとつきあわない」が正解なのだろう、と思う。

2023,江端さんの技術メモ

package main

import (
	"fmt"
	"math"
)

func main() {
	// 行列のデータ
	matrix := [][]float64{
		{2.5, 3.7, 4.8, 1.2},
		{1.0, 2.0, 3.0, 4.0},
		{0.5, 1.5, 2.5, 3.5},
	}

	numRows := len(matrix)
	numCols := len(matrix[0])

	// 各列の平均を計算
	averages := make([]float64, numCols)
	for j := 0; j < numCols; j++ {
		sum := 0.0
		for i := 0; i < numRows; i++ {
			sum += matrix[i][j]
		}
		averages[j] = sum / float64(numRows)
	}

	// 各列の各データと平均の差の二乗和を計算
	sumOfSquaredDiffs := make([]float64, numCols)
	for j := 0; j < numCols; j++ {
		for i := 0; i < numRows; i++ {
			diff := matrix[i][j] - averages[j]
			sumOfSquaredDiffs[j] += diff * diff
		}
	}

	// 各列の分散を計算
	variances := make([]float64, numCols)
	for j := 0; j < numCols; j++ {
		variances[j] = sumOfSquaredDiffs[j] / float64(numRows)
	}

	// 各列の標準偏差を計算
	stdDevs := make([]float64, numCols)
	for j := 0; j < numCols; j++ {
		stdDevs[j] = math.Sqrt(variances[j])
	}

	// 行列の各要素を標準偏差で正規化
	normalizedMatrix := make([][]float64, numRows)
	for i := 0; i < numRows; i++ {
		normalizedMatrix[i] = make([]float64, numCols)
		for j := 0; j < numCols; j++ {
			normalizedMatrix[i][j] = (matrix[i][j] - averages[j]) / stdDevs[j]
		}
	}

	// 正規化された行列を表示
	fmt.Println("正規化された行列:")
	for i := 0; i < numRows; i++ {
		fmt.Println(normalizedMatrix[i])
	}
}

2023,江端さんの技術メモ

ラズパイ4は、(○arm64 ×amd64)を採用しており、色々とトラブルとなっています。これも、その一つかどうか不明ですが、Chromeのインストールに失敗しています。

で、まあ、以下のことをごちゃごちゃしているうちに動きましたので、メモを残しておきます。

$ sudo snap refresh
$sudo snap install chromium
( $ sudo apt install -y chromium-browser は、失敗しました)
で、起動は、
$ chromium (× $ chromium-browser)
でした。

以上

 


2023,江端さんの技術メモ

BFS-U3-89S6C-C(カメラ)を先ず動かす。

私が購入したときは、15K円くらいだったのですが、今、倍になっています。ラズパイって高価になっているんですね ―― それはさておき。

Raspberry Pi 4Bは、USB3対応のようですが、どちらのポートか分かりません。この写真を見ると右側のようです。

(出典 https://misoji-engineer.com/archives/raspberrypi-usb3.html)

まずは、ドライバのありかを探してみました。

https://www.flir.jp/support-center/iis/machine-vision/downloads/spinnaker-sdk-download/spinnaker-sdk--download-files/

あきらかに、これが当たりのように見えます。

ラズパイP4の石は、ARMのようです。

https://qiita.com/memakura/items/a77137856f91d6c4db43

何がどうなっているのかは分からないけど、

https://blog.csdn.net/weixin_42088912/article/details/118225949

を参考にして、/etc/udev/rule.d/40-flir-spinnaker.rules の

SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"

SUBSYSTEM=="usb", ATTRS{idVendor}=="1e10",ATTRS{idProduct}=="4000", MODE="0777", GROUP="flirimaging"
SUBSYSTEM=="usb", ATTRS{idVendor}=="1724", GROUP="flirimaging"

としたら、やっと"USB interface0"が出てきた

けど、映像が表示されないし、「SpinView_QTの応答がありません」、とか言われる。

sudo dmesg をやると

[ 533.947639] usb 2-1: Product: Blackfly S BFS-U3-89S6C
[ 533.947652] usb 2-1: Manufacturer: FLIR
[ 533.947663] usb 2-1: SerialNumber: 0126934F
[ 600.668167] usb 2-1: reset SuperSpeed USB device number 4 using xhci_hcd
[ 709.333799] xhci_hcd 0000:01:00.0: swiotlb buffer is full (sz: 16384 bytes), total 32768 (slots), used 32687 (slots)

のようなメッセージがでてくので、

https://zenn.dev/yonishi/scraps/e735a6ef11d8b5

を参考に対応。 改善なし。

https://wpitchoune.net/tricks/raspberry_pi3_increase_swap_size.html

の対応を実施

表示に成功! 詳しくは明日 ―― つかれはてました。

 

2023,江端さんの技術メモ

PythonからGo、GoからPythonを呼び出し合う

で、勉強させて頂いております。

私、今、超スケーラブルな高速の遺伝的アルゴリズムをGo言語で実装しようとしているのですが、計算ライブラリの充実度はPythonが圧倒しているからです。

# 私が、Go言語で計算ライブラリを自作する、というのは、却下です(面倒くさい)

まあ、これは、元を辿ると"ChatGPTの責任"とも言えるのですが(押しつけ)

『ChatGPTは、もの凄く真摯な言葉で、嘘をつく』

取り敢えず、参照させて頂いたページのコードを、自分の環境に合わせて(といっても、結構苦労した"Python3.h"の場所が分からなかった)、ここまで動きました。

/* 
   環境
   wsl -d Ubuntu-20.04

   実行結果
   ebata@DESKTOP-P6KREM0:/mnt/c/Users/ebata/go-efa$ go run main1.go
   Hello, World! and Ebata is great
*/

package main

// #cgo CFLAGS: -I/usr/include/python3.9
// #cgo LDFLAGS: -L/usr/lib/pytho3.9 -lpython3.9
// #include 
import "C"
// import "C"のうえに改行いれるとエラーになる(信じられないが)

func main() {
    //  最後にPythonインタプリタ終了
    defer C.Py_Finalize()
    // Pythonインタプリタの初期化
    C.Py_Initialize()
    // GoのstringをCのcharに型変換(変換しないとPyRun_SimpleStringに型合ってないよって怒られる)
    // cannot use "print(\"Hello, World!\")" (type string) as type *_Ctype_char in argument to _Cfunc_PyRun_SimpleString
    pyCodeStr := `print("Hello, World! and Ebata is great!")`
    pyCodeChar := C.CString(pyCodeStr)
    // Pythonコードを文字列として受け取ってインタプリタ上で実行
    C.PyRun_SimpleString(pyCodeChar)

}

ようするに、このプログラムは、Go言語を使って、Pythonのインタプリタに一行づつコマンドを打ち込むプログラムのようです。

pythonのライブラリを使えるという訳でないようです。

GoとPythonをマージする方法は、どうも調子がよくないようです。

GoとPythonとGrumpyの速度ベンチマーク ~Googleのトランスパイラはどれくらい速い?~

 

2023,江端さんの技術メモ

Raspberry Pi Ubuntu Spinnaker SDK Setup
Raspberry Pi Ubuntu Spinnaker SDKのセットアップ

These steps describe using an Ubuntu desktop environment to install Ubuntu and the Spinnaker Python interface on a Raspberry Pi 3 B+. Commands to be run on the desktop are prefaced with (desktop)$, and commands to be run on the Raspberry Pi are prefaced with (pi)$

この手順では、Ubuntuデスクトップ環境を使用して、Raspberry Pi 3 B+にUbuntuとSpinnaker Pythonインターフェースをインストールする方法を説明します。デスクトップ上で実行するコマンドの前には(desktop)$を、Raspberry Pi上で実行するコマンドの前には(pi)$を付けます。

  1. Flash the latest Ubuntu image (at the time of writing: 18.04) to an SD card and perform first-time setup by following these instructions. You will need an HDMI cable, a monitor, and a keyboard. The Raspberry Pi must also be connected to your local network via Ethernet.
    最新のUbuntuイメージ(執筆時点では18.04)をSDカードに書き込み、以下の手順に従って初回セットアップを行う。HDMIケーブル、モニター、キーボードが必要です。また、Raspberry Piはイーサネット経由でローカルネットワークに接続されている必要があります。

  2. Perform basic software updates on the Pi:
    Piの基本的なソフトウェアアップデートを行う:
    (pi)$ sudo apt update && sudo apt upgrade
  3. Go to the FLIR File Download website for your camera. The software downloads will require a free FLIR account.
    お使いのカメラのフリアーファイルダウンロードサイトにアクセスします。ソフトウェアのダウンロードにはフリアーシステムズの無料アカウントが必要です。

  4. On the FLIR website, find the latest Linux Ubuntu ARM Operating System packages.
    フリアーシステムズのウェブサイトで、最新のLinux Ubuntu ARMオペレーティングシステムパッケージをご覧ください。

  5. Download the ARM64 packages for the Spinnaker SDK and Spinnaker Python Interface, and transfer them to the Raspberry Pi. Eg:
    Spinnaker SDK と Spinnaker Python Interface の ARM64 パッケージをダウンロードし、Raspberry Pi に転送します。例

    (pi)$ ip a # check pi's ip address
    (desktop)$ scp spinnaker-*-pkg.tar.gz spinnaker_python-*.tar \
     ubuntu@<pi's ip address>:~
  6. On the Raspberry Pi, untar the spinnaker sdk and enter the untarred directory
    Raspberry Pi上で、spinnaker sdkをuntarし、untarしたディレクトリに入ります。
  7. Read the README file fully, then run the install script. Eg:
    READMEファイルを十分に読んでから、インストールスクリプトを実行してください。例

    (pi)$ sudo sh install_spinnaker_arm.sh
  8. You will probably run into some dependency issues while installing the SDK. If that’s the case, missing packages can be installed manually with:
    SDKのインストール中に依存関係の問題に遭遇することもあるでしょう。その場合、不足しているパッケージを手動でインストールすることができます:

    (pi)$ sudo apt install <name-of-missing-package>
    
    
  9. Change back to your home directory, untar the python interface, then untar the python 3.6 interface.
    ホームディレクトリに戻り、pythonインターフェースをuntarし、python 3.6インターフェースをuntarする。

    (pi)$ tar -xf spinnaker_python-1.*.tar
    (pi)$ tar -xf spinnaker_python-1.*cp36*.tar.gz 
  10. Read the README.txt fully, then install numpy and the Spinnaker python interface. At the time of writing, there are no precompiled wheels for numpy on Ubuntu ARM, so pip will compile the package from souce. This will take several hours, but can be sped up a bit by increasing the Pi's swap size.
    README.txtを十分に読み、numpyとSpinnaker pythonインターフェースをインストールします。この記事を書いている時点では、Ubuntu ARMにはnumpy用のプリコンパイルホイールがないので、pipがソースからパッケージをコンパイルします。これには数時間かかりますが、Piのスワップサイズを大きくすることで少しスピードアップできます。

    (pi)$ sudo apt install dphys-swapfile # (optional)
    # follow the rest of the increasing swap size tutorial (optional)
    (pi)$ sudo apt install python3-pip
    (pi)$ python3 -m pip install numpy
    (pi)$ sudo python3 -m pip install spinnaker_python-1.*.whl
  11. Ensure the python module can be imported successfully:
    pythonモジュールが正常にインポートできることを確認する:

    (pi)$ python3 -c 'import PySpin' # should take a few seconds, then exit silently

    You will probably run into more dependency issues here. When you try to import PySpin with a missing dependency, you'll get an error along the lines of No Such File: <name-of-missing-package>.so. See step 8 for help resolving these issues.
    おそらくここで依存関係の問題にもっとぶつかるでしょう。依存関係が見つからないPySpinをインポートしようとすると、No Such File: <名前-of-missing-package>.soというエラーが表示されます。このような問題の解決についてはステップ8を参照してください。

  12. Increase the space allocated to USB devices on the Pi. This is needed so that the images taken by the camera can fit properly within RAM. Note: This change will not persist through reboot and must be repeated.
    PiのUSBデバイスに割り当てられる容量を増やす。これは、カメラで撮影された画像がRAM内に適切に収まるようにするために必要です。注意: この変更は再起動しても維持されないので、繰り返し行う必要があります。

    (pi)$ sudo sh -c 'echo 256 > /sys/module/usbcore/parameters/usbfs_memory_mb'
  13. Connect your USB 3.1 FLIR camera to the Raspberry Pi via USB.
    USB3.1フリアーシステムズのカメラをUSB経由でRaspberry Piに接続します。

  14. Change into the Examples directory for PySpin, and run the Acquisition.py example as root. If this succeeds, the camera will take 10 pictures and store them as JPEGs in the current directory.
    PySpinのExamplesディレクトリに移動し、rootでAcquisition.pyを実行します。これが成功すると、カメラは10枚の写真を撮影し、JPEGとしてカレントディレクトリに保存します。

    (pi)$ cd Examples/Python3
    (pi)$ sudo python3 Acquisition.py
    
    

 

 

2023,江端さんの技術メモ

  1.  ターゲットのカメラ BFS-U3-89S6C-C
  2. 背景と目的
    『動かすこと』が仕事だからです(それ以上は秘密です)。
  3. 注意
    たまたま、以下の手順で動いただけで、これが正解かは分かりません。
  4. 手順
    1. USB3のセット
      デバイスマネージャーを起動する

      ドロップダウンリストを確認し、USB Root Hub (USB 3.0)を右クリック(またはタップ&ホールド)し、[Uninstall Device(デバイスのアンインストール)]を選択します(重複している場合は、1つずつすべてアンインストールしてください)。
      必要であれば動作を確認し、デバイスを再起動します。再起動すると、Windows 10が自動的にUSBドライバを再インストールするはずです(私は、リブートしました)。

    2. TELEDYNE FLIR のページにアクセス
      https://www.flir.jp/support/products/blackfly-s-usb3/#Overview あたりを叩くと、多分「アカウント作れ」と言われると思いますので、素直にアカウントを作ってログインします。
    3. そんでもって、https://statics.teams.cdn.office.net/evergreen-assets/safelinks/1/atp-safelinks.html から、

      をダウンロードして、インストールします。
      (理由はよく分かりませんが)ダウンロードした後にデバイスドライバを確認すると、デバイスがインストールされていました。

    4. SpinViewの起動
      メニューに、SpinViewが追加されているので、そこからアプリケーションを起動します。

      ここをクリックします。

      画面が出てくるので、以下のボタンを押して下さい。

      キャリブレーションに時間がかかるようですが、こんな感じの映像が出てきました

以上