OpenCVでとりあえず顔認識のサンプルが動くところまでの記録
2013 年 3 月 4 日 月曜日 by 山平最近流行(?)のOpenCVによる画像認識をやってみようとしたのですが、思いのほか苦労が多かったので、サンプルデータで顔認識の動作を確認できたところまでの記録を残しておきます。
最近流行(?)のOpenCVによる画像認識をやってみようとしたのですが、思いのほか苦労が多かったので、サンプルデータで顔認識の動作を確認できたところまでの記録を残しておきます。
オープンソースのOCRライブラリ、Tesseractの精度向上のために学習させてみようと思ったのですが、日本語の情報がほとんどありません。
仕方がないので翻訳していたのですが、かなり早い段階で挫折してしまいました。
少ないとはいえ、せっかく訳したので何かの役に立てばと思い公開しておきます。
Javascript製ゲームエンジンenchant.jsについて、過去にいくつかの記事を書きました。
ここでは触れていないのですが、enchant.jsではiPhone(MobileSafali)ではサウンドの再生に制限があります。
wise9 › enchant.jsのサウンド機能で、ゲームをさらにカッコよく!
特に、iOS上のブラウザ (Mobile Safari) については、「プレイヤーが画面にタップしたとき以外、音声が再生できない!」という大きな制限があるため、暫定的に、デフォルトでは以下のようなコードを実行しフラグを立てない限り再生されないという仕様になっています。・・・が、いまのところバグがあるらしくiOSで正しく再生されません!目下修正中です!
と、いうことで今回はiPhoneでのサウンド再生について調べてみました。
以下のサイトの情報を参考にしています。
D-lagoon ブログ [enchant.js]iPhoneで音を鳴らすのに一苦労 | D-lagoon ブログ
検証のために以下のようなコードを作成しました。
enchant(); enchant.Sound.enabledInMobileSafari = true;//必須 IMAGE_FILE = "chara1.png"; SOUND_FILE = "gameover.wav"; InitBear = function(no){ var game = enchant.Game.instance; var bear = new Sprite(32, 32); bear.image = game.assets[IMAGE_FILE]; bear.x = (game.width - bear.width) * (no/5); bear.y = (game.height - bear.height) * (no/5); bear.frame = no * 5; return bear }; window.onload = function(){ var game = new Game(320, 320); game.fps = 15; game.preload(IMAGE_FILE, SOUND_FILE); game.onload = function(){ var no = 1; // 1: 通常、これで再生できる var bear1 = InitBear(no++); bear1.addEventListener("touchstart", function(){ game.assets[SOUND_FILE].clone().play(); }); game.rootScene.addChild(bear1); // 2: 参考サイト(D-lagoon ブログ)での回避策 var bear2 = InitBear(no++); bear2.addEventListener("touchstart", function(){ game.load(SOUND_FILE, function(){ game.assets[SOUND_FILE].play(); }); }); game.rootScene.addChild(bear2); // 3: 上からloadを省略してみる var bear3 = InitBear(no++); bear3.addEventListener("touchstart", function(){ game.assets[SOUND_FILE].clone().play(); }); game.rootScene.addChild(bear3); // 4: イベントだけ拾って保持 var bear4 = InitBear(no++); bear4.flag = false; bear4.addEventListener("touchstart", function(){ if(this.flag) game.assets[SOUND_FILE].clone().play(); this.flag = false; }); bear4.addEventListener("enterframe", function(){ this.flag = true; }); game.rootScene.addChild(bear4); }; game.start(); };
結果は予想通り、2と3でサウンドの再生を確認できました。
しかし、再生までに数秒かかるので、実用的とは言えませんが、Mobile Safaliではこれが限界なようです。
【後日談】
数日後、ふと同じ検証を行なってみました。
するとなぜか1,2,3,4すべてのパターンでサウンドが再生されました。
ソースは触っていないのに何故???
ですが、やっぱり再生までに数秒かかるので、実用的とは言えません。
以上です。
ゲームに欠かせない処理に当たり判定があります。
当たり判定は大きく分けて「プレイヤーキャラクタと敵キャラクタ(動くもの同士)の当たり判定」と「キャラクタと壁(動くものと動かないもの)の当たり判定」の2通りあります。
当たっているかどうかを調べると言う意味ではどちらも同じなのですが、当たった後の処理に違いがあります。
キャラクタ同士の場合、何と何が当たったかで処理が変わるため、処理(仕様)を決めておく必要があります。
キャラクタと壁の場合、当たった後の処理で座標を修正するのはキャラクタなのであまり難しく考える必要がありません。
前編ではキャラクタ同士の当たり判定について考えてみます。
数回に渡ってenchant.jsとゲームについて、周辺の話を進めてきましたので、そろそろ本題に入ります。
enchant.jsにサンプルとして同梱されているアクションゲームのソースを眺めながら、少し手を入れてみます。
ゲーム作りに欠かせないのが画像です。
自分で作るのは大変な労力がかかりますが、世の中には高品質な素材がたくさん提供されています。
ライセンスに注意して有効に活用したいものです。
ほとんどの素材はそれぞれの用途を想定した形で配布されていますが、必ずしも自分の思った通りに配布されているものでもありません。
今回はGIMPを使ってそんな素材のうちドット絵を自分の用途に合わせて加工する方法を紹介します。
※使用と加工の際には配布元のライセンスにご注意ください!
※サンプル画像としてenchant.jsに同梱されているものを利用しています。
普段はJavaをメインに使っていながら、最近はHTML5/JS/Android/iOSなどクライアントサイドの技術が賑わっていることもあって、サーバーサイドの技術、特にWebフレームワークには目を向けていなかったんですが、Java/Scalaエンジニア界隈では、 “Play Framework” が最近注目されているらしいです。
http://www.playframework.org/
JavaによるWebアプリケーション開発を容易にすることを目的とした、
Ruby on RailsライクのOSSフレームワークです。
概要や特徴などは公式サイトで分かりやすく説明されているので、そちらを参照してください。今回紹介する環境構築手順や開発フローが見られる10分程度のムービーもあります。
公式ではありませんが、翻訳サイトもあります。
http://playdocja.appspot.com/
早速、ローカル環境(WindowsXP)に開発環境を構築してみます。
なお、Java5以降がインストールされている前提です。
1.最新バージョン(v1.2.4)をダウンロードします。
http://www.playframework.org/download
ファイル:play-1.2.4.zip
2.ダウンロードしたファイルを任意のフォルダに展開します。
今回は以下のディレクトリに展開
D:\work\play-1.2.4
3.コマンドプロンプトを起動して、新規アプリケーション作成用のコマンドを実行します。
# cd D:\work\play-1.2.4
# play new myapp
途中でアプリケーション名を聞かれるので適当に入力します。
4.アプリケーションの起動コマンドを実行します。
# play run myapp
5.ブラウザを開いて、URLを入力します。
http://localhost:9000/
基本的な環境構築は以上です。
Tomcatなどのアプリケーションサーバ上で動作させることもできますが、スタンドアロンで動作するので、すぐにアプリケーションの開発に取り掛かれます。
テキストエディタをはじめ、Eclipseなどお好みのIDEで開発できるのもGoodです。
環境構築だけでなく、アプリケーションの開発においても、効率的に開発できる機能がたくさん含まれているので、順次試していきたいと思います。
オープンソースのグループウェア『aipo』について紹介したいと思います。
aipoは無料提供されているオープンソースのグループウェアです。
windows版とLinux版、クラウド版があり、windows版とLinux版は
ダウンロードしインストールすると、すぐに試してみることができます。
公式サイト:http://www.aipo.com/
ダウンロード: http://free.aipo.com/download/
インストール媒体にはTomcatやPostgreSQLなどの環境が含まれ、
サンプルユーザ、サンプルデータが登録されているので、すぐに使うことができます。
スケジュールやToDo、アカウント管理など、基本的な機能はしっかり実装され、
十分実運用に耐えられるのではないかと思います。