野球ボールをAIでトラッキング 〜YoloとOpenCVを用いた方法の検討〜
現在、スポーツ、とりわけ野球ではデータ活用が非常に進んでおりトラッキングデータの取得も重要になっています。投球においても打撃においてもトラッキングデータの活用が非常に重要であり選手の上達の手助けになっています。他方でトラッキングデータを測定する機器は非常に高価であり、比較的導入が簡単であるスピードガンでさえ数十万円と非常に高価であることが問題です。
近年の内蔵カメラの精度向上や画像認識技術の向上によりスマートフォンで撮影した映像で手軽に物体認識ができるようになってきました。これを用いてボールをトラッキングできないかというのが本記事の内容です。本記事では、Yolov8やOpenCV を用いた2つの手法でボールの追跡を試みました。画像認識に用いた動画は友人から提供してもらいました。動画アップロードされていたものを画面収録したためそのfpsの差異から隣あうフレームの画像が同じになってしまいました。そのため動画としては60fps ですが実質30fps となってしまっていることにご留意ください。しかしながらフレーム番号は60fps のものを用いています。Python のバージョンは3.9.15,numpy のバージョンは1.22.4 で実行はVSCode にJupyterLab を導入した環境で行っています。
・Yolov8を用いた方法
COCO データセットを用いて検出を行ったところ実行結果は以下のようになりました。
また、実行時間は2m11sと動画の長さに対してかなりかかってしまいましたが比較的良い精度で野球ボールの検出ができました。
テンプレートマッチングを用いた方法
テンプレートマッチングとは、画像中のテンプレート画像と一致する部分を探す手法です。テンプレートとしては以下の画像を用いました。
また、テンプレートマッチングを精度良く行うために、グレースケール化、2 値化、背景差分を行いました。
実行結果
実行時間:13.6s
Yolov8を用いた方法よりも実行時間が短く、精度も大きくは変わりませんでしたしかしながらキャッチャーが捕球する前後の1フレーム(65フレーム目)は取れなかったため、キャッチャーの捕球場所を取得するにはYolov8を使った方が良さそうです。
せっかくなのでスプライン補完を用いて投球軌道の描画も行ってみました。
投球軌道が視覚的にわかりやすくなりました。
今後の展望
今回はボールのトラッキングと投球軌道の描画のみを行いましたが、捕球したコースや球速も取得できそうです。特に捕球したコースは現状定量的な評価が難しいことが問題となっており現場でも有用なデータとなるのではないでしょうか。
何かの参考になれば幸いです。
参考文献
[1] YOLOv8, https://yolov8.com/
[2] Python+OpenCV で野球ボールをトラッキング, https://qiita.com/t_okkan/items/e08116d989bd9e241052