ダーツが命中するかどうか、刺さる直前に教えてくれる装置を作った

ダーツが狙ったところに刺さるかどうか、投げた直後、つまり刺さる直前にお知らせすることで、0.2秒待てば分かることを0.2秒前に知って一喜一憂するためのアプリを作りました。

# 何を作ったか

まず、的に向かってダーツを投げましょう。その様子をカメラで撮影し、その映像をもとにPCで姿勢推定を行います。推定された姿勢をもとに、ルールベースでダーツを投げたことをPCで検知します。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/b599b37a-05cb-1424-5778-b8b8d864eb8b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/b599b37a-05cb-1424-5778-b8b8d864eb8b.png)

投てきを検知したら、1秒分のデータをさかのぼって機械学習モデルに入力し、ダーツがブル（中心）に刺さるのかどうか予測します。その際、Edge TPUという高速で機械学習の予測を行うデバイスを利用します。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/522ff676-c4fd-730d-f4a9-9493b9980215.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/522ff676-c4fd-730d-f4a9-9493b9980215.png)

機械学習の判定の結果、ブルに刺さると思ったら「ピンポーン」外れると予測されたら「ブブー」と音がなって知らせてくれます。**この時点でまだダーツは刺さっていません。**

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/803341d3-ef05-0ae3-df1c-e3598882cffe.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/803341d3-ef05-0ae3-df1c-e3598882cffe.png)

もし、外れると予測されたら悲しいですよね。まだダーツは刺さっていませんが、気分も落ち込むことでしょう。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/e6278a15-0d90-e927-02e0-f462303083f5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/e6278a15-0d90-e927-02e0-f462303083f5.png)

しかし、人間、AIには負けたくないものです。人間はAIよりも優れていると信じてやみません。「AIなんかに自分の未来を予測されてなるものか！」と運命に抗いはじめました。**この時点でまだダーツは刺さっていません**

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/8f34bc3c-9d55-865b-8523-2b520eeab238.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/8f34bc3c-9d55-865b-8523-2b520eeab238.png)

直後、本当にダーツがハズれたところに刺さった場合、少し期待した自分を思うと余計落ち込みます。

![https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/a9a05c6e-65d9-9117-5222-f1729d1bde8d.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/a9a05c6e-65d9-9117-5222-f1729d1bde8d.png)

というプロダクトです。ご覧の通り、

**0.2秒待てばわかることを0.2秒前に知って一喜一憂するためのアプリとなっています**

# 技術について

## ハードウェア

### WEBカメラ

logicoolの普通のWebカメラ

- 1030p
- 30 fps
- USB 2.0

### Coral's Edge TPU

> Edge TPU は、Google が開発した TensorFlow Lite 形式の機械学習モデルを高速に演算（推論）するための ASIC のことです。

[GCP と Edge TPU でつくるインテリジェント IoT 基盤](https://medium.com/google-cloud-jp/making-an-intelligent-iot-system-with-gcp-and-edge-tpu-178275458006)

とにかく、めっちゃ早く機械学習の予測ができる

詳しくは上記記事をお読みになってください。

### PC

Macbook Pro 2017

## ソフトウェア

### 姿勢推定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/b6861b36-c1a1-f5ce-c56b-5a2f5f683d4e.png)
https://ledge.ai/openpose/

[PoseNet](https://github.com/tensorflow/tfjs-models/tree/master/posenet)を利用
- 画像や動画をインプットとして人間䛾姿勢
をデータ化する
- AIが画像を読み取り、関節䛾位置を推定
する
- オープンソース䛾ライブラリが公開されて
おり、商用利用も可能

### 機械学習

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/135663/6d3be18a-d7a9-1ce6-dfc5-0cd7cd2fa5de.png)


- 説明変数（インプットデータ）
    - 手首、肘、肩の各座標
        - 最大値、最小値、平均、標
        準偏差（テキトーです）
- 目的変数（予測するもの）
    - ブルに刺さるかどうか
- データ量**（めっちゃ少ない）**
    - ブル（命中）：約40
    - ハズレ：約200
- 手法
    - ランダムフォレスト

# 結果
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ダーツBULL命中予測マシン<br>うまく予測できたバージョン<a href="https://t.co/UiWeXHwJq0">https://t.co/UiWeXHwJq0</a></p>&mdash; fujitako (@fujitako03) <a href="https://twitter.com/fujitako03/status/1204042554661957633?ref_src=twsrc%5Etfw">December 9, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">ダーツBULL命中予測マシン<br>ダメダメバージョン<a href="https://t.co/DMq2wkJ4nf">https://t.co/DMq2wkJ4nf</a></p>&mdash; fujitako (@fujitako03) <a href="https://twitter.com/fujitako03/status/1204042694562942976?ref_src=twsrc%5Etfw">December 9, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


## ①驚きの予測精度！

全然当たりません。正解率約50%（ランダムと同じ）

## ②驚きの予測速度！

刺さる前に間に合いません。刺さったあとに刺さるかどうかの予測を教えてくれます。知ってるわ！ってなります。
ごめんなさいタイトル詐欺です。本当はタイトルのものを作りたかったんです。ごめんなさい。

要するに

**ダーツを投げたあとにランダムに音が鳴るおもちゃが爆誕しました！**

# 反省

- **カメラの性能不足**
    - カメラのFPS（１秒間に何フレーム撮影するか）が30では足りなかった
        - もっとスローモーション撮影などに対応したカメラが必要
    - カメラからPCにデータを送るケーブルがUSB2.0ではなく3.0を使うべき
        - その後の処理が早くても、データが届かないと何もできない
- **ブルに刺さったデータ不足**
    - 筆者の実力不足

# 今後

変な機械を作っている暇があったらダーツの練習に当てていこうと思います

この内容は [Sports Analytics Meetup](https://spoana.connpass.com/)というイベントで発表したものです。他の皆さんはこの発表と違って非常にためになる発表をされており、とても勉強になるMeetupです。

[弊社アドベントカレンダー](https://qiita.com/advent-calendar/2019/brainpad)でも、25日に今年のM-1分析を発表するので、是非見てください！