読者です 読者をやめる 読者になる 読者になる

高専プロコン26に参加してきた話

f:id:meokz:20160915190428j:plain

高専プロコン26に自由部門で参加してきました。
結果は敢闘賞と微妙な感じでしたが、開発の過程を記事に残しておきます。


作ったもの

今回、出展した作品は 「Pianist―鍵盤楽器運指練習システム―」です。
20019
OculusRiftにPSEyeを2つ取り付けステレオカメラ化した上で、現実の映像にARで運指アニメーションや運指番号付き楽譜を表示します。さらに、LeapMotionを用いてユーザの運指を取得し、間違った運指を指摘したり、運指をクラウド経由で共有化して練習を促進してくれるというものです。また、MIDIファイルから運指を生成する機能もあるので、運指番号が振られていない曲でも楽曲データさえあれば運指付きの楽譜を生成してくれます。

技術的なこと

今回の技術的なポイントは3つあります。
まずは、OculusRiftのステレオカメラ化。これは本来Ovrvisionを使用する予定でしたが、2015年7月段階でなんと出荷をしていませんでした。これは時期バージョンの開発に入っていて、旧バーションの製造はしていないとのこと。仕方がないのでネットで検索をかけ、凹みさんの記事を発見。どうやらPlaystationEyeを2つ並べて同様なことができるライブラリを配布しているとのことだったのでこちらを使用することにしました。
開発中、開発メンバーとバージョンを合わせるためUnityのバージョンを4.5から5.xに引き上げたところ、PSEyeがうまく動かなくなるバグが発生。ライブラリの製作者さんと連絡を取りながら、なんとかこの現象を解決することができました。あとは、Unityで画面遷移をした際でも、うまくカメラの映像を取得しARの処理を続けれるように工夫しています。

次のポイントがLeapMotionによる運指取得。企画当初はLeap使えば余裕と考えていたのですが、いざ使ってみると精度はボロボロ。本来LeapMotionは手を空中に浮かべて使うもので、背後に物体があると深度の差が取れず認識してくれないのです。これについては、後輩がかなり頑張ってくれました。まずは、鍵盤楽器にベロア素材を貼ることでLeapの誤差を最小限に抑え、プログラム側で座標のキャリブレーション処理を行います。ベロア素材を貼るのが非常に重要で、様々な素材を試しましたがこれが一番赤外線カメラでの深度認識誤差を小さくしてくれました。予選前から本選前日まで、後輩が予想以上によくやってくれてデモンストレーションができるレベルになりました。

3つ目が隠れマルコフモデルを用いた運指生成。これも違う後輩の担当です。自分は良く把握してません。 論文を元にしていますが、この類の論文をプロダクトに起こしたのはこれが初めてじゃないのかなと。最初は不安になる精度でしたが、こちらも後輩が頑張ってくれて自信を持ってプレゼンできるレベルになりました。

開発について

今回の開発は8人のメンバーで行いました。
構成はこの通り
・プロジェクトマネジメント, 結合, Oculusのステレオカメラ化(自分)
・UIデザイン, マニュアル, パンフレット制作(4年)
・ドキュメント制作など(4年)
・UI実装(3年)
・LeapMotion部分(3年)
・楽譜表示(3年)
・運指生成、運指アニメーション(3年)
・サーバ、通信部分開発(2年)
4年3人, 3年4人, 2年1人です。
今回の開発では、あえてGitを使わない方針でいきました。というのも、僕と@dream_exp以外、集団開発の経験がない人ばかりだったからです。Gitの恩恵よりもGitの学習コストの方が重いと判断しました。
開発ツールはUnityを使用。言語はC#。ただし、運指生成はJavaで書いたものをC#から呼び出しています。

本選を終えて

技術的にはかなり高いことをやっていて自信はありました。はなから企業賞を捨て、審査員に評価をもらえるようにとやっていました。
ただ、受賞したチームを見ていると「幅広い需要があり、実用性のあるもの」が評価されていたように感じました。技術的な凄さは求められていないのかなぁ、と。今回の趣旨として、鍵盤楽器の中でも運指の生成という限られた部分に焦点を絞ること、今までに使われていない技術を使っていくことを上げいていたので真反対を行く結果になりました。

来年は編入試験もあり、今回で最後のプロコンにしようと考えていましたが、閉会式の中で次は何をしようとか何だったら評価されるかとか考えてる自分がいたり。少し休んで、落ち着いたらまた来年のことを考えていこうと思います。

後輩へ

今回の開発では、後輩が本当によく頑張ってくれました。僕の本当の目的は後輩に本選の空気を味わってもらうことだったので、予選通過した段階でそれは果たせていたのですが、欲を言うなら何かの賞をとって自信を付けさせてあげたかったです。開発期間中もメンバーで花火したりご飯食べに行ったり、本選中もホテルでわいわい開発できて、逆に僕が楽しんでしまいました。
今回の開発でプロコンが嫌になったか、あるいは来年に向けて意欲が出たのか、感じ方は様々でしょうが、振り返ってみて良い経験になったなと思ってもらえたら嬉しいです。