今回は、プログラムを少し改善します。
弓の自動検出
Claude codeとGemini CLIを使って作ったプログラムですが、大体は良い感じですが、細かい所は、やはりコードを見ながら逐一指示するスタイルになりますね。
弓の検出アルゴリズムも良い感じにはしてくれますが、色を判定してとか、弓本体と毛(白)が平行に見えるよとか、アイデアを注入することそれに沿っては作ってくれます。自分でゼロからコードを書くよりは早いです。
輪郭検出した線群の処理なんかも、放っておくとかなり計算効率が悪い処理になっていて、指摘すると「そうですね」と素直に治してくれます。また、いろいろ直してくれるのは楽ですが、ちょっと直せばいいと思って指示するとガッツリ直してくれたりと。ま、指示が悪いんですけど、エージェントに慣れると意図まで汲んでくれる気になってしまいます。
そんなこんなで、何とか弓を検出できるようにはなりました。バイオリンのガイド表示とか、表示系の細かい修正と合わせて、完成した状態です。あまり、見た目の変化はないですが。

バイオリンを使ってテスト
で、バイオリンに取り付けた状態で確認します。
A線
まず、A線。椅子の上にバイオリンを置いた状態で確認しました。(撮影の都合上、弓は弓先と弓元が逆になってます。)
弦と弓を直角に配置した状態で、webブラウザの画面を確認します。

想定通り、弓が傾いて写ります。また、この時は、弓が検出できてません。まだまだ、改善の余地ありです。

G線
今度は、演奏してて一番確認しづらいG線。

今度は、反対に傾きますね。弓(というか毛)が検出できています。

E線
反対に、E線。

予め想定していたとは言え、結構な傾きです。このケースでは、弓の検出は割と良い感じです。検出した角度は、約83.4度で、直角の判定がまだ緩いので、perpendicular(垂直)表示が出てます。G線の時と余り角度は変わっていない様に見えますが、直角に近い判定というのも不思議です。

指板側
今度は、弓を指板ギリギリに、置いた状態です。

角度表示以前に、画角に嵌ってません。毛が見えているのでかろうじて角度は検出されてますが、赤線の位置が大夫ずれてます。

駒側
最後は、駒側です。

駒側だと一番良く写ってます。ただし、弓の検出が微妙です

バイオリン固定部
カメラとバイオリンの位置関係を横から見るとこんな感じです。カメラを駒上ギリギリにしているので、画面中心はf字孔あたりになって、弓と弦を鉛直にみることは難しいです。カメラの位置をこれ以上指板側に持っていくと演奏しているときに当たりそうでそれも出来ないです。

今後
ということで、思った通り、カメラ画角が駒から指板側を見る形になってしまい、弦と弓が直角でも画面上はそうならないことがわかりました。これは、根本的な改善が難しそう。
あと、実際、画面を見ながら弾けるか(練習になるか)という問題が残ってますが、これについては、プログラムが大体出来たのて、少し使って試してみます。
プログラムの更なる改善は(やるにしても)それからです。
今の所の感触としては、また、使い物にならないものを作ってしまったことになりそうですが、少なくとも AIエージェントを使ったコーディングの経験ができたことが成果かなと思います。
結局は、鏡を見ながら地道な努力しかないんでしょうかね。