Skip to content

0.8.2 - #45

Merged
sasaken1102r merged 73 commits into
mainfrom
release-0.8.2
Oct 29, 2026
Merged

sasaken1102r merged 73 commits into
mainfrom
release-0.8.2

Conversation

@sasaken1102r

Copy link
Copy Markdown
Owner

0.8.2: wide-open eyes read as half-shut far less often with prescription inserts, lid dots in the eye preview, a gaze that no longer freezes when one open eye keeps reading closed (#32), "Own gaze per eye", and an opt-in "Record for squint training". Same code as 0.8.2-beta.5; only the version and the changelog change.

  • Version 0.8.2; the beta.2-5 changelog sections are merged into one 0.8.2 section, with thanks to the person who sent the recordings.
  • Built and tested on the Frame from ee8276c: frameeyeosc 261 tests, eyecam 135 + 10, panel ctest 16/16. eyecam-grab unchanged (294d06c6…).

🤖 Generated with Claude Code

sasaken1102r and others added 30 commits October 21, 2026 21:41
開いた目の確かめ(前の瞳を見失ったあとは、開いた目の瞳の 0.45〜1.3 倍か)は、瞳の大きさを
受け入れた瞳の 20 秒の中央値で覚えている。まばたきで前の瞳を忘れたとき、瞳がもう 1.3 倍を
超えていると、暗さも見え方も開いた目のままなのに大きさだけで捨てられ、受け入れないので中央値も
動かず、瞳が縮むまで見つからなかった(録画 26 本で 1 回、目が開いたまま 7.4 秒)。

- 大きさだけで捨てた瞳(1.3〜2.5 倍、暗さと見え方は開いた目と同じ、iris の box は皮膚ほど明るくない、
  前の瞳なし)が 0.3 秒続いたら受け入れ、開いた目の瞳の大きさを覚え直す
- テスト: 半径 20 で覚えたあと、まばたきして 30 で戻った瞳が 0.3 秒以内に見つかり、そのまま続く
- 録画 26 本と校正 10 本: 34/36 がバイト単位で同じ。違う 2 本(大きさで捨て続けていた録画)で、
  開いた目の瞳の検出 88.81% → 89.01%、誤った半目 5.53% → 5.37%、閉じ・細め・見開き・校正は同じ

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ユーザー校正の細め f_sq は、そのかぶりの閉じと開きの間の割合だが、ライブは履歴の中央値の
間(閉じと開きの差)にその割合を掛けていた。かぶりごとの間は履歴の中央値の 0.58〜1.50 倍
(開発者の 40 回)なので、校正した細めが 0.65〜1.52 の細めとして出ていた(ユーザー校正 5 回)。

- UserParams.sq_depth: 細めの開きが開いた目より何 R 狭いか(そのかぶりの値)。校正で書き、
  ライブはあればそれを今の開きから引いた所を細め 1 にする。ないファイル(これまでの校正)は前と同じ
- テスト: 校正で深さが入り、ファイルを通っても同じ。深さのない校正はファイルに書かない
- 録画 26 本と校正 10 本(深さのない校正ファイル): 36/36 がバイト単位で同じ
- 深さを入れた校正ファイルで流すと(各ユーザー校正の直前のかぶりの間から作った): 合図の細めの
  EyeSquint の平均 0.760 → 0.706(≥ 0.5 は 0.821 → 0.812、≥ 0.9 は 0.534 → 0.351)、合図の
  開いた目で細め ≥ 0.5 は 2.4% → 0.8%。浅く出ていた校正(0.65 / 0.84 倍)は 0.455 → 0.701、0.584 → 0.676

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- FEO_DOUBT_DIAG を付けて --replay すると、目ごとにカメラのまぶたへ切り替わった回数と時刻、それまでに疑いを足した閉じの数、
  まばたきが送られずに終わった数、目を開け直したあとカメラの「閉じ」で 0 に留まった長さを出す
- FEO_CAM_FPS / FEO_CAM_DELAY_MS で、記録したカメラを遅いカメラ(例: 15 fps、処理の遅れ 167 ms)に見立てて流し直せる
- LidDoubt に診断用の値(直前の目のサーバーのまぶた、閉じかけか、一致したか)を持たせる。出力には使わない

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
目のサーバーが開いた目をカメラより CAMERA_AGREE_GAP 以上低く読む(0.4.x で開いた目が 0.6-0.95、フィットを通して VRCFT 0.59、
カメラは 0.75)と、二つが一致することがなく、疑いが消えない。まばたきのたびにカメラの遅れ(中央値 44-67 ms)が足され、
間が何分空いても 7 回ほどでその目のまぶたがカメラのものになり、カメラが見逃したまばたきが開いたまま送られる。
CAMERA_DOUBT_CLEAR_OPEN(1 秒)開いていれば、一致していなくても疑いを 0 に戻し、まぶたを目のサーバーのものに戻す。

記録(2026-10-08 と 10-16、計 0.67 時間)の流し直し: カメラのまぶたに切り替わった回数は L 63 / R 79 のまま、カメラのまぶたで
いた時間が R 130 → 111 s(blink-sync 0.35 では 218 → 194 s)。送るまぶたが変わったのは 0.6% の標本、0.05 を超えて変わったのは
0.1%。新しいテストは修正なしでは落ちる。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- eyecam: 大きくなった瞳を取り直したとき、開いた瞳の大きさを空にせず、その瞳の大きさ 30 個で埋めてから続ける。空のままだと 30 個たまるまで(90 fps で約 0.7 秒、15 fps で 2 秒)大きさのゲートが効かず、その間に目を閉じると閉じたまぶたのしわを瞳として取りえた
- eyecam: 取り直す瞳は丸さも開いた瞳と同じものだけにする(閉じかけの横長のまつ毛の線を除く)
- eyecam: ライブの細めの深さ(sq_depth)を、校正が f_sq にかける上下限(F_SQ_MAX・F_SQ_MIN)と同じ範囲に、使っている gap に対して収める。かぶりの gap が履歴の 0.6〜1.5 倍あるので、そのままだと深さが gap の 0.09〜2.25 倍まで出うる
- eyecam: 追跡のやり直しで、大きくなった瞳の数も 0 に戻す
- replay: FEO_CAM_FPS が 0 以下なら無視する(診断のみ)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
f64::clamp は上下限が NaN だと panic する。履歴がなく(かぶり校正で見開きを取り逃がした初めての人)、瞳をまだ見つけていない最初のフレームでは虹彩の半径 r も gap も NaN なので、sq_depth 入りのユーザー校正があると eyecam が起動のたびに落ちていた。max/min にして、NaN のときは前と同じく細めの値を保つ。そのケースのテストを足した(clamp のままだと落ちる)。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
4fa0f2a で足した丸さの条件が両側だったので、直しが効いていた唯一の録画(19-42-44 左目の 7.4 秒)がまた止まっていた。その瞳は暗くなって開いたのではなく、耳側に 40° 向いてカメラに正対し、1.4 倍に大きく、b/a 0.93 と丸くなっていた(いつもは 0.80)。平たい側だけで切るので、閉じかけのまつ毛の横長の線は今までどおり落ちる。再生(録画 26 本): 開いた目の瞳の検出 88.83 → 89.01%、1 秒以上の「大きさだけで捨てた」区間 1 → 0、閉じ・細め・見開きは同じ。max/min のコメントも正確にした。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
片目だけ gaze_hold_below を下回る状態が 1 秒(ONE_EYE_HOLD_MAX_S)を超えたら、
その目の読みを疑って視線の保持をやめ、開いている目の視線で動かす。
両目が下回る間(まばたき)は今まで通り保持し、タイマーはその目が線を上回ったら
やり直す(まばたきではやり直さない)。v1/v2・independent_eyes のどれでも同じ。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
despike が落とす 1 サンプルの飛びでタイマーが 0 に戻り、そのあとまた 1 秒止まっていた。
線以上が 2 サンプル続いたときだけやり直す。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
own_eye_gaze(--own-eye-gaze、0〜1、既定 0)。v2 で independent_eyes のとき、
目ごとの左右の視線を寄せた視線からどれだけ目ごとの値に近づけるか。
フィルターの前に混ぜ、寄り目の通し分は (1 - own_eye_gaze) だけ足す。
0 はこれまでと同じ値、1 は目ごとの値そのまま。視線が不確かな目は
もう片方の目のものを使う。パネルは視線 › 動く範囲に − / + の行を足す。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
度付きレンズのインサートの人の左目は、校正の閉じで下まぶたの線が開いた目より 0.98 r(中央値)下に外れ、閉じた目が 0.95 r 開いていると読まれて、開きの幅が 0.30 になっていた(右目は閉じると線が重なる)。

- 瞳なしで見つけた下まぶたの線が、最後に瞳ありで見た線より 0.9 r 以上下なら、その最後の線を使う(下まぶたはまばたきでほとんど動かない)。開発者の録画 26 本では、瞳なしの線の 0.5%(その 9 割は閉じた目)
- 下まぶたの線が探す帯の下端に張り付いたら(上まぶたの線と同じ決め方)、線なしとして同じく最後の線を使う
- 瞳が丸ごと見えている(光線の 75% 以上が縁に届く)のに上まぶたの線が瞳の中心より下なら、線なしにする(同じ人の左目の見開きで半分以上のフレーム。開発者の録画では 0.001%)
- 校正のやり直し(reset_tracking)で、持っている下まぶたの線も忘れる

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
同じ人の右目は、校正の虹彩の半径が 88 px(左目 40.8、瞳は左目の 1.2 倍)になり、iris box とまぶたの探す帯が倍になって、閉じの「box が開いた目の 1.3 倍」が効きにくくなっていた。鼻側の光線が、強膜の向こうのもっと明るい縁(飽和していないインサートの帯など)を一番強い立ち上がりとして取ったと考えられる。

- 虹彩の半径の長い中央値が、開いた瞳の半径の中央値の 4 倍を超えたら、そのかぶりのあいだ、鼻側の光線は「一番強い立ち上がり」ではなく「その半分以上の強さで、途中で勾配が半分未満に下がって分かれている、手前の立ち上がり」を虹彩の縁にし、半径の中央値を学び直す
- 開発者の校正の録画 10 本では、この比はいちばん大きくて 3.3(中央値 2.2)なので、開発者の映像では一度も切り替わらない。同じ人の校正は左目 3.0、右目 5.4

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
最初から切り替えた状態で録画 26 本を流した(映像を 25 px 上にずらし、x 300 から明るさ 235 の鼻側の帯を足して、虹彩の半径を中央値 79 / 75 px に引っぱる腕)。

- 0.35: 半径 62 / 58 px(帯なし 61 / 54)、自由使用の閉じの取りこぼし 1.27 → 0.84 回 / 目・分、細め 0.81 → 0.87、見開き 0.72 → 0.80。誤った半目は 5.3% → 7.9%
- 0.5: 半径 73 / 68 px、取りこぼし 1.06
- 元の録画では、最初から切り替えてもほぼ変わらない(取りこぼし 0.39 → 0.40)。切り替えそのものは元の録画では起きない(バイト一致)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
切り替えで虹彩の半径を覚え直す(例: 88 → 40 px)と、半径で大きさが決まる iris box は小さく暗くなるのに、開いた目の box の明るさ(60 秒の中央値)は前の大きさのまま残り、閉じの「開いた目の 1.3 倍」に最大 60 秒届きにくくなっていた。切り替えのときに一緒に空にし、30 サンプル(約 0.7 秒)で覚え直す。

録画 26 本の再生(映像を 25 px 上にずらし、鼻側に明るさ 235 の帯を足して虹彩の半径を引っぱる腕。切り替えは 4 倍の条件のまま):
- 覚え直しあり / なしで、自由使用の閉じの取りこぼし 1.08 / 1.08 回 / 目・分、0.2 秒未満のまばたき 0.834 / 0.834、誤った半目 6.4% / 6.5%、開いた目で閉じ 2.6% / 2.8%
- 合図の細め 0.824 / 0.793(1 本の録画で、閉じと読まれていた細めが細めに戻る)、合図の閉じ 0.940 / 0.956(1 本の録画の右目で、切り替えが閉じの段の途中で起き、覚え直すまでの 0.7 秒ほど閉じが出ない)
- 元の録画では切り替えが起きないので、何も変わらない(26 本と校正 10 本がバイト一致)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
0〜100 % を 10 % 刻みから 5 % 刻みにして、5 % のような小さな混ぜ方も選べるようにする。設定ファイルの値の範囲と既定(0)は変わらない。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
f32 の空の合計は -0.0 になり、{:.0} で「-0」と出ていた(#41 のログ)。件数は整数で足してから f32 にする。テストで「0 published samples」を確かめる。

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- 度付きインサートの人の録画(2026-10-23): 普段の段の線(0.73 / 0.68、まぶたの縁)と、見開きの段の高い範囲の線
  (まつ毛の先、2.01 / 1.88)を比べていたので、見開きの幅が 1.30 / 1.15 になっていた(0.8.2-beta.1 の校正で 1.165 / 1.054)。
  高い範囲は普段の段でも同じまつ毛の先を 1.69 / 1.67 に見つけている
- 高い範囲が普段の段のフレームの 1/4 以上でも線を見つけていて(inlier 0.5 以上)、見開きの線がその中央値より上なら、
  見開きの幅はその上がった分にする(この録画で 0.33 / 0.23)。calib_result.json に widen_upper_rose_from、ログに rose from
- 見開きの幅が 0.9(MAX_WIDEN_STEP)より大きいときは見開きが取れなかった扱い(いつもの幅、履歴に入れない)。
  履歴の幅の中央値からも 0.9 より大きいものは除く。開発者の 47 回は 0.15〜0.43
- 開発者の dev 校正 20 回の replay は前と同じ値(増えたキーを除く)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- 度付きインサートの人の録画(2026-10-23): 白目が明るく照らされ、インサートの映り込みとまつ毛が長いせいで、
  上まぶたの線が普段の段で 76 % / 77 %、見開きで 86 % / 96 % のフレームで瞳の中心より下に出て(線なし)、
  残りもほとんど中心のすぐ上(0.05 R)。ライブでは見開いた目がほぼ閉じかけに読まれていた
- 瞳が丸ごと見えている(光線の 75 % 以上)フレームで、線が瞳の上端(cy - b)より下なら、探す範囲の上端から
  瞳の上 2 px までで探し直し、端に張り付いていない線があればそれを上まぶたの線にする。瞳がないフレームは今までどおり
- この録画の校正: 普段の段で線が取れたフレーム 368 / 350 → 1419 / 1504(1512 中)、見開きの幅 0.52 / 0.50(main から)
- ライブ(この録画でユーザー校正を当てた replay): 見開きの段で EyeWide > 0.5 が左 35/0/0 % → 76/22/19 %、
  右 0/0/0 % → 89/93/90 %。普段の段の細め > 0.5 の誤読も消えた
- 開発者の録画 19 本(約 40 万行): skin_up が変わるのは 0.04〜0.10 %、出力の目の値の変化は 1 本で EyeWide 4 フレームだけ。
  dev 校正 20 回は前と同じ値

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- チェック担当の指摘: 同じ人(2026-10-14 / 10-17 の校正とガイド撮影の人。度付きインサートのテスター)の 10-17 の校正は
  普段の範囲で 0.83〜0.87、ガイド撮影は 0.80 / 0.90 を測っていて、0.9 の上限だと通らないことがある
- MAX_WIDEN_STEP 1.1(校正で見開きとして通す上限)と HISTORY_MAX_WIDEN_STEP 0.9(履歴の中央値から除く)に分ける
- 10-17 の calib_samples.csv(0.7.9、skin_up2 なし)をこのコードで当てはめ直すと 0.7.9 と同じ
  (b_n 0.875 / 0.705、見開きは取れずいつもの幅)。ガイド撮影の特徴量では幅 0.795 / 0.900 で通る(b_w 1.78 / 1.88)
- 「1.9 はまぶたの縁ではない」という根拠のない一文を消し、テストを 1.9 / 1.91 に戻す。
  WIDEN_HIGH_REF_FRAC のコメントは 2026-10-23 の録画の画像で確かめたことと、しわが見開いたまぶたの縁より下に
  あれば幅が小さく出る(その録画はない)ことだけにする

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- チェック担当の指摘: 瞳の上端をかすめるだけのまぶた(上の 15〜20 % が隠れても光線の 75 % 以上は届く)でも
  探し直しが走り、まぶたの縁が探し直す範囲(瞳の上 2 px まで)の外にあるので、上のしわやまつ毛を取って開きすぎに読む
- 条件を y > cy - b から y > cy - 0.5 b にし、探し直した線は inlier の割合が元の線以上のときだけ使う
- テスト: 瞳の中心から 8 px 上(上端と半分の間)のまぶたと上の弱いしわ → まぶたのまま。前の条件だと 149 のしわを取る
- 度付きインサートの人の録画: 校正の見開きの幅 0.515 / 0.505、普段の段の線 1419 / 1501(1512 中)。
  ライブの見開きの段は前のコミットと同じ(左 76/22/19 %、右 89/93/90 %)
- 開発者: dev 校正 20 回は同じ値、ライブ replay 19 本は 18 本が同じで、1 本だけ 50 行(0.16 %、EyeWide の反転 4 フレーム)

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ユーザー校正の途中にほかのアプリから --action recenter が届くと、点が出て、
校正のために上を見ているときの視線の正面を保存していた。

- eyecam::calibrationUnderWay: eyecam-rec が calibrating(目の映像を待つ間も)か、
  パネルが送った校正の返事待ち
- --action recenter / fit / relearn は校正中なら 11 と "busy (the eye cameras are calibrating)"
  (frame-aux-shortcuts 0.4.0 は 11 + calibrating を「目のカメラの校正中です」と出す)
- 目を合わせるタブの[目を合わせる][真ん中だけ合わせ直す]を校正中はグレーにし、理由を見出しに出す
- 被ったときの自動の合わせ直しは、校正が終わるまで待つ
- テスト、README の終了コードの表、更新履歴

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
- 2026-10-24: 再起動のあと HMD をかぶらないうちに映像をつかみ(proximity 15.2)、空の HMD の絵から 5 分間
  探す範囲(x 117 から)・明るさ・虹彩の半径を覚えた。かぶったときの映像の途切れが 5 秒で NEW_WEAR_GAP(10 秒)より短く、
  覚え直さないまま校正して、瞳が 486 枚中 88/5・130/13・162/85 枚しか見つからなかった(新しいエンジンなら 486/486)
- eyecam-rec が Msg::NewWear を送る: idle で「searching again」のあと映像が戻ったとき(途切れの長さによらず)、
  録画・校正中の再ロック、近接センサーが 10 秒以上「かぶっていない」のあと「かぶった」に変わったとき
- livesvc は、その前の 10 秒の映像でどちらかの目の瞳が半分以上見えていたら(かぶったまま。センサーはかぶっていても
  上・下を見たり見開いたりすると 1〜2 秒 0〜15 に落ちる: 開発者の校正の status.jsonl)と、校正中は覚え直さない。
  センサーが「かぶっていない」間もエンジンには映像を渡す(低く読む人の追跡を止めないため)
- 確認: ライブの worker に暗い空の HMD の映像を 5 分、5 秒止めてから calib_2026-10-24_17-53-32 を流すと、
  今まで L 482 / R 97、NewWear ありで 486 / 486。開発者の dev 校正 20 回の replay は同じ値。cargo test 128 + 10
- README・更新履歴(英・日)に書く

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
sasaken1102r and others added 29 commits October 25, 2026 17:09
送り方の注意は「公開の場所に上げない」を残したまま、「Google ドライブなどに置いて、共有リンクを開発者に非公開で送ってね」にする(EN も)。
左右を見る段の文を短くする(説明画面の「左・右は自分から見た向き」はそのまま)。README・panel/README・更新履歴とテストも合わせ、
--fake-contrib に左を見る段の running-left を足す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 原因: HMD を外しているとき、写っていないスロットのところでリングをたどるのが止まり、部分的なリングになる。
  0.7.9 の 4+4 のガードは 8 スロットそろったリングにしか効かず、部分的なリングはアドレスの区切りどおり
  (5 スロット [1, 0, 0, 0, 0] → 右目 1 スロット = 4 枚に 1 枚)か、区切りがなければ絵の似かたで両目に分けていた
  (左目のカメラの 4 スロットだけを [1, 0, 0, 0] などに分け、右目に左目の映像を送っていた)。
  journal の 2026-10-16〜25 のロック 138 回のうち 17 回がこれで、どれも外しているか、かぶったその秒
- discover: 両方のカメラのスロットがあっても 4 つずつそろわなければ取らない(stopped_at few_slots、ログ「not taken」)。
  区切りのない部分的なリングは片方のカメラだけとして扱い、絵では分けない(cameras_by_picture を消す)
- 念のため: ロックしたあと、片方のカメラの枚数がもう片方の半分未満(0 ではない)の状態が 5 秒続いたら探し直す
  (ring::FrameBalance。待機中のライブと録画・校正の両方。meta.txt に unbalanced_at_t_raw)。
  片方のカメラが止まったときは今までどおり
- テスト: 写っていないスロットのある模擬カメラで取らないこと、実機で起きた形(5 / 6 スロット、左目だけの 4 スロット)、
  FrameBalance の 5 秒と、やり直し・止まったカメラ・72 対 90 では動かないこと

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
左右のカメラは同じ速さで撮る(119 本の録画と校正で 0.999〜1.000、15 fps の HMD でも同じ)。片方のスロットの一部だけで掴むと
1/4・2/4・3/4 になるので、frames.csv の目ごとの枚数で少ない方 / 多い方 < 0.9 なら Check::Uneven として aborted/ に入れ、
「片目のカメラの映像が遅かったよ(左 8490 / 右 2124 枚)。HMD をかぶり直してからもう一度撮ってね」を出す(EN も。info.txt の why にも)。
--fake-contrib uneven、テスト、panel/README、更新履歴(0.8.2-beta.3)も合わせる。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- チェック担当の指摘: 4+4 がそろっていても片方のカメラが本当にずっと遅い HMD だと、ロック → 5 s → 探し直し →
  同じリング → … が永久に続き、毎回 1〜2 s のフレームを失い、record() の relocks も増え続ける
- ring::Relooks: アンバランスで探し直したリング(スロットの位置 off)を覚え、同じ off でまたアンバランスになったら
  探し直さずにそのリングを使い続ける(ログは 1 回だけ「on the same slots as before: kept」、FrameBalance::give_up)。
  待機中(idle)と録画・校正中(record)でそれぞれ、最後の 8 つのリングを覚える
- idle のコメントを「新しいかぶりにする(目がかぶっているように見えなければ: new_wear_hint)」に直す
- テスト: 同じスロットは 1 回だけ探し直す、別のリングはまた 1 回、覚えるのは最後の 8 つ。give_up のあとは探し直さない

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
前の重みは、レンズの白い帯や明るいところがある映像で閉じた目を「開き」と読み、閉じや細めを消していた。
ファイル名・ネットの形・前処理・規則は同じ。veto.rs のテストは新しい重みの値に直し、閉じと読ませる作り物のフレーム(暗いまぶたの線)を足す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- 度付きインサートを使っている人の録画 2 本(2026-10-25): 見開きの段で半目と読まれたフレームでは、最初の線が
  瞳の中心から短半径 b の 1.05〜1.21 倍(中央値 1.13 b)にあり、ぼけた瞳の上の縁を拾っていた。0.5 b では
  探し直しが一度も走らなかった
- 探し直しの境目を 1.2 b にする。ML の流し直し: その 2 本の見開きの段で EyeLid < 0.5 が 左 37.1% / 右 15.8% -> 5.0% / 3.6%、
  見開きの検出 0.592 -> 0.917。開発者の録画 26 本と校正 10 本は、半目・細め・まばたきの数字が同じ。
  1.3 b では開発者の細めのフレームの 61% で探し直しが走り、1.4 b で細めが 0.47 pt 落ちてまばたきも 1 回取りこぼす
- Frame での流し直し(このビルド): 録画 1 本目 左 46% / 右 11% -> 6% / 4%、2 本目 48% / 20% -> 6% / 4%(EyeLid < 0.5、
  そのかぶりの校正、感度 0.9)。開発者の録画 16 本では、33 万フレーム中 上まぶたの線が変わったのは 270、
  EyeLid が 0.1 より動いたのは 2、閉じの判定の変化はなし
- テスト: 境目の 3 px 上の線はそのまま残り、2 px 下の線は瞳の上で探し直される(境目の値に合わせて動く)
- README(eyecam)に探し直しの決まりと数字を書く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
eyecam-rec は preview ファイルの version 1 で空いていた最後のページの残りに、目ごとのまぶたの線
(上まぶたの皮膚の線とふちまでの幅、下まぶたの線。当てはめた放物線の両端とまん中の行)と、
そのフレームで送った EyeLid を書く。場所はヘッダーの予約だった 52・56 に書くので、version は 1 のまま
古いパネルは今までどおり読め、新しいパネルは線のない古いファイルも線なしで読む。
線がないフレーム(見つからない・帯の端・下の線を前の線で置き換えた)は NaN で、何も描かない。
検出は変えていない(録画の --replay の CSV がこの変更の前とバイト単位で同じ)。

パネルは上まぶたのふちを水色、下まぶたをピンクの線で、暗い縁取りの上に描き、
映像の左下に「カメラ まぶた 0.62」を出す。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
下まぶたの線が映像ごとに数 px 跳ねて目障りなので、パネルの表示だけ one-euro フィルターをかける
(目ごと・線ごとに、両端の列と両端・まん中の行、ふちまでの幅、EyeLid。映像の撮影時刻で。
止まっているとき 1 Hz、1 px/秒ごとに 0.05 Hz 上がる、速さは 1 Hz。EyeLid は 2.5 Hz/単位)。
開発者の録画で下の線のジグザグの約 6 割が消え、まばたきは 1〜2 枚で追いつく。
線が無い映像・0.3 秒より空いた映像・時刻が戻った映像では、その線を今の場所からやり直す。
「生の値」では今までどおり読んだままを描く。eyecam と preview ファイルは変えていない。
--preview-follow SEC で、--dump-png の前にファイルを読み続けてなめらかにした線を描ける。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
one-euro だけでは、下まぶたの線が 1 枚だけ 5〜7 px 跳ねるのが半分の大きさで残っていた。
線の 5 つの数・ふちまでの幅・EyeLid を、直近 3 枚の中央値にしてから one-euro に通す(生の値以外だけ)。
1 枚だけの跳ねはまるごと消え、開発者の録画で下の線のジグザグの約 8 割が消える(前は約 6 割)。
そのかわり 1 枚(約 67 ms)遅れ、まばたきは 2 枚目から追う。やり直しの条件は同じで、
やり直したあとは手元の 1〜2 枚の新しいほうを使うので、線はすぐ出る。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- スイッチは 2 つの映像のあいだに縦に並べる(映像を出しているときだけ。場所を取らないので目の大きさは変わらない)
- 既定は全部オン、鏡と同じくパネルが動いているあいだだけ覚える(設定には残さない)
- 「まぶた」は上下のまぶたの線と左下のカメラのまぶたの値をまとめて消す。「閉じてる判定」はいつも出す
- --preview-sheet に :nolids / :nopupil / :nowindow を足す
- テスト: 既定オン、押すとその印だけ消えて戻る、閉じて開いても残る、映像オフではスイッチなし、ほかのボタンと重ならない

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
線の端が映像ごとに跳ねて、まぶたの値は合っているのに壊れて見えるため。
- 上まぶたのふち(水色)と下まぶた(ピンク)を、半径 4.5 px の点を暗い縁取り(半径 6.5 px)の上に描く
- 点の列は eyecam が開きを測る瞳の中心の列(feat.rs の y_at = 線の瞳の中心 cx での高さ)。瞳が無いフレームは線の真ん中。どちらも線の端の列のあいだに収める
- なめらかにする・「生の値」では読んだまま・「まぶた」スイッチ・カメラのまぶたの値・「閉じてる判定」はそのまま
- 映像の下の説明、更新履歴(Unreleased の行を点に書き直す)、README を点に合わせ、README に印のスイッチも書く

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sasaken1102r
sasaken1102r merged commit 7f2936d into main Oct 29, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant