一个理解TUIO协议的Python库
项目描述
这个库能够接收并解析遵循TUIO协议的数据,该协议专门设计用于在桌面上传输实体对象的状态和多点控制。
安装
为了使用这个库,您需要有一个跨平台的reacTIVision应用程序,它负责跟踪实体对象(所谓的标记)。它通过UDP套接字将接收到的数据(例如位置信息)作为OSC消息发送到使用此库的客户端软件。
如果您还没有下载django-registration的副本,您需要这样做。您可以在此处下载最新版本的打包版本
http://pytuio.googlecode.com/files/pytuio-0.1.tar.gz
打开包(在大多数操作系统中,您可以双击,或者您可以使用命令tar zxvf pytuio-0.1.tar.gz手动解压),然后在命令行中导航到目录pytuio-0.1,然后输入
python setup.py install
这将把pytuio安装到您的Python导入路径上的一个目录中。对于Linux/Unix和Mac OS的系统范围安装,您可以使用sudo
sudo python setup.py install
或者,您也可以进行Subversion检出以获取最新的开发代码(尽管这也可能包括尚未修复的错误)
svn co http://pytuio.googlecode.com/svn/trunk/tuio/
为了获得最佳结果,请在您的Python导入路径上的目录中进行
如果您愿意,您也可以简单地将包含的tuio目录放置在您的Python路径上的某个位置,或者从Python路径上的某个位置创建到它的符号链接;如果您正在从Subversion检出工作,这将很有用。
如果您计划将此库与Nodebox.app一起使用,请将tuio目录复制到~/Library/Applications Support/Nodebox/,以使Nodebox能够找到它。
基本用法
要一般性地使用此库,您应遵循以下步骤
获取一个摄像头或网络摄像头,如iSight、Quickcam等,如有必要,安装其驱动程序,然后尝试使用reacTIVision软件
查看examples目录,以使用Python代码开始。如有需要,请向您的当地Python大牛求助。
构建可触摸界面、桌面、舞台、车辆、游戏等。
使用源代码,Luke。
库中有什么
该库由几个部分和子模块组成
跟踪
应使用Tracking类来初始化一个用于接收来自reacTIVision的OSC消息的套接字连接。它处理所有传入数据,并调用适当的函数,具体取决于消息类型。
启动时,它会从profiles子模块加载所有可能的配置文件,并从OSC模块初始化一个回调管理器。
一个简单的示例可以在examples目录中的example1.py中找到
导入它
import tuio
初始化跟踪数据的接收
tracking = tuio.Tracking()
打印已找到和加载的所有TUIO配置文件
print "loaded profiles:", tracking.profiles.keys()
打印可用的辅助函数,可以使用这些函数访问每个加载配置文件的对象
print "list functions to access tracked objects:", tracking.get_helpers()
准备在无限循环或事件循环中接收数据
try: while 1: tracking.update() for obj in tracking.objects(): print obj except KeyboardInterrupt: tracking.stop()
您需要在每个循环中手动更新跟踪信息。
使用返回这些对象列表之一的辅助函数之一来访问跟踪对象。
在每次异常中手动停止跟踪,以防止套接字错误
对象
objects子模块包含一系列表示可触摸对象类型的类。它们都是包括的objects.TuioObject的子类。目前定义了以下对象类型
Tuio2DCursor - 一个抽象的光标对象,例如手指。此对象具有有限的信息,只有当reacTIVision找到了最小的可能的标记时才会发送:一个点。与可触摸桌面结合使用时,这也可以通过在桌面表面上使用手指来实现。
它具有以下属性
sessionid - 属于它的唯一sessionid
xpos - x轴上的相对位置
ypos - y轴上的相对位置
xmot - x轴上的运动向量
ymot - y轴上的运动向量
mot_accel - 运动加速度
Tuio2DObject - 表示标记的抽象对象。此对象关于其状态的详细信息,当reacTIVision识别到标记时会发送。
它具有以下属性
sessionid - 属于它的唯一sessionid
xpos - x轴上的相对位置
ypos - y轴上的相对位置
angle - 当前角度(以度为单位)
xmot - x轴上的运动向量
ymot - y轴上的运动向量
rot_vector - 旋转向量
mot_accel - 运动加速度
rot_accel - 旋转加速度
TUIO协议还提供了更多可能的对象类型,具体取决于交互式表面的用途,例如
2.5D交互式表面 - Tuio25DCursor和Tuio25DObject
3D交互式表面 - Tuio3DCursor 和 Tuio3DObject
原始配置文件 - 目前只支持 dtouch 规范
但用户需要实现这些配置文件。只需查看 objects.py 和 profiles.py 中的基类,并对其进行子类化。
配置文件
配置文件子模块包含了一系列关于当使用特定对象类型时应该发生什么的抽象描述。根据所需的实体对象属性,您可以自定义配置文件以满足自己的需求。
例如,如果您想接收2D跟踪对象的数据,则需要使用相应的配置文件,因为它知道如何处理此类对象的数据库。
每个配置文件都从具有以下必需方法的 TuioProfile 基类中继承,这些方法的名称源自原始OSC消息的名称
set - 每个活动(但未更改)的标记状态会定期通过“set”消息重发。属性以列表或元组的形式发送。
alive - “alive”消息包含reacTIVision已知的所有活动标记的会话ID。
fseq - fseq消息将唯一的帧ID与一组 set 和 alive 消息关联
其他方法和属性包括
list_label - 定义在初始化 Tracking 实例时自动创建的辅助方法的名称,并将其映射到使用的配置文件的 objs 方法。
address - 定义绑定到 CallBackmanager 并在启动 Tracking 实例时开始监听的OSC地址。
objs - 返回一个生成器列表,包含所有通过此配置文件识别并在当前会话中识别的跟踪对象。尽管如此,请使用在类变量 list_label 中定义的名称的辅助方法。
OSC
此子模块执行了解码TUIO协议中使用的OSC消息的大部分繁重工作,并提供了一个方便的 CallbackManager。它是由Daniel Holth和Clinton McChesney编写的。
接下来会发生什么?
这个库应该是关于实体接口与Python编程语言易用性相结合的讲座的开始。
请随时联系作者Jannis Leidel <jannis@leidel.info> 了解有关实体用户界面、集成到Pygame以及未来功能的更多信息。
当然,您可以使用其Google Code项目的缺陷跟踪服务
http://code.google.com/p/pytuio/issues/list
请求新功能、报告错误或成为项目成员。