FIGURE / DECOMPOSITION RECORD
739 行のモノリシックを 6 つの単体スクリプトに解体する
01

4 回の修正でアームは動かなかった。仮説(書き換える対象)と現象(動かないこと)が別の単位で発生していた。仮説の検証粒度がコードの構造粒度を超えていた。

place_test.py : 739 lines, monolithic

動作単位ごとに分ける。01 daemon、02 send_angles、03 camera、04 detect、05 capture、06 integrate、07 classify。各スクリプトは単独実行可能で、検証する挙動が一つだけある。

↓
02
01 daemon即動作 → 白 02a send_anglesj1 diff 1.04° → 白 03 cameraFPS 9-10 安定 → 白 04 detect誤検出露出 (アーム link を拾う)

04 で初めて真因が一発で見えた。旧テンプレが古く、マット ROI 内のアーム link を白箱としてマッチしていた。

↓
03

05b で HSV 白色マスクによる自動トリム機能を実装。マウス操作の精度に依存せず、白箱本体の外接矩形でテンプレを切り出す。

19 枚撮影 → trim_ok 19 / trim_fallback 0

07 で minAreaRect により角度を自動測定。parallel 8 枚 / skewed 11 枚に分類。撮影中に混入していた 30° 前後のテンプレを物理退避し、0° の 8 枚に絞った。

↓
04

06b → 06c → 06d → 06e → 06f の 5 段階で改善。各ステップは差分一つ。grep でコード内部仕様を読み、モンキーパッチで定数を上書き。test_white_box_score.py 本体は触らない。

06d
21.0s
06e
14.5s
06f
5.1s

支配的だったのは BGR → GRAY 化。matchTemplate の計算量はチャネル数に比例する。3 → 1 で 2.84 倍速、理論値とほぼ一致。

↓
05

各単体スクリプト 50〜200 行。AI がコード全体を一度に把握できるサイズ。grep で内部仕様を読み、time.time() で計測し、print で観測する。

推測 → 測定

動機は「コード品質」ではなく「AI が判断できる粒度」。これを呼ぶ職能はまだ定まっていない。ソフトウェアアーキテクト、DevEx、リサーチエンジニアが扱ってきた領域に、AI Workflow Design という新しい層が重なる。

CLICK A SECTION TO EXPAND