DataTennis. NET

データテニス ドットネット

サイトについて(データテニス)

公開日:
最終更新日:2018/09/26

サイト名にある通り、「データ」×「テニス」をキーワードにブログ記事を書いたり、
データ分析用のツールを開発してます。
スコアを記録するスマホアプリや、統計データから試合の勝率を予測するツール、試合の動画解析ツールなどをつくっています。

・スマホアプリ

スコアを記録するAndroidアプリをつくって公開してます。タップ数を少なくして操作性をよくすることと、Statsデータをみやすくすることを意識してつくりました。インストールユーザ数は3600を超えました(2018/6時点)
記録することがデータ分析の第一歩なので、使ってもらえたら。
テニスのスコアアプリ「データテニス【Datatennis】」(for Android)

【Android App】DataTennis For Keeping Scores

app

↓のGooglePlayリンクからデータテニスをダウンロードできます。
Get it on Google Play

試合の動画解析ツール

今、開発中の段階ですが、テニスの試合の動画を画像解析して、選手の移動やテニスボールの軌道をトラッキングできるようにしようとしてます。選手の総移動量を計測したり、ポイントの内容を自動判別できるようにしたいと思ってます。スポーツ画像解析というテーマで開発メモみたいな形で記事を公開してます。

↓は選手の動きをトラッキングした動画になります。(動画素材は、shutterstockで購入した動画を用いています)

↓はサーブ時のボールの軌道をトラッキングした動画になります。

機械学習(非線形SVM)を用いてサーブの着弾点を予測する、なんてこともやってます。

各記事のリンクは↓です。
・【OpenCVを使ったスポーツ画像解析1】テニス選手の移動量や軌跡をデータ化する
・【OpenCVを使ったスポーツ画像解析2】フェデラー選手の移動軌跡をグラフ化してみました
・【OpenCVを使ったスポーツ画像解析3】選手やテニスボールの移動を自動で検出して移動軌跡をトラッキング
・【OpenCVを使ったスポーツ画像解析4】テニスコートのラインの自動検出
・【OpenCVを使ったスポーツ画像解析5】画像からテニス選手の位置を検出する
・【OpenCVを使ったスポーツ画像解析6】深層学習(ディープラーニング)を用いてテニス選手とボールをトラッキング

ビデオ分析ツール

↑の動画解析ツールは完成にはまだまだ時間がかかりそうです。
手動で動画を分析できるツールが必要だと考え自作のビデオ分析ツールをつくってみました。

スポーツ分析業界では、「スポーツコード」というツールが多く使用されています。
試合の映像で、シーン分割しタグ付けしてあとで検索して確認できるようにしたり、細かいデータを記録して分析できるようなツールです。
多くの機能がある分、価格は高いし、macしか対応していないんですよね。
ということで、自分でビデオ分析ツールをつくってみました。

機能はシンプルで、各ポイント毎にシーン分割できるしスコアを記録できるようにしているのと、サーブの着弾点をマウスでクリックしてXY座標として記録できるようにしています。

自作したテニスのビデオ分析ツールで錦織・デルポトロ戦を分析してみました

↓は錦織とデルポトロが対戦したときのサーブ着弾点で、デルポトロはライン際に打っているのに対して、錦織はばらつきが大きいことがわかります。
Image

プロの試合をみてると、ボールの着弾点をコンピュータグラフィックスでビジュアライズされた映像をみるのですが、自分もその真似ごとをしたくCGを勉強中です。
フリーのBlenderというソフトを使って、テニスコートのCG画像をつくってます。ただ時間がなくて今は中断してます。本業で3DCAD扱ってるからうまくできるかと思ってやり始めましたが、そうでもなく奥深く。詳しい方いたらやり方教えてほしいです。

テニスの試合シミュレータ

試合の勝率を予想するシミュレータをつくりました。2016年のトッププロの試合データ(STATS情報など)+乱数シミュレーションで、選手2人をプログラム上で1000試合対戦させて勝ち数と負け数を計算し、どちらの選手がどのぐらいの確率で勝つかを予想することができます。pythonで作成しました。
例えば、錦織とジョコビッチを2016年のデータで1000回対戦させると、249勝751敗となります。錦織の勝率は24.9%と考えることができます。
・テニスの試合シミュレータをつくり、錦織とジョコビッチを1000回対戦させてみました
・テニスの試合シミュレータで2016年の1430試合の勝率を計算し、実際の戦績と比較してみました
・テニスの試合シミュレータで全米オープンの試合を予想してみました

勝率推移シミュレータ

ポイント毎の勝率推移をプロットし、試合の流れを可視化することにトライしてみました。

Image

テニスの試合の流れを可視化したく、確率シミュレーションを用いて勝率の推移をプロットしてみました【2018ウィンブルドン錦織】

データ収集

スクレイピングなどを使って、テニスの試合情報などを収集してまとめたりしてます。

【Webスクレイピング】錦織圭実況掲示板のデータ記録(サーブコースや速度など)を抽出してまとめてみました

フォーム解析

ディープラーニングを使って人の関節の動きを数値化してフォーム解析に活かせるようにしたいなあ、と思っています。
↓は、サーブ時の関節の動きを姿勢推定というやり方で可視化した動画です。
OpenPoseというライブラリを使ってます。各関節のXY座標も出力することができます。
どう数値化してフォーム解析に活かすか悩み中です。

管理人について

管理人のotakoと申します。
30代後半の1児の父です。
テニスは小さい頃にはじめ、社会人になっても実業団の試合にでたりと、テニス歴は長い方かと思います。
実業団は1部~3部を行き来してました。
子供が生まれてからはプレーする機会が激減してます。
好きな選手は錦織圭で、2008年のデルレイビーチ優勝のときから応援してます。

仕事は、とあるメーカでメカ設計をやってます。ものづくり系エンジニアです。
製品仕様を考えたり、実験したりCADで図面作成したり、ときには工場@中国などに出張したり。
ソフトウェアのエンジニアではないので、コードはネットや本をみて勉強して、スマホアプリや画像解析ツールをつくったりしてます。
コードをサイトで公開したりもしてます。冗長かつ汚いコードもあるかと思いますが、お許しください。

使っている言語やライブラリ・ツールは以下になります。
・データ収集 ruby+anemone、pythonなど
・アプリ開発 java(android)
・データ分析 pythonなど
・画像解析 python+opencv、SSD(Single Shot Detection)
最近は、流行りのディープラーニングにも手をだしています。
自宅マシン としてGPU(gtx1080i)搭載のPCも購入し、Tensorflow、KerasやChainerなどをいじってスポーツ画像解析にうまく応用できないかを試しています。

趣味の範疇を越えませんが、スポーツに関するツール開発は今後も進めていきたいと思っています。
本サイトや、アプリやツール開発などに興味をもっていただいた方は、
datatennisnet@gmail.comに気軽にご連絡いただけると嬉しいです。

あと、twitterやってます。
気軽にフォローしてください。

テニス以外にもスポーツアナリシス関連でもつぶやいたりしているので宜しくお願いします。

Qiitaでもいくつか投稿をしています。
Qiita マイページ(@otakoma)
FFmpegで動画の要らないシーンを削除する~シーン検出とサムネイル画像出力~
OpenCV(Python版)でテニスのボール軌道を検出する
OpenCVを使ってマウスイベント(手動)でテニスコート領域を選択できるようにする
Pythonでテニスの動画解析ツールを自作してみた

テニスの動画データ募集してます

試合や練習を撮影した動画データを募集してます。
↑の開発を進めるためには、データが必要でして。

代わりにデータを分析した形でフィードバックを提供します。
・サーブの着弾点
・選手の移動軌跡やリターン時のポジション
・スタッツデータ
など。
(全部はできないかもですが)

やってみたいかも、という方は、
datatennisnet@gmail.comまで連絡ください。

あらかじめご了承いただきたいこと
・スタッツデータについて
スタッツデータについては、どちらがポイントをとったのか、エラーだったのかエースだったのかを私が動画から予測することになるので、
少し間違いが混在する可能性があることをあらかじめご了承いただきたいです。

・動画データについて
動画ですが、斜め上から撮影した動画が必要となります。
プロの試合なんかは高いアングルから撮影していてコート全体を把握して分析できるのですが、
個人で撮影する場合高いアングルでの撮影が難しく奥側までちゃんと撮影できない場合がございます。
その場合片方の面だけの分析になるかもしれません。(サーブの着地点プロットは片方だけ)

参考ですが、私は↓のような形で、カメラをフェンスに固定して撮影してます。
伸縮棒を連結して、フェンスに上らず下からセットできるようにしています。

公開日:
最終更新日:2018/09/26