高専生が24時間で「格闘技の動画を格闘ゲーム風に自動編集するシステム」を作った話

皆さんこんにちは！鳥羽商船高等専門学校商船の@Ghanaです！
急にめっちゃカッコいい格闘技が演出したくなったので作っちゃいました！

**格闘技の動画を格闘ゲーム風に自動編集**するシステム「DaiRanTou」です！
画面を見ればツッコミどころ満載です。~~システム名とのミスマッチが凄い~~
チームメンバーは4人です。
マネージャー兼プレゼンター1人、プログラマー3人の構成です。
作品、使用技術の紹介と24時間内の開発の厳しさについて語ります。
高専生頑張ってるな！と思っていただければいいね等をいただけると嬉しいです😭

この記事は[データ分析·サイエンス·アナリティクス Advent Calendar 2018](https://qiita.com/advent-calendar/2018/dataanalystics)の17日目の記事です。

#どんな作品？
- **ディープラーニング**を用いてパンチやキックを検知し、自動でエフェクトを付与！
- 打撃を当てると相手の体力ゲージが減少し、体力の多い方が勝者👊
- ノックアウト(KO)と判定されるとその瞬間の攻撃をスローで再生！
- その際、体力ゲージもガクンと減るため、割と面白い見た目に
- 決定的なシーンをスローで再生するため、**大事な場面**を見逃すこともない

KOの瞬間などを含めた動画は、以下にリンクを張っておくのでぜひ御覧ください！
ツイートにRTやいいねしていただけると小踊りながら喜びます（笑）
今回はアウトプットを大事にしているため、とても励みになります！
[KOを含めたデモ動画はこちら](https://twitter.com/837td/status/1074710311926558720)
![test.gif](https://qiita-image-store.s3.amazonaws.com/0/71388/243d63ba-7ee0-c728-829a-4f46f5a8ee1b.gif)

#開発コンセプトは？
「やりたいを追求する」×「自分たちの技術ベースを元に何かを作る」です。
**24時間**という限られた時間では、新技術を取り入れて開発をするより、今持っている技術基盤を元に何かを作る方が良いのではないかという考えです。
今回だと、「最近ハマっている空手をより面白くする」×「ディープラーニング」という感じです。
これは前回のHackDayで新技術をたくさん取り入れたシステムを開発した結果、未知のエラーに遭遇しかなり時間を浪費した経験も影響してます。悲しい。

#なんで24時間？
ヤフー株式会社さんのHackDay2018というハッカソンに参加していたからです。
24時間以内にプロダクトを開発し、90秒でプレゼンテーションを行います。
今回、ありがたいことにデータエクスペリエンス賞を受賞させて頂きました！
もちろん、24時間寝ずに開発を続けてました（笑）
気力と根性で頑張り続けた24時間でした、、、。

この場を借りてお礼申し上げます。
HackDay2018の運営、本当にありがとうございました！
自分たちが楽しく開発していられるのは、ずっと支えてくださったスタッフの皆様のおかげです！

ちなみに、事前のアイデア出しや動画の撮影（今回は空手）はOKらしいです。
一斉によーいドン！でコードを書き始める形となっています。

#使用技術は？
C#、OpenCvSharp、OpenPoseを主に使用しています。
OpenPoseにより取得した体の骨格座標を用いて、パンチやキックの当たり判定を実現しています。
OpenCvSharpにより動画を1フレームずつキャプチャし、当たり判定に応じてエフェクトの付与や体力ゲージの減少を行います。
KOについては、体の胸の位置などを参考にアルゴリズムを組んでいます。
最後に、連番画像から動画を生成します。

WebカメラやiPhoneなどで動画を撮影し、exeファイルを実行すると動画が自動編集されます。
諸事情により現在コードは載せられません、すみません😭
今後にご期待です。本当に申し訳ないです。

![体.png](https://qiita-image-store.s3.amazonaws.com/0/71388/0a40dc50-3460-b1aa-9681-9fd37d217c0a.png)
![パンチ.png](https://qiita-image-store.s3.amazonaws.com/0/71388/e6a51222-5119-049f-4f08-4ac12bd10851.png)
#気をつけたことは？
社員さんや審査員の方々へのシステム説明は特に気をつけました。
せっかくシステムを作り上げたのに、興味を持ってもらえないと悲しいからです。

- 質問に対しては答えから話す
例えば、「開発物について」の質問を頂いた際には
何ができるのか一言で話す→対象者を話す→具体的な内容を話すという話し方をしています。
この開発物が何をできるのかを、まず一言で話すことで相手に概要を伝えることができます。

-  受け答えの最初には「はい」か「いいえ」を付ける
例えば、「このUIを選んだ理由はあるのか」という質問を頂いた際には
はい、理由はあります→具体的な理由を話すという話し方をしました。
いきなり具体的な理由を話すのではなく、理由は「ある」「ない」を先に話すことで、質問者の方が理由が「ある」のか「ない」のか判断しやすいです。
その後の会話もスムーズに進みます。

#24時間開発の感想を教えて！
お昼から開発を初めて、深夜3時くらいまでコードを書いていると死にかけます😲
~~何故か1から6までのランダムな数字の生成に手こずるくらい~~
その時は諦めてお風呂に向かいました😥
お風呂から開発に戻った後、30分くらいは無敵な気持ちなれますがやっぱり死にます。無慈悲だ。
最後は気力との勝負です。体を温めた瞬間眠気が来るため薄着で作業してました。


特に気をつけたことは

- システム開発の落とし所を早めに見つける
- 1時間〜2時間毎に進捗を確認しチーム内の情報共有、タスク共有を積極的に行う
- 開発に集中できる環境を作り上げる

ということです。当たり前っちゃ当たり前ですけどやっぱり基礎は大事だなと再実感。
落とし所を間違えるとほんとに悲惨なことになります。

進捗具合からシステム開発の落とし所を見つけ、タスクに優先順位を付けます。
特に夜中や朝方は思考がどんどん鈍くなってくるので、タスクの優先順位やタイムスケジューリングの大切さが身に染みました😂

そして、大雑把でもいいから動く物を作りこんで、全体像を明らかにしてから細部の処理を作り込むようにしました。
自分は、以下の写真の考えを特に大切にしていました。
結構汎用性が高く、覚えておいて損はないと思います！
特に、短時間開発ではこういう考え方は大事です。
![2f2d67b2.jpg](https://qiita-image-store.s3.amazonaws.com/0/71388/79780ece-5452-8885-6d80-40f202c7b400.jpeg)
[写真リンク　ただしツイートは削除済](https://twitter.com/mn_kuroda/status/415030578459598848/photo/1)
— KURODA (@mn_kuroda) 2013, 12月 23
#まとめ
開発物や短時間開発で気をつけたこと、質問に対する受け答えなどについて書きました。
何かの参考になれば幸いです。
コメントや指摘等をいただけるととても嬉しいです！
ハッカソンやコンテストで何かを作るのも楽しいけど、いろいろなアイデアと出会えるところも良いなと再実感しました！
以上です、長々とありがとうございました！