Category:Home/library (Total 7 items)

6-7 | 1-5 ≫

Categories - library

TUIO

fromhttp://nodebox.net/code/index.php/TUIO

Description

TUIOライブラリはMusic Technology Grouphttp://mtg.upf.edu/によってつくられたTUIOプロトコルhttp://modin.yuri.at/publications/tuio_gw2005.pdfの受信とデータ解析を可能にする。
「これは、触ることのできるオブジェクトの状態や、テーブル上のマルチタッチコントロールを伝達するために設計された。」

Download

(略)

Installation

このライブラリを使用する為にクロスプラットホームのreacTIVisionが必要である。
reacTIVisionはfiducialsと呼ばれる触れるオブジェクトのトラッキングをする。
受け取ったデータ(位置情報等)はUDP経由でOSCとしてこのライブラリで使うクライエントソフトへ伝達される。

(参照)

Documentation

Basic use

一般的なライブラリの使い方を以下に:

  1. iSight, Quickcamといったカメラ、 webカメラを用意し、必要ならドライバーをインストール、reacTIVisionを起動させる。fiducialsを印刷して貼り付ける。
  2. サンプルを見てみる。http://code.google.com/p/pytuio/source/browse/trunk/examples/nodebox/
  3. 触れるインターフェース、テーブル、ステージ、乗り物、ゲーム何でも作ってみる。
  4. Blender,Pygame,NodeBoxと組合せてみる。
  5. Luke作のソースを使う。http://code.google.com/p/pytuio/

The Tracking class

Tracking クラスはreacTIVisionからのOSCメッセージ受信の為のソケットコネクションを初期化するのに使用されるべきである。
メッセージタイプに依存して、全ての受信データを扱い、適した昨日を呼ぶ。

開始されると、profile submoduleから可能なprofileをロードし、OSC moduleからのcllback managerを初期化する。

シンプルなサンプルはexample1.pyとして同封されている。

1、インポートする。:

tuio = ximport("tuio")

2、トラッキングプログラムをセットアップする。

def setup():
    global tracking
    tracking = tuio.Tracking()

3、メインのループ処理をセットし、認識した全てのオブジェクトを描画し、それらに応じて回転させる。

def draw():
    global tracking
    tracking.update()
    fontsize(10)
    for obj in tracking.objects():
        x = obj.xpos * WIDTH
        y = obj.ypos * HEIGHT
        rotate(obj.angle)
        rect(x, y, 20, 20)
        reset()
        text(obj, x, y)

a) トラッキングの情報は各ループで手動でアップデートする必要がある。

b) (オブジェクトのリストを返す)helper機能の一つを使ってトラックされているオブジェクトへアクセスしよう。

c)ソケットエラーを防ぐ為の各例外を手動で止めよ。

4、NodeBoxを止めると、トラッキングも止まる。

def stop():
    global tracking
    tracking.stop()

例えば、カメラの前に2つのfiducialsがあった時、スクリプトの出力は以下のようになる。

画像無し

また、説明に使ったスクリプトはpyTUIOのディストリビューションとして見つけることが出来る

The objects submodule

objects submodule

http://code.google.com/p/pytuio/source/browse/trunk/tuio/objects.pyは、一連のクラスを含み、それらは触れるオブジェクトのタイプの代理をする。 それらは全て、objects.TuioObjectに含まれたサブクラスである。 次のオブジェクトが定義されている。

Tuio2DCursor - 抽象的なカーソルオブジェクト、例えるなら指。 このオブジェクトは限定的な情報を持っており、最小のfiducial markerを見つけると、その点をreacTIVisionに送るのみである。 tangible tableとの組合せで、table上で指を使って操作できる。

次のattributesがある。

  • sessionid - The unique sessionid it belongs to
  • xpos - The relative position on the x-axis
  • ypos - The relative position on the y-axis
  • xmot - The movement vector on the x-axis
  • ymot - The movement vector on the y-axis
  • mot_accel - The motion acceleration

Tuio2DObject - fiducialを表す抽象的なオブジェクト。
このオブジェクトは、その状態についての情報を詳しく表し、fiducialが認識されると、reacTIVisionに送る。

次のようなattributesがある。:

  • sessionid - The unique sessionid it belongs to
  • xpos - The relative position on the x-axis
  • ypos - The relative position on the y-axis
  • angle - The current angle in degrees
  • xmot - The movement vector on the x-axis
  • ymot - The movement vector on the y-axis
  • rot_vector - The rotation vector
  • mot_accel - The motion acceleration
  • rot_accel - The rotation acceleration

TUIOプロトコルはinteractive surfaceの目的に応じて、さらに可能なオブジェクトタイプを与える。以下例。

  • 2.5D Interactive Surface - Tuio25DCursor and Tuio25DObject
  • 3D Interactive Surface - Tuio3DCursor and Tuio3DObject
  • raw profile - at the moment only dtouch specs are supported

しかし、これらのprofileはユーザによって実装されるのが残されます。 objects.py 、 profiles.py 、 base class のsubclassをただ見て。

The profiles submodule

profilesサブモジュールは、あるオブジェクトが使用された時、何が起こるべきなのかが抽象的に含まれている。
望ましいtangible object属性により、あなたの必要性の為profileをカスタム出来る。

例えば、もし、2Dトラッキングオブジェクトのデータを受信したいなら、一致したprofileを使用する必要がある。なぜなら、このオブジェクトタイプのデータセットの扱い方を知っているから。

TuioProfile base classからのそれぞれのprofile subclassは次の要求されたメソッドを持つ。これらの名前はraw OSC message由来の名前である。

  • set - The state of each alive (but unchanged) fiducial is periodically resent with 'set' messages. The attributes are sent as a list or tuple.
  • alive - The 'alive' message contains the session ids of all alive fiducials known to reacTIVision.
  • fseq - fseq messages associate a unique frame id with a set of setand alive messages

他のメソッドやアトリビュートは:

  • list_label - Defines the names of the helper methods that are automatically created while initialization of the Tracking instance and maps to the objs method of the used profile.
  • address - Defines the OSC address to bind to the CallBackmanagerand start listening to while starting the Tracking instance.
  • objs - Returns a generator list of all tracked objects which are recognized with this profile and are in the current session. Though please use the helper methods whose names are defined in the class variable list_label.

The OSC submodule

このサブモジュールはTUIOプロトコルで使用されるOSCメッセージのデコードする力仕事の大部分をし、便利なコールバックマネージァーを与える。
Daniel Holth と Clinton McChesneyによって書かれた。

OSCについて詳しくはhttp://en.wikipedia.org/wiki/OpenSound_Control

What happens next?

このライブラリは使い易いPythonプログラミング言語とtangibleインターフェースとの組合せについてのレクチャーの始まりであるべき。

遠慮無く作者のJannis Leidelに連絡して、よりtangible user interfaceについて、Pygameや将来的な特徴について、もっと知識を得てください。
http://jannisleidel.com/

あなたはもちろん、PyTUIO Google Code のissue tracking service http://code.google.com/p/pytuio/issues/list を、使うことが出き、新しい特徴を尋ねたり、バグの報告をしたり、プロジェクトメンバーになったり出来る。

  • Comments (Close): 0
  • TrackBack (Close): 0

Quicktime

注)本家の解説の適当な訳です。

Description

Nodebox QuicktimeライブラリはNodeBoxへムービー(と音声)サポートを追加する。
ムービーから画像イメージフレームを掴むことに利用でき、それをNodeboxで表示したり、Core Imageで扱ったりできる。
さらに、このライブラリはNodeBoxでの音声の再生に利用出来、オーディオセクションを作ったり、スクリプトから音量やレートをコントロール出来る。

Documentation

How to get the library up and running

ダウンロードしたquicktimeフォルダを~/Library/Application Support/NodeBox/ もしくは(あなたのスクリプトと同じように)Nodeboxがライブラリを探せるように同じフォルダ内に入れる。
それであなたのスクリプトへライブラリがimportされる。

quicktime = ximport("quicktime")

Movie frames

Quicktime ライブラリはmovie()コマンドをもっている。
これは、与えられたロケーションからムービーを開く。
QuickTimeアプリケーションから通常開くことの出来るムービーならばどのようなtypeでも開くことが可能である。

movie(path)

コマンドはいくつかの有用なプロパティーと共にMovie objectを返す。

  • movie.path:ソースのパス
  • movie.duration:ムービーの長さ(秒)
  • movie.has_video:ムービーがビデオトラックを持っていればTrue
  • movie.has_audio:ムービーがオーディオトラックを持っていればTrue
  • movie.width:ムービーの幅(ピクセル)
  • movie.height:ムービーの高さ(ピクセル)

返されたmovie objectはイメージフレームを掴む為の二つのmethodを持つ。

movie.frame(time)
movie.frames(n=10, start=0, stop=None)

frame()メソッドは与えられた時間(秒)でのムービー内の画像データのMovieFrame objectを返す。
frames()メソッドは与えられた開始、終了時間(秒)の間のMovieFrame objectとリストを返す。
start stopパラメータはオプションである。

movie frame objectは次のプロパティーを持つ。

  • frame.data:イメージデータをimage()コマンドへ渡すことが出来る。
  • frame.time:frameがムービーのどこにあるかの時間。
  • frame.src:このframeが属するムービーのソースパス
  • frame.width
  • frame.height

NodeBoxへフレームを表示するのは、本当にとても簡単です。
次のスクリプトは全てのフレームをアニメーションでループします。

movie = quicktime.movie("twisted_world.mp4")
size(movie.width, movie.height)
speed(50)
def draw():
    frame = movie.frame(FRAME*0.1)
    image(None, 0, 0, data=frame.data, width=frame.width)

Movie frames in Core Image

Quicktime ライブラリと、Core Imageライブラリは、本当に一緒によく使う。
movie.frame()もしくはmovie.frames()リストから得られたMovieFrame object はCore Imageで、canvas.layer()オブジェクトを通すことが出来る。
それによって、あなたは色々なフィルターやエフェクトを使うことが出来る。

coreimage = ximport("coreimage")
quicktime = ximport("quicktime")

movie = quicktime.movie("twisted_world.mp4")
frame = movie.frame(1.0)

canvas = coreimage.canvas(movie.width, movie.height)
l = canvas.layer(frame)
l.filter_zoomblur()
canvas.draw()

Audio playback

Quicktime ライブラリはaudio()コマンドをもっている。
これは与えられたロケーションから音声ファイルを開くことが出来る。 QuickTimeアプリケーションから通常開くことの出来る音声ファイルならばどのようなtypeでも開くことが可能である。

audio(path)

このコマンドはいくつかの有用なプロパティーと共にAudio objectを返す。

  • audio.path:ソースパス
  • audio.duration:音声ファイルの長さ(秒)
  • audio.has_video: ビデオトラックがあればTrue
  • audo.has_audio: 音声ファイルがあればTrue
  • audio.volume:音声再生時の音量(0.0から2.0)
  • audio.time: 音声ファイルの現在の再生時間(秒)
  • audio.rate: オーディオの再生レートもしくはスピード(0.25から5.0)
  • audio.paused: オーディオがポーズされる(停止ではなくて)とTrue

返されたaudio objectは再生をコントロールするいくつかのメソッドを持つ。

audio.play()
audio.stop()
audio.pause()
audio.is_playing()
audio.reset()

audio.is_playing() methodはNodeBoxで音声が再生中な限り、Trueを返す。
再生中の音声はvolumeとrateを調節出来る。
それはtimeプロパティーで再生し始めるであろう。
audio.reset()メソッドはvolumeと、timeと、rateをデフォルトに戻す。(それぞれ0,0,1)

このライブラリはNodeBoxから音声を書き出しする機能は無い。

Copying and pasting selections

時々、ムービー全体の代りに、ムービーの選択部分で動作させたいとか、一秒のサンプルをループさせたいとか思うかもしれない。
movieとaudioどちらのオブジェクトもselection()メソッドを持つ。

media.selection(start=0, stop=None)

与えられたstart stop time間の新しいmovieもしくはaudioオブジェクトを返す。
例えば、これは音声の断片からショートループを作る方法である。

audio = quicktime.audio("modron_cube.mp3")
audio = audio.selection(start=0, stop=7.2)
speed(100)
def draw():
    if not audio.is_playing:
        audio.play()
  • Comments (Close): 0
  • TrackBack (Close): 0

Category:Home/library (Total 7 items)

6-7 | 1-5 ≫

Entries in this Category
Tutorial
Library
Syndicate this site

RSS 1.0 Feed

Return to page top