月別アーカイブ: 2016年5月

透過メガネっぽいアプリ作り

「すけすけゴーグルくん」アプリの記事を見て「あ、これなら私にも作れるかも」って思ったので作り始めた。 画像処理の勉強も兼ねようと思ったので、「実践コンピュータビジョン」(O’REILLY) を見ながら進めた。

作る前の準備

まず、どう作るか考えた。

透過なしの場合の描画内容

ーーーー  ← メガネのフレーム画像
ーーーー  ← カメラで取得した画像

透過する場合の描画内容

ーーーー  ← レンズ部分に透過画像をはめ込んだ画像
ーーーー  ← メガネのフレーム画像
ーーーー  ← カメラで取得した画像

ここまでで、透過前、透過後、そしてメガネの画像が必要そうなのがわかった。
で、必要な素材を「いらすとや」さんで探してきた。

ushi ushi_naked glasses

いらすとや さん、ありがとう!
次に、適当な Web カメラがないのに気づいたので、最寄りのビックカメラで一番安いやつを買ってきた。

cheap_web_camera

なんだろな、ここまで準備がガバガバだと、「本当に思いつきで始めたんだなー」って自分で客観視できて良いです。

作り始めた

私が勉強していく過程でわかったこととかを説明し直すのは面倒なので、作業途中のスクリーンショットだけ貼っていきます。

ushi_sift_matching
同じ画像で SIFT 特徴量を用いたマッチングをしたはずなのに、対応位置がずれてショックを受けたときのスクリーンショット。

ushi_sift_matched_fixed
ふて寝した後で見なおしたら、あっさり修正できたときのスクリーンショット

ushi_match_matched
ホモグラフィーとか RANSAC を使って、モニタをカメラで撮った画像に対して検出できた画像の枠を青色で描画してみたときのスクリーンショット。 それなりに動作してちょっと嬉しかった。

transparent_niku
最後に、眼鏡内に透過後の画像をはめ込むようにして、実際に動作させたときのスクリーンショット。 縮小してない画像に SIFT を適用して処理が激遅だったり、アフィン変換が RGB 画像だと失敗する理由がわからなくて、透過画像が白黒になったりしている。

とりあえず、動作したことにした!

まとめ

  • 実践コンピュータビジョンの内容に沿って進めたら、それなりに動作して嬉しかった。
  • ちゃんと動くものを作るなら、何かの AR ライブラリを利用して作るのが簡単だと思う。
  • 和牛の垂れ幕が透けても、あまり嬉しくないのがわかった。

今回の記事のソースコードとかは、以下にあります。
https://bitbucket.org/satofumi/transparent_glasses

「勝ったら実力、負けたら運」についての考察

ゲームで負けると悔しい。  何度やっても負け続けると、そのゲームではもう遊ばなくなってしまうだろう。 長く楽しめる要件として「負けたときの理由を自分以外に転嫁できる」は大事な要素だと思う。

多対多のゲーム(MOBA)の場合

そういう見方をしたときに、多対多の MOBA は「勝ったら実力、負けたら味方のせい」が成り立ちやすいと思う。 Heroes of the Storm を例に上げると Warrior x 1, Assassin x 3, Support x 1 という構成だったときに、

「Warrior が 仕事してなかった」
「Assassin が突撃して死にすぎた」「Support の回復が悪かった」
「集団戦で 1人だけ集まるのが遅くて 4 vs 5 で負けた」
「私が揃う前に集団戦を始めて 4 vs 5 で負けた」

など、各々の立場で他人への批判ができる。 1 人で敵5人の集団に突撃するようなクソ Assassin にさえ「味方がついてこないのが悪い」という言い訳が可能になる。

その批判が適切なことも当然あるし、20 分くらいのゲームにおいては各人が少しずつ批判されうるプレイングになるのも確かだ。

1対1のゲームの場合

負けたときの理由は「相手が強かった」「自分が弱かった」というのが実際のところで、言い訳としては「ユニット、戦略の相性が悪かった」などになる。

負けたときにリプレイを見て「よし、ここが悪かったから次はこうしよう」と切磋琢磨できる人や、相手を出し抜いて勝ったときの楽しさが忘れられない人が遊んでいるように思う。

1人でやるゲームの場合

ソシャゲに多いパズルゲームなんかを想定して書く。 こういうゲームは基本的にはプレイヤーが勝てるように、あるいは敗北がない設計になっているように思う。 それは、負けたときの言い訳が「自分が下手だった」「必要なアイテム、ユニットを持っていないのに挑戦した」くらいしかできないからだ。

実際には、プレイヤーが勝てるステージを何度もプレイできるようになっており、プレイするうちにユニットのレベルが上がって次のステージがクリアできるようになる、という設計で、ゲームの寿命を伸ばしているように思う。

ただ、何度も同じステージをプレイしていると飽きてしまうので、そのあたりの調整はすごく大変だと思う。

まとめ

負けたときに「下手だから負けた」以外の言い訳ができると、ゲームとしての寿命は長くできると思う。 作りたいゲームを考えるときには、こういうのを意識していこうと思った。

負けたときに他人のせいにしてしまうのは、「自分が他人に親切にしたことは覚えてるけど、親切にされたことは忘れがち」という心理も絡んでいるのかもしれない。

 

HTC Vive を注文したので、いろいろ準備することにした

知人宅で HTC Vive を体験させてもらって

「これは良いものだ!」

って思ったので、HTC Vive を注文した。
だが、PC に必要なスペックすら調べずに購入したので、調べたりしたことを書いていこうと思う。

調査前になんとなく理解していることは

  • 部屋を片付ける必要がある。
  • 5年前の PC ではなく、割とよさ気な PC を用意する必要がある。
  • 次世代の VR が発表されたら、それも買えばよい。

ということくらい。

HTC Vive の公式ページを見てみよう

見てみた。
トップページは英語だったけど、FAQ ページは日本語で表示された。

  • GPU:NVIDIA® GeForce® GTX 970 または AMD Radeon™ R9 290以上
  • CPU:Intel® Core™ i5-4590 または AMD FX™ 8350以上
  • RAM:4 GB以上
  • 映像出力:HDMI 1.4 または DisplayPort 1.2以上
  • USBポート:USB 2.0以上 1ポート
  • オペレーティングシステム:Windows® 7 SP1, Windows® 8.1以降、Windows® 10

(上記は http://www.htcvive.com/jp/support/faqs/GUID-ABA623FC-B51F-43F7-B2B5-D4C83A37C992.html より抜粋)

とりあえず、GPU と CPU は良い物を使え、という風に理解した。 それ以外は今どき USB 2.0 未満な環境は少ないだろうし、特に気にしないでよさそうだ。

次は、この要件を満たしたモデルの PC を買うか、今の PC の CPU, GPU を更新するかを決めないといけない。

使いたい GPU, CPU を決めて値段をまた調べたら続きを書こうと思う。

承認欲求を満たしながら開発するために

ソフトウェア開発のプロジェクトを進める上で、仕様やコードのレビューを行い、不明な点を相談して決めたりする。 そうやって、曖昧だったタスクを明確な個別タスクに落としこんでいくと最終的には個人でやるタスクになる。  個別タスクを達成したときに、

「できたー!」
「できたか! よし、宴じゃ! 宴の準備じゃ!」

ってなる職場なら承認欲求も満たされ、気分を切り替えて次の個別タスクの開発に取り組めるかもしれないが、実際は違う。 現実の開発では個別タスクを達成しても、集中している周囲の人間の邪魔にならないように軽く休憩したりするくらいだろう。

ソフトウェア開発は、コーディングの段階になると集中して開発する必要があるため、孤独で静かな作業になる。 集中した時間それ自体は、達成感と心地よい疲労感を得られる。 ただ、本来は課題を達成した直後に「やったね」「おめでとう」「やればできると思っていたよ」などの賛辞があるべきだ。 現代人は、もっと承認欲求を満たされなければならないと思う。

そして、現代人の承認欲求を満たすために開発されたのが「クエリちゃんのタスク管理」だ。

query_first_message

解説しよう。 これは、普通のタスク管理システムに見えるかもしれないけど、登録したタスクを完了するとクエリちゃんが褒めてくれる凄いシステムだ!

開発を終えてタスクを終了のボタンを押す、その緊張が弛緩するタイミングで「やったのデス!」とか「すごいのデス!」と褒められると、

「あぁ〜〜、これが承認欲求が満たされるというやつか〜」

ってなる。 このシステムを使ってると、自分の承認欲求が満たされるのは当然として、他人を褒めることの大切さも理解できます。  つまり、自他共栄の雰囲気を自然に広めることができるのです!

まぁ、冗談はここまでにして言いたかったことをまとめると

  • 褒められるのは、いいぞ!
  • もっと他人を褒めよう。
  • クエリちゃん、ありがとう。

ってなる。
これからも、少しずつでもいいから自分の環境を改善していきます。

クエリちゃんのタスク管理
http://hyakuren-soft.sakura.ne.jp/query_manager/