AIは答えをくれない。テニスボールを追いかけながら気づいた、人間の仕事
機械学習経験ゼロのインフラエンジニアが、テニス動画のボール追跡サービス開発に挑戦。AIに頼るだけでなく、古典的な画像処理手法を組み合わせることで直面した壁を突破した、AI時代における人間の役割と開発プロセスを綴ります。

ボールが消えた。
コートの奥へ飛んでいくにつれ、画面の中のボールは数ピクセルになり、やがて機械学習モデルの認識範囲を外れていった。一般の人が用意できる機械学習モデルでは、手軽に撮った試合動画ではうまくボールを追えない。
そのことを実感したとき、私はようやく気づいた。——「機械学習以外の方法を使うしかない」。
私はクラウドインフラエンジニアで、画像処理や機械学習の実装経験はほぼゼロだった。それでも今、テニスの試合データの可視化・分析サービスを個人で開発している。この記事では、その開発を通じて学んだことを書きたい。技術の話というより、AIとどう付き合うか、といった話だ。
上達したいのに、情報がなかった
きっかけはテニスとの再開だった。
大学時代にテニスを始めたが、目的意識がなく練習していたため上達が頭打ちになり、やめてしまった。社会人になって再開したとき、同じ失敗は繰り返したくなかった。「ただ練習するのではなく、どうすれば上達できるのかを理解したい」と、思った。
大学で物理学を学んでいたので、テニスの動きや技術を物理的に解析すれば、感覚に頼らず論理的に上達できるはずだと考えた。でも既存の情報は断片的で、「なぜそうなるのか」を説明しているものが少なかった。
だから、自分で作ることにした。物理の視点でテニスを解説する学習サイトを立ち上げ、並行してエンジニアとしての技術力向上も兼ねて、試合データを集計・可視化・分析するサービスの開発に取り組んだ。そこで、サービス開発に必要な、試合動画からの打球位置、打球タイミングの取得とボールのトラッキングに挑んだ。
現実は、想定外だった
試作を始めてすぐ、最初の壁にぶつかった。
一般の人が手軽に準備できる撮影環境の動画でボールを検出しようとすると、機械学習モデルがうまく機能しなかったのだ。コートの奥でボールが小さくなると、一般の機械学習モデルでは安定して検出できない。
これは精度の問題ではなく、前提の問題だった。よく使われるボール追跡の手法は、プロの試合動画など特定の撮影条件で撮られた動画を対象としている。でも私が作ろうとしているのは、普通のテニスプレーヤーがスマートフォンなどで撮った動画を使って分析できるツールだ。一般的な撮影条件で機能することが要件なのに、既存技術の想定外だった。
しばらくの間、「もっと良いモデルがあれば解決できるはず」と機械学習の範囲内で考え続けた。でもそれは間違いだった。
「機械学習で解かない」という決断
あるとき、フレーム間の差分から動いているものを検出する「フレーム間差分」という古典的な手法を偶然見つけた。機械学習モデルを使うことばかり考えていた私にとって、これは意外な発見だった。
ただ、フレーム間差分だけではボールを検出できない。一般の人が撮影した試合動画には、選手やラケットなど、ボール以外にも動くものがあるからだ。
そこでAIと何度も壁打ちしながら、ボールだけを検出するにはどうすればいいのかを考え、試して、また修正した。動きの大きさや方向、位置関係など、さまざまな条件を組み合わせていった。そうしてようやく、一般的な撮影条件でもボールを追跡できる方法が形になった。
AIは一般的な解決策を見つけるのは得意だ。小さなボールを検出したいと聞けば、機械学習モデルや高解像度のカメラといった方法を提案してくる。でも、目の前の動画を実際に見て、使えそうな手法を見つけ、それを自分の問題に合わせて試行錯誤する必要があった。
最終的には、ボールのトラッキング、音声解析を用いた打球タイミングの検出、選手の位置・姿勢の推定を組み合わせることで、一般的なノートPC上でも、打球タイミングやそのときの選手の位置、ボールの軌道を取得できるようになった。
選手の位置・姿勢の推定に機械学習を使うが、音声解析で打球タイミングを特定し、そのフレームにだけ機械学習を適用することで、処理量を抑え、軽量に動作させることができた。
AIはコードを書く、私はアルゴリズムを考える
もう一つ、開発を通じて実感したことがある。人間とAIの役割分担についてだ。
私はクラウドインフラが専門で、画像処理のコードを書いたことがなかった。従来なら実装方法を一から学びながら書く必要があり、一つのアイデアを試すだけで膨大な時間がかかっていたはずだ。
生成AIを使ったことで、「アルゴリズムを考える → 実装する → 検証する → 改善する」というサイクルを高速に回せるようになった。生成AIがなければ、正直、時間がかかりすぎて途中で挫折していたと思う。
ただ、ここでも人間の役割は明確だった。ボールトラッキングで行き詰まったとき、AIに相談しても実用的な方法にはたどり着けなかった。自分で映像を観察し、「ボールにはどんな特徴があるのか」「ノイズとどう区別するか」を考える必要があった。
AIは候補を高速で出してくれる。でも現実を観察して、問題を正しく定義して、仮説を立てるのは人間だ。
試合データレポートサンプル
こちらは、テニスボールのトラッキングと、音声によるショットタイミング検出の動画である。
ボールをうまくトラッキングできている。下に表示されているグラフは、音声データを加工したものであり、ショットのタイミングと判定された時刻に、赤い三角形を付けた。
過検知はあるが、手前の人のショットは、ほとんど逃すことなく検出できる。

この画像のように、記事で紹介した技術を組み合わせることによって、ショットのタイミング、ショット時の選手の位置、バウンド位置がわかり、レポートに使うデータを取得できる。
これは、うまくデータを取得できた1枚である。今後も改良を重ね、さらに精度を高めていきたい。
公開サンプル https://d3exqymj0e0idp.cloudfront.net/samples
こちらは、ユーザーに提供するレポートのサンプルである。
動画からデータを効率的に収集して、このようなレポートを、なるべく手間をかけずに作ることが目標である。
今できること、まだできないこと
現時点では、ボールが途切れずに映っている映像であれば、数ピクセル程度の大きさでも安定してトラッキングできる。ただ、課題も残っている。
人とボールが重なった瞬間、トラッキングが途切れてしまう。この対策として、追跡中にボールの色特徴量を蓄積しておき、重なりが生じたときにその特徴量からボール位置を推定する手法を検討中だ。また、環境ごとにパラメータ調整が必要な点も、自動化を目指したい。
将来的には、ユーザー自身が動画から試合データを取得・集計し、分析に活用できるサービスにしていきたい。 そのためには、撮影条件の違いへの対応が鍵になる。まずはテニスで十分な完成度を実現することが先決だけれど、動体追跡の技術は動物や天体の検出など、他分野への応用可能性もあると考えている。
AIは道具。問いを立てるのは自分だ
この開発を通じて、一つのことが明確になった。
AIはコードを書いたりアイデアを出すことが得意だ。でも、現実の課題に対して最適な答えを出してくれるわけではない。「ボールが消える」という現象に向き合い、なぜ消えるのかを観察し、機械学習以外の方法を探す——その過程は、AIに任せられなかった。
AI時代でも、課題を分解して仮説を立て、結果を見ながら改善していくことは、人間の仕事だと思う。AIは答えをもらう相手ではなく、自分の考えを形にするための道具だ。
画像処理の素人が、機械学習に固執するのをやめたことで、一つの壁を越えられた。そのことを、一番の収穫だと思っている。


