ブラウザ内画像処理のチューニングは Python で同一パイプラインを複製し可視化ループで回す — 確定後に定数を移植し元環境で再検証
開発環境
画像処理
デバッグ
運用
OpenCV.js などブラウザ内で動く古典 CV アルゴリズムの定数・構造チューニングを、ブラウザテストの実行ループ(起動が遅い・中間状態が見えない・ログ頼み)で回すと手探りになる。Python OpenCV で同一アルゴリズムをステップ互換に複製したハーネスを作り、秒単位のループで確定させてから移植するほうが速い。
手順
- 本番と同じ入力条件(前段の縮小・補間方式まで)で fixture を読み込み、期待値(検出数・位置)をコード内に固定した判定付きハーネスにする(OK/NG 一覧が1コマンドで出る)
- 中間状態(二値化結果・モルフォロジー後・候補の採否を色分けした描画)を PNG で書き出し、目視で失敗原因を特定する。数値ログだけでの推測をやめる
- 定数・アルゴリズム構造が確定したら、処理順・カーネル・閾値を忠実に元言語へ移植し、元環境のテストで同じ結果になることを必ず再確認する
適用条件・判断基準
- イテレーション1回が数十秒を超える、または中間画像の目視が必要になった時点で移す。単発の回帰確認なら元環境のテストで足りる
- 両環境の API 差(補間モード・カーネル形状・丸め)は写経レベルで揃える。乱数や非決定的要素を入れない
- 移植後の元環境再検証を省略しない。ハーネス側で 9/9 でも移植ミス(1行の閾値・引数順)で崩れる
効果(実例)
ブラウザテストループでは数周しても収束しなかった検出器の構造転換(クラスタ方式→コンテナ併用)を含むチューニングが、可視化ハーネスでは数十分で 9/9 に到達し、移植後のブラウザテストも一発で一致した。