機械学習とかについてのメモこの広告は、90日以上更新していないブログに表示しています。2019-01-02Vuforia知見共有会(社内)で発表しましたあけましておめでとうございます。去年の話になりますが、2018年12月28日、社内でのVuforia知見共有会にて、発表をしました。(あくまでも知見の共有のため、Vuforiaとは何か、ExtendTrackingとは何か、について省いておきます。以下がその時のスライドになります。活発に議論をしていました。(研究室のゼミのような雰囲気でしたw)スライドにあること以外でも、例えば、以下のようなことについて議論しました。1マーカーにQRをなぜ使うのか2マーカーを拡大して印刷した場合、どこの値を変更すればよいか3マーカー設定の際のwidth入力について(ARコンテンツを作成する際の手順を踏まえながら)1マーカーにQRをなぜ使うのか本来、マーカーに用いる画像の選定などはVuforia公式のガイドラインに沿うのが良いと思います。QRコードをしばしば用いたりする理由としては、お客様からの指定があった(情報技術感が出ているから等)白黒なので、環境光による色の変化の影響を受けにくいといった理由が挙げられました。ロゴなどの画像を用いる場合、よりコンテンツとして現実を意識したものになるため、QRコードが必ずしもコンテンツにとって最適解というわけではありません。作業を進めるなか、マーカーを大きめにして印刷した場合どうなるか?といった検証を行いたいことがあるようです(Unity内)。BehaviorのAdvancedオプションの値を変更すればよい。これはあくまでサッと検証したい場合での応急措置であり、製作する場合はきちんとマーカーの設定からやり直したほうがよいという結論に至りました。3マーカー設定の際のwidth入力について使いたいマーカーの画像サイズは、縦横比が1:1になっていない場合があります。この場合、VuforiaサイトのTargetManagerにて画像サイズを登録する場合、widthには何の値を入力すれば良いか、ということが議論になりました。回答としては、縦長であろうと横長であろうと、登録する画像の横幅を入力すれば良い。ARコンテンツを作成する際の手順を踏まえながら考えるのがより良いと考えます。いうのは、コンテンツを作成する際、ユーザーはどこから入ってきて、どのようにマーカーを見て、どのようにオブジェクトやエフェクトを表示するか、という演出を事前に考えるはずです。「登録する画像の横幅」というのは、ユーザーがマーカーを見るときの向きを考慮したうえで、画像をを作成・登録し、その画像を印刷した時の横幅を入力するのが良いのではないかと考えます。まとめVuforiaをUnityで使用する際、いくつかの手順を踏んでコンテンツを作ることになります。今回、社内での知見共有会にて議論した結果、新たに気をつけなくてはいけないポイントや、人によって手順や考えが異なる点(小さい違いではあるものの)などがあることが分かりました。いった点を社内で共有することで、同じ技術を同じ期待値で製作することができるのではないか、とも考えられます。今後も、Vuforiaだけでなく、他の技術についても共有していきたいです。akihiroさん(@akihiro01051)のwindowsML画像認識デモを動かすはじめにakihiroさん(@akihiro01051)のHololens上でのwindowsML画像認識デモをRS5で動かす時のメモです。MLの名前空間は以下のようにPreviewが除かれました。Windows.AI.MachineLearningそして、コード面でもいくつか変更点があったようです。17720事前準備まず、以下のリンクのリポジトリからWindows-Machine-LearningのサンプルをCloneします。Labels.jsonの二つのファイルを確保しておいてください。次に、本記事冒頭で述べたakihiroさんのプロジェクトをCloneします。以下に置いてください。(Labels.jsonは上書きで構いません。元のSqueezeNet.onnxは削除して大丈夫です。using参照を変更します。28行目ファイル名を変更します。Previewを外します。この辺がsessionに統一され、使いやすくなった感じはあります。model.onnx・98行目Previewを外します。sessionに統一され、コードもすっきり書くことができます。結果としては以下のような動画になります。ノートPCを写している時はノートPCとして認識されているのがわかるかと思います。最後にブルームしたときのUIは、RS5ならではのUIです。youtu.beまた、猫の画像はこちらを使用させていただきました。akihiroさん(@akihiro01051)のwindowsML画像認識デモを動かすTweet広告を非表示にするもっと読むコメントを書く2018-08-08Hololensのカメラ画像をOpenCVforUnityで加工して透過表示するメモはじめにOpenCVforUnityのサンプルを利用します。(ライセンス関係に抵触する可能性があるため、ソースコードを用いた説明は省きます。)(また、ある程度OpenCVを知っていることを前提とします。)具体的には、Hololensのカメラ画像をOpenCVforUnityで加工して透過表示するサンプルとして、OpenCVforUnityのHoloLensComicFilterExample.csを編集していきます。以下の動画をご覧ください。視線のある一定範囲に漫画の線が重なるような表示が透過されているのが確認できます。このように、Hololensのカメラ映像をOpenCVforUnityで加工して、透過表示することができます。次に、HoloLensComicFilterExample.csを編集し、カメラ画像の特徴量を表示するように変更します。以下の動画をご覧ください。HoloLensコミックフィルターをかける代わりに、ORB特徴量として複数の小さい円が表示されているのが確認できます。(右の画像は、静止画でORB特徴を算出した例です。)これは、HoloLensComicFilterExample.csのOnFrameMatAcquired関数を変更しています。OnFrameMatAcquired関数での流れメモ流れを説明する前に、ちょっとポイントがあります。これらのサンプルでは、実際のカメラの範囲より少し狭めになるよう、表示する画像を変換しています。(変換部分をわかりやすくするため、処理を軽くするため等が考えられます。狭めの表示領域となるdstMatClippingROIがあります。確認が取れていないので、推測になりますが....dstMatClippingROIは、その表示領域部分のみdstMatのメモリを参照しています。(のはず)つまり、dstMatClippingROIのみ加工し、dstMatごと、テクスチャに貼るMatへコピーするという流れになります。(ちょっと自信ない)そして、以下がOnFrameMatAcquired関数での流れとなります。(この時にしたい処理をする。UWPはじめにUWPには、アプリをBackgroundで実行するためのバックグラウンドタスクが用意されています。以下の動画をご覧ください。Modeを呼んでいる様子です。(ソースコードはMicrosoftのWindows-universal-samplesを利用しています。UWP(C#)版を利用しています。)www.youtube.comバックグラウンドタスクの二種類のプロセスさて、ここでバックグラウンドタスクにおける二種類のプロセスがあるそうです。この二つのプロセスについて、まとめてみました。プロセスが同じプロセスで実行されるプロセス。Sampleはこちらのプロセスを利用しています。タスクでは、プロセス間通信が不要のため、記述内容は複雑になりません。各トリガーがサポートされていません。タスクのアクティブ化がサポートされていません。つの新しいイベントを使用できます。イベントは、アプリがバックグラウンドで実行されている間に処理されるコードを実行します。イベントは、アプリがフォアグラウンドに移動したことを知るために処理します。(シンプルに実装できる。アウトプロセス[利点]アウトプロセスタスクでのコードがクラッシュしても、フォアグラウンドでのコードはクラッシュしません。各トリガーを使用できます。インターフェイスを実装するクラスを作ると、コードをバックグラウンドで実行できます。使って特定のイベントをトリガーすると実行されます。マニフェストで宣言します(工程が多く複雑(?)。Networkをbackgroundで実行、サーバー側にセンサ情報を投げ続ける。この場合、アウトプロセスを利用する必要があると考えます。まとめアプリをBackgroundで実行する様子と、そのために用意されたバックグラウンドタスクにおける二つのプロセスについてまとめました。今回は公式ドキュメントの中で用意された二つのプロセスについて着目しましたが、実装面には触れていません。Backgroundで何を処理させたいかで、どちらのプロセスを選択すべきかが変わる、といったところでしょうか。今後は、Hololensのカメラセンサ等をBackgroundで処理していこうと思います。2017でプログラミングできるようにしていきます。packageを作成しており、導入を楽にしていただいています。パッケージのダウンロードまずはじめに、パッケージをインストールしましょう。http://unanancyowen.com/pcl181/にアクセスします。次に、以下の図1の中の自分の環境に合わせたものをダウンロードします。パッケージのインストールと設定ダウンロードしたら、exeファイルを起動してインストールしていきます。今回、PATHは自動で追加しないようにします。(最近のブログを見ると、追加しても大丈夫になってるっぽい。他は、defaultのままで大丈夫です。次に、環境変数を設定していきます。大雑把に説明すると、「PCLの実行ファイルはここにあるよ!」ということをPCに教えてあげます。「winsowsキー(窓が書いてあるキー)+R」で「sysdm.cpl」をファイル名を指定して実行し、システムのプロパティを呼びます。詳細設定タブ->環境変数をクリックすると、図2のような画面が現れるはずです。図2:環境変数設定の呼び出しシステム環境変数において、「PCL_ROOT」「OPENNI2_REDIST64」があることを確認してください。(なければ、図2と同様に上記二つの変数と値を入力してください。)次に、pathを設定します。pathの列をクリックし、編集ボタンをクリックすると、図3のような画面が現れます。図3の下部5行を追加してください。CMakeのインストールPCLはCmake(https://cmake.org/)でのプロジェクト生成を推奨されています。そこで、CMakeをインストールします。公式ページのdownloadから環境に合わせたwindowsインストーラーパッケージをダウンロードし、インストールします。-version」と打ち、以下の図4にようになればOKです。ここで、一度PCを再起動させてください。PCL」の項があります。ZIPをクリックし、解凍し、フォルダ名を分かりやすいように変更しましょう。今回は、図5のように、フォルダ名を「sampleProject」に変更しています。次に、CMakeを起動し、上部二つのダイアログボックスに先ほどのsampleProjectのパスを指定します。compliersを選択、Finishボタンをクリック。Project」でプロジェクトを開きましょう。以下の図6のようなプロジェクトが開かれていると思います。F5キー」を押すと、main.cppが実行されます。studioでのプロジェクト画面main.cppの実行を確認したあとは、PCLのサンプルを実行してみましょう。F5キー」で実行してみてください。0;}マウスのホイールを引き、左クリックを押したまま移動で、原点を中心に回転できたりします。すると、以下の図7のような画面が出てくると思います。これが出てきたら、PCLのセッティングは一旦完了となります。2017の環境にて、PCLのセットアップを行いました。今後は、さまざまな点群処理の実装を行っていこうかと思います。全天球カメラはじめにRGBカメラセンサといえば視野の範囲内の映像を平面上に表示するのが一般的でした。平面ではなく立体的に展開された映像を体験することが容易となっています。立体的に展開された映像を撮影するために、様々なデバイスが提案されています。Cameraについて着目します。上下左右360度全ての方向を撮影することができるカメラです。1920、56Mbps)、30fpsの動画を撮影することができます。soloと同時に発表されたデバイスです。全面に1300万画素のカラーカメラが二つ付いており、こちらは前方を基準に上下左右180度の映像を撮影できます。Vと同様に4K画質、30fpsの動画を撮影することができます。図1にカメラ性能などの比較した図を載せます。これらは各公式サイトから引用しています。Cameraも、どちらも4K画質で動画を取得することができます。前者は360°、後者は180°の映像出力に最適化されているため、当然見え方が変わってくるはずです。Cameraの方が狭い視野の反面、綺麗な見た目で撮影できると予想しています。その際、どの程度綺麗にとれるのか?ということに興味が湧いています。この解像度次第では高度な画像処理にも耐えうるかもしれません。....と、妄想が膨らむところで、今後実際の使用感について書いていこうと考えています。Studioでいいんじゃない?)・学校が推奨しているOSがwindowsですので、windows上で仮想OSとか使わずに機械学習のライブラリが使えるような環境構築をしていきたいと思います。64bit参考:基本的にはこの二つを参考にしています。Python.orgここからpython2.7の最新版をダウンロードしてください。installerを選択してください。installインストーラを起動した後は、主にインストーラに従う形でOKです。環境変数のPathに、C:¥Python27;を追加してください(ここら辺は他にも解説しているサイトがありますので、割愛します)[確認]コマンドプロンプトでpythonと打ち、以下の画面になればOKです。matplotlibのインストール参考1とここから少しづつ変わっていきます。具体的には、.whlファイルのインストール方法と、msiインストーラを使わないことが記事と違うところです。numpyのインストールhttp://www.lfd.uci.edu/~gohlke/pythonlibs/#numpyから、適切なバージョンのものを選んでダウンロードしてください。amd64.whlを選びます。)ダウンロードが完了したら、C:¥Python27¥Scriptsのフォルダに入れて下さい。これから、whlファイルをインストールします。具体的には、pipというパッケージ管理ツールを利用します。コマンドプロンプト上で、C:¥Python27¥Scriptsへ移動します。(インストールしたいwhlファイル(!!ファイル名は変えてはダメ!!))と打ち、以下のようなコンソールが出て来ればnumpyのインストールが完了します。numpyと打ち、Errorが出てなければ大丈夫です。pandasのインストール次に、numpyと同様にして、以下の二つのライブラリを導入してください。scipyhttp://www.lfd.uci.edu/~gohlke/pythonlibs/#scipypandashttp://www.lfd.uci.edu/~gohlke/pythonlibs/#pandas[確認]numpyの時と同様、確認してください。matplotlibのインストール参考1で言われている通り、matplotlibは楽です。コマンドプロンプト上で、C:¥Python27¥Scriptsへ移動します。scikit-learnのインストール機械学習ライブラリである、scikit-learnをインストールします。(念のため、このライブラリを最後にしています。)numpyの時と同様にして、インストールをしてください。pyDevのインストール参考1の通りです。Eclipseをインストールし、pyDevをインストールしてください。青いリンクのような場所をクリックし、Pythonの情報をEclipse側に設定します.(自動設定のような項が真ん中のボタンに出るので、その真ん中のボタンを押してください(画像なし))そして、Finishを押します。Moduleを選択します。このような形でパッケージ名とmodule名を命名したください。以下のページを参考にしてください。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。