ARToolkitをAndroidで動かす!

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
プログラミング第5回 1 while ループ 文字列の操作
6.4継承とメソッド 6.5継承とコンストラクタ 11月28日 時田 陽一
コンピュータビジョン特論 OpenCVについて
画像処理学習用RTコンポーネントライブラリ 田窪 朋仁,大原 賢一,吉岡 健伸(大阪大学)
ARの拡張性の研究 H411023 太田智章.
Androidソースリーディング 「ツール編」
アルゴリズムとデータ構造 2013年6月18日
8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY.
とても使いやすい Boost の serialization
とても使いやすい Boost の serialization
Unity, C# マウスでモデルを移動させる方法
JAVA.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
アルゴリズムとデータ構造 2012年6月14日
アルゴリズムとデータ構造 2011年6月13日
構造体.
Androidソースコード公開後のJNI
OpenCV を使った画像処理コンポーネントの作成例 田窪 朋仁(大阪大学)
繰り返し プログラミング 第4回 繰り返し プログラミング第4回.
JAVA GUIプログラミング 第5回 ボタンとそのイベント処理.
AR概要とNyARToolkitについて
第2章 Eclipseと簡単なオブジェクト 指向プログラミング
アルゴリズムとデータ構造 2011年6月14日
アルゴリズムとデータ構造 2011年6月20日
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
プログラミング演習3 第2回 GUIの復習.
リアル卓球 B2 Ryo.
オーサリングツール&ブラウザの 技術的トピック
ソフトウェア工学 知能情報学部 新田直也.
UDPマルチキャストチャット                    空川幸司.
Leap Motionを用いた実世界指向 アプリランチャの設計と開発
日本Androidの会 事務局長 SIPropプロジェクト 代表 グロースエクスパートナーズ 今村 謙之(いまむら のりつな)
視点移動カメラにおけるカメラキャリブレーション
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
プログラミング演習3 第2回 GUIの復習.
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
デジタル画像とC言語.
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング基礎a 第12回 Java言語による図形処理入門(3) アニメーション入門
プログラミング基礎a 第11回 Java言語による図形処理入門(3) アニメーション入門
プロジェクト演習Ⅱ インタラクティブゲーム制作
ソフトウェア制作論 平成30年11月21日.
CGと形状モデリング 授業資料 1,2限: 大竹豊(東京大学) 3,4限: 俵 丈展(理化学研究所)
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2011年7月8日課題の復習
アルゴリズムとデータ構造 2011年6月23日
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
アルゴリズムとデータ構造 2012年7月2日
C#プログラミング実習 第3回.
計算機プログラミングI 木曜日 1時限・5時限 担当: 増原英彦 第1回 2002年10月10日(木)
アルゴリズムとデータ構造 2012年6月11日
アルゴリズムとデータ構造 2011年6月28日
画面への描画 Graphics オブジェクト 紙 ペン Pen オブジェクト Brush オブジェクト 画面のピクセルをカプセル化
プロジェクト演習III,V <インタラクティブ・ゲーム制作> プログラミングコース
アルゴリズムとデータ構造 2013年7月2日
アルゴリズムとデータ構造1 2009年6月15日
プログラミング基礎a 第9回 Java言語による図形処理入門(1) Javaアプレット入門
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造 2012年6月21日
アルゴリズムとデータ構造 2010年6月17日
オブジェクト指向言語論 第七回 知能情報学部 新田直也.
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
3.1 シューティングゲームの当たり判定 当たったら死亡.
TList リスト構造とは? 複数のデータを扱うために、 データの内容と、次のデータへのポインタを持つ構造体を使う。
オブジェクト指向言語論 第十回 知能情報学部 新田直也.
計算機プログラミングI 第2回 2002年10月17日(木) 履習登録 複習 ライブラリの利用 (2.6-7) 式・値・代入 (2.6-8)
5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
計算機プログラミングI 第5回 2002年11月7日(木) 配列: 沢山のデータをまとめたデータ どんなものか どうやって使うのか
Presentation transcript:

ARToolkitをAndroidで動かす! コンテンツWG 今村謙之 with ケイブ ©Japan Android Group, 2008

どんなもの? カメラ(ハードウェア連携)編 AR編 3D(OpenGL/ES)編 Agenda どんな可能性があるのか? Androidのお作法でカメラを使うには? AR編 ARの原理と基礎 3D(OpenGL/ES)編 OpenGL/ESの基礎 Androidのお作法でOpenGL/ESを使う という形で進める

ARとは? Augmented Reality:拡張現実感 マーカーを認識して、それがある場所に何かを表示させるもの まずは、見てください

Augmented Reality:拡張現実感 マーカーを認識して、それがある場所に何かを表示させるもの ARとは? Augmented Reality:拡張現実感 マーカーを認識して、それがある場所に何かを表示させるもの カメラによるリアル映像の取得 画像解析によるマーカーの検知 これが、ARToolkitのコア 3D(OpenGL/ES)による、モデル・オブジェクトの表示 当然、3DでなくてもOK。

マーカーを変更する マーカー検知後の動作を変える 何に使える? 道路標識、道路の交差点 顔認識 OpenCVによるいろいろな画像認識 カーナビと組み合わせる 顔認識 Android自体に入っている OpenCVによるいろいろな画像認識 画像識別、認識ライブラリ マーカー検知後の動作を変える 企業ロゴやお店の面構え ダイレクトメールが届く どこでもドア 画面の右端へ、ワープするなど ゲーム的な使い方 これからのトレンド 人間の五感に訴える 肌身離さず持つことができるデバイスだからこそ可能 これとWeb上のサービスを連携していくことが重要

カメラ(ハードウェア連携)編

Socketによる通信 Socketなカメラを扱う! private class CaptureThread extends Thread { public void run() { while (true) { try { Socket socket = new Socket(); socket.connect(IPAddress_and_Port, SOCKET_TIMEOUT); InputStream in = socket.getInputStream(); callback.onPreviewFrame(buf, null); } catch (Exception e) { ;; }

要は、ただのSocketプログラミング! 汎用性、抜群! Adamrockerさんのフライトシミュレータも利用 プロトコル設計が必要な場合

どう動くのか? カメラの画像を取得する G1実機のカメラ Camera.Open(); ↓ Camera.setPreviewDisplay(SurfaceView.Handler); Camera.setPreviewCallback(PreviewCallback); Camera.startPreview(); PreviewCallback.onPreviewFrame(byte[], Camera); BitmapFactory.decodeByArray(byte[], start, length);

Cameraを操作するためのクラス ハードウェアにアタッチするのだが、、、 Cameraクラス public class Camera { public static Camera open() { return new Camera(); } Camera() { // ここに変数の初期化がある。 native_setup(new WeakReference<Camera>(this)); private native final void native_setup(Object camera_this);

Androidでデバイスを扱うときのキモ Callback and Listener Androidでデバイスを扱うときのキモ データはこれにコールバックされる Cameraクラスの内部で定義されている public interface PreviewCallback { void onPreviewFrame(byte[] data, Camera camera); } 加速度センサーのLitener public interface SensorListener { public void onSensorChanged(int sensor, float[] values); public void onAccuracyChanged(int sensor, int accuracy); 登録先 Manager.registerListener(Listener); ApplicationContext.getSystemService(String name); ハードウェア的なところは、1月で!

G1実機のカメラ しかし、罠があった!!! Issue 823: byte[] image data in onPreviewFrame is currently useless http://code.google.com/p/android/issues/detail?id=823 Cameraからは、YCbCr_422_SP形式で取れるが、BitmapFactoryでは、それが読めない 対処法 YCbCr_422_SP形式を、読める形式に変換する Camera.takePicture(ShutterCB, PictureCB, JpegCB)を、使用する

AR編

解説すること 解説しないこと 原理 Android版との差分 ARToolkitの導入法 ARToolkitのプログラミング 最初に 基本を解説 Android版との差分 通常のARToolkitとの差分 解説しないこと ARToolkitの導入法 キャリブレーションなど ARToolkitのプログラミング

ポインタ紹介 ARToolkit本家 NyARToolkit(ARToolkit for MultiLang) 参考ページ http://www.hitl.washington.edu/artoolkit/ NyARToolkit(ARToolkit for MultiLang) http://nyatla.jp/nyartoolkit/wiki/index.php 参考ページ http://www1.bbiq.jp/kougaku/ARToolKit.html http://zoome.jp/specestone/diary/6/

2値化する ラベリングをする(閉領域を取り出す) 輪郭検出 四角検出 同じ色の領域を見つける 最初の点から、輪郭を なぞるように一周する マーカーの検知 2値化する ラベリングをする(閉領域を取り出す) 同じ色の領域を見つける 輪郭検出 最初の点から、輪郭を なぞるように一周する 四角検出 最初の点から、一番離   れた点を探す その2点の線分から   一番離れた点を探す

ほしいもの ここで、前提。 マーカーの位置 マーカーのサイズ マーカーの方向 マーカーの向きは、判定しておく 変換行列 ほしいもの マーカーの位置 マーカーのサイズ マーカーの方向 ここで、前提。 マーカーの向きは、判定しておく 画像マッチングを利用している 『キャリブレーションされた』平面が存在する カメラ位置(カメラ焦点)の決定

検知したマーカーの4辺を『キャリブレーション』平面に、カメラ焦点から射影する この平面に対する法線を引く 変換行列の算出 検知したマーカーの4辺を『キャリブレーション』平面に、カメラ焦点から射影する 各4辺とカメラ焦点による平面を作る この平面に対する法線を引く 向かい合った面同士の法線の外積を求める これが、ベクトルになる これら外積の外積を 求める これが、座標になる これで、回転行列完成 方向・サイズ決定 並進ベクトルを求める 残りの値で計算できる 位置決定

Androidでの特別なものはないです。 私が見た限りでは。

3D(OpenGL/ES)編

3D(OpenGL/ES) 別の資料を用意してきました

お知らせ 詳しくはいえませんが、、、 某所にて企画進行中

ご清聴ありがとうございました http://www.android-group.jp/ info@android-group.jp