導入
前回の記事では、
生成AIを使いながら野球のスイング解析を作り始めた話を書いた。
人体の骨格検出については、
想像以上に簡単だった。
「MediaPipe」という仕組みを使うことで、
- 肩
- 肘
- 手首
- 腰
- 膝
などをかなり高精度で取得できたからだ。
しかし、
実際にスイング解析を作ろうとすると、
次の大きな壁が現れた。
それが「バット検出」だった。
人体は認識できるのに、なぜバットは難しいのか?
最初は単純に考えていた。
「バットなんだから、
細長い棒状の物体を検出すればいいのでは?」
と。
人体認識がここまで進化しているなら、
バットぐらい簡単に認識できると思っていた。
しかし実際に試してみると、
これがかなり難しかった。
棒状物体の検出を試してみた
最初に試したのは、
「細長い形」を検出する方法だった。
バットは基本的に細長い。
そのため、
- 輪郭抽出
- エッジ検出
- 線分検出
などを使えば、
それっぽいものを追えるのではないかと考えた。
しかしここで問題が起きる。
背景にも“棒状のもの”が大量に存在していた。
例えば、
- ネット
- フェンス
- 地面のライン
- 影
- バットケース
- 柵
など。
人間なら簡単に区別できる。
しかしAI側から見ると、
どれも「細長い線」に見えてしまう。
結果として、
本来追いたいバットではなく、
背景側に吸われることがかなり多かった。
探索範囲を限定してみた
次に考えたのは、
「身体の近くだけを探せばいいのでは?」
という方法だった。
スイング中、
バットは基本的に身体の近くに存在する。
そのため、
骨格検出と組み合わせて、
- 手首周辺
- 腕の延長方向
- 一定範囲内
だけを探索対象にしてみた。
しかし、
これも簡単ではなかった。
スイング中のバットは想像以上に動く。
しかも、
- 高速移動
- モーションブラー
- フレーム端への移動
- 身体との重なり
などが発生する。
探索範囲を狭くしすぎると、
今度はバット自体を見失う。
逆に広げると、
また背景に吸われる。
かなり調整が難しかった。
先端の色を追う方式に変更
そこで次に試したのが、
「バット先端の色」を追う方法だった。
例えば、
先端部分に特徴的な色があれば、
色抽出で追跡しやすくなる。
OpenCVを使いながら、
- HSV色空間
- マスク処理
- 色抽出
などを試してみた。
これによって、
ある程度は改善した。
しかし、
やはり問題は残った。
背景に似た色が存在すると、
そちらに吸われてしまう。
さらに、
- 照明
- 反射
- 影
- 動画圧縮
などでも結果が変わる。
思っていた以上に、
「現実の映像」を扱うのは難しかった。
そこでYOLOを試してみることにした
ここまで試して感じたのは、
単純な画像処理だけでは限界があるということだった。
そこで次に試すことにしたのが、
「YOLO」という物体検出AIだ。
YOLOは、
AI自身に「これはバットです」と学習させる仕組みになる。
つまり、
- 背景
- 人体
- フェンス
- 影
などではなく、
“バットそのもの”を認識させる方向だ。
ただ、
これも簡単ではない。
バットは高速で動き、
映像によってはブレて形すら変わる。
それでも、
少しずつAIに学習させながら、
どこまで検出できるのか試してみたいと思っている。
まとめ
人体の骨格検出までは、
想像以上にスムーズに進んだ。
しかし、
実際にスイング解析を作ろうとすると、
最大の壁は「バット検出」だった。
- 背景に吸われる
- ブレる
- 見失う
- 身体と重なる
など、
人間には簡単に見えることが、
AIには非常に難しい。
それでも、
試行錯誤しながら少しずつ形になっていくのはかなり面白い。
次は、
YOLOによるバット検出と学習について試していきたい。

コメント