本申请要求对通过引用将公开内容结合于此、于2010年9月17日提交、名称为“Moving Information Between Computing Devices”的第61/384,075号美国申请的优先权。
具体实施方式
本文描述用于捕获关于一个计算机的当前状态的信息并且提供它、从而使得第二计算机可以取得相同或者相似状态的系统和技术,以及用于使用图像捕获技术在计算机之间共享信息的其它机制。在这里讨论的示例中,在计算设备、发起设备或者初始计算机(例如,智能电话)上的相机可以用来捕获另一计算机或者目标计算机的显示屏幕的图像。继而可以分析该图像以便标识在目标计算机上正在出现什么并且生成可以向初始计算机提供的信息,从而使得初始计算机的状态可以与目标计算机在图片中的状态匹配。比如通过确定用于目标计算机的所有相关状态变量并且在初始计算机上模仿那些变量,这样的匹配可以是全匹配。匹配也可以是近似匹配,比如其中目标计算机在地图绘制应用上显示与捕获的图像中的区域基本上重叠、但是可以有些移动或者不同地缩放的区域。匹配也可以是关联匹配,从而使得修改状态以与第二计算机的相对情境匹配。例如,如果目标计算机让文档打开并且目标计算机的第一用户正在编辑文档,则初始计算机可以同时打开文档、但是可以显示用于第二用户的光标,从而在文档中的不同位置显示光标。因此,在初始计算机上的状态与在目标计算机上的状态相似,因为两个用户正在查看相同内容,但是在初始计算机上的状态与在目标计算机上的状态不同,因为针对每个用户定制每个计算机上的视图。
下文描述讨论这里的技术的示例用例,并且继而讨论用于实现用例和其它这样的用例的特定技术机制。图1A和图1B示出了从台式计算机的监视器捕获状态信息的智能电话108。一般而言,附图示出如上文提到的从台式计算机向智能电话传递地图绘制应用的状态的用例。
在图1A中,用户正在她的右手中持有她的智能电话108并且将它瞄准她的计算机100(例如,台式计算机)的计算机监视器102(或者,显示设备)。用户可以已经运用她的计算机100上的web浏览器(由浏览器标签104示出)以导航到地图上的地理区域,比如商务会议的位置。她可以由于计算机100的相对大的监视器和灵活的输入机制(例如,鼠标、触摸输入等)而已经选择使用它。然而,她可能不能在她的小汽车中随身携带她的计算机100,并且她可能需要在她驾车时查询地图。因此,她希望从她的计算机100向她的智能电话108获得地图信息。(智能电话包括计算机,但是这里与特定计算机100分开地引用智能电话108以在这一示例中区分用户的一个计算机(台式计算机)与另一计算机(智能电话)。)
在这一示例中,智能电话108的屏幕正在示出用于在首次向用户提供智能电话108时可以与它一起包括的标准相机应用的用户接口。在这一示例中,用户刚才已经捕获了在计算机监视器102上显示的地图的部分的图像。智能电话108的显示器因此示出在计算机监视器102上显示的地图106的子集。
图1B示出了在以后时间在智能电话108在智能电话108上的web浏览器的地图绘制应用中正在示出地图本身时的智能电话108。在一些实现方式中,智能电话108在智能电话108上安装的独立地图绘制应用中示出地图。在图1B中所示示例中,在智能电话108上的URI 110与在计算机监视器102上显示的URI 112匹配。可以通过分析智能电话108或者智能电话108与之通信的服务器系统上的图像、识别浏览器地址框在图像中并且对框中的字符执行光学字符识别来生成这样的匹配。作为智能电话108单独(或者借助服务器系统)执行工作的备选,也可以委托计算机100辅助向智能电话108获得计算机100的状态的过程。在这样的系统中,如下文更具体讨论的那样,计算机100和智能电话108可以被认证或者登录到包括文字消息接发特征的共同在线服务器系统。智能电话108继而可以将来自计算机100的捕获的数字图像打包成文字消息并且可以向计算机100发送图像。计算机100继而可以使用图像以确定用户从计算机监视器102捕获了什么并且因此确定用户想要重复的应用和状态。计算机100可以比较接收的图像和在计算机监视器102上当前正在显示的图像、寻找匹配、并且继而标识由匹配代表的应用。计算机100继而可以比如通过从web浏览器应用获得当前URI来确定应用的当前状态。
图2A是用于在计算机之间共享信息的系统200和过程的示意流程图。系统200可以用来实施刚才针对来自图1A和图1B的用例讨论的消息流。在这一示例中,系统200的各种部件使用熟悉的技术(比如TCP/IP协议)通过包括因特网202的一个或者多个网络通信。系统200的三个主要部件包括台式计算机204、计算机208(可以是移动计算机)和服务器系统206。三个部件可以相互配合以提供获取和在每个部件之间共享适当信息以允许在计算机204、208之间匹配状态。也可以运用附加的或者其它部件,但是提供在图2A中所示的特定示例部件以辅助以清楚方式说明相关技术。
服务器系统206可以实施包括跨设备信息交换系统(比如PIE)的标准即时消息接发(IM)系统。将IM架构用于信息共享可以通过以下方面在某些实现方式中有益:(1)允许计算机204、208相互通信而不知道其它计算机的IP地址;(2)提供用于实时发送和接收消息的持久连接以便避免网络地址转译(NAT)和防火墙的某些问题;(3)提供立即消息接发,从而使得计算机204可以在计算机208捕获计算机204的显示器的图像之后立即接收消息;以及(4)由于标准即时消息接发系统可以是相当成熟、开发好并且归档好的系统,所以可以使用现有库和其它单元,许多程序员可以修改和改进系统,并且已经理解这样的系统的管理员可以使用现有硬件和软件来实施系统。
在一个实现方式中的特定消息接发是已经被商用地实施为Jabber产品的可扩展消息接发和存在协议(XMPP)系统。这样的产品允许单个用户从多个“资源”或者设备同时登录。通过以下寻址方案在通信中标识用户账户和资源:“userserver/resource”。因此,用户可以初始地用单个用户名建立她的设备中的每个设备并且可以避免必须向联系人列表中手动添加所有她的设备。此外,XMPP消息可以相对大(例如,与SMS文字消息比较),从而使得可以使用协议来发送更丰富的内容,比如JPEG或者其它格式化的数字图像。
计算机204、208各自具有由用户安装和配置的用于执行上文讨论的状态匹配(例如,经由深度摄影或者深度发布)的程序。关于图2B具体讨论在示例实现方式中的特定部件。一般而言,应用可以在两个计算机204、208上相同,但是可以仅在具有图像捕获能力的计算机上使用某些部件。应用可以被编程用于捕获图像、向对应计算机发布图像并且响应于来自另一计算机的返回通信来启动与在另一计算机上的应用对应的应用。
在交互的相反侧上,目标计算机可以包括用于调度来自捕获图像的初始计算机的接收的请求以便确定图像是否与目标计算机的当前显示匹配的部件。该确定继而可以如果存在匹配则用于标识目标计算机的相关状态信息,并且用于向初始计算机传达回目标计算机的状态信息。
特定信息共享过程由图2A中的流程箭头示出。该过程始于用户用计算机204登录到服务器系统206(箭头210),并且因此在系统200中建立它的存在并且打开持久通信信道时。在相同、更早或者更晚时间,用户可以用计算机208登录(箭头212)。认证过程可以使信任级形成于计算机204、208之间,因为计算机可以响应于来自其它相似认证的设备的请求自动做出响应,这是因为已知设备被认证到相同用户。虽然这里为了清楚而仅示出两个计算机204、208,但是用户可以在相同时间用三个或者更多不同设备登录(例如,多个台式计算机、写字板、游戏控制台和智能电话)。这里所示相关通信继而可以由服务器系统206扩展到每个相似认证的设备。
这样的通信也可以出现于向不同用户分配的设备之间。例如,用户可以将他们本身与他们信任的其他用户(例如,在他们的工作部门内的其他人)布置成组,并且系统200可以被编程用于在用户之中自动传递这里讨论的类型的消息。在一些实现方式中,可以限制信任,从而使得接收用户的设备可以生成已经接收相关通信这样的信号,并且可以要求接收用户确认她愿意共享关于她的计算机的状态的信息(其中消息可以提供请求用户的身份并且标识将向请求用户传递回的信息)。因此,例如,作为同事并且一起在房间内的两个用户可以让第一用户捕获第二用户的计算机显示器的图像,这将使第二用户的计算机请求来自第一用户的确认以便共享状态信息。在一些实现方式中,可以比如通过让目标计算机在来自另一设备的针对信息的请求到达时发布用于它的用户的消息来在运行时建立信任,其中消息可以包括请求用户的身份并且也标识将向请求用户发送的信息,从而使得目标用户可以允许或者拒绝访问信息。在这样的情形中,例如,请求用户可能已经必须手动标识用于目标用户的测试消息接发地址。
在计算机204、208已经登录到系统200之后,计算机204、208可以等待系统200引起信息共享。然而,使用这里讨论的文字消息协议,计算机204、208可以保持注意来自其它这样的计算机的通信。特定信息共享会话在图2A中所示示例中始于计算机208用来捕获计算机204上的显示器的图像时。在这一示例中,可以在计算机204的监视器上的包括托管的应用的照片管理应用中显示三个人的照片。计算机208被示出为已经捕获该图像的至少一部分、将图像与用于信息共享过程的其它相关信息一起向文字消息服务器系统206传递(箭头214)。这样的传输可以使服务器系统206向与计算机208预先认证的所有其它设备提供消息。如上文指出的那样,这样的设备可以包括当前登录到相同用户账户的所有设备、在定义的组中的设备或者其它设备组织。在这一示例中,与计算机208预先认证的所示的一个其它设备是计算机204,但是相同用户可以具有这里未示出的与计算机208预先认证的其它设备。
计算机208可以使用具体涉及这里描述的信息共享过程的应用来执行图像捕获。可以经由对本机相机电话系统的扩展来执行或者可以向基本相机电话功能中并入图像捕获。在一些示例中,功能可以是用于共享捕获的图像的选项的菜单中的一个选项(其中其它选项可以包括用电子邮件发送图像、向社交联网站点发布图像等)。在一些实现方式中,设备可以无论何时捕获图像都自动检查以确定图像是否示出计算机显示器,并且如果是这样,则可以自动启动这里讨论的功能。
返回图2A的信息流,计算机204从计算机208接收消息并且开始比对消息中的信息检查它自己的状态的过程(箭头216)。具体而言,计算机204可以拍摄它自己的屏幕的屏幕截图并且比较屏幕截图与从计算机208接收的图像。在一个示例中,用BASE64格式对图像编码,并且可以使用计算机视觉算法(比如加速鲁棒特征(SURF)或者比例不变特征变换(SIFT))对图像解码。SURF是对于缩放和旋转的影响稳健的基于视觉特征的算法。SURF可以在过程中用来分别检测在计算机204上拍摄的屏幕截图上和在从计算机208接收的图像上的关键点。此外,SURF可以在过程中用来通过对屏幕截图中的每个关键点与图片的每个关键点进行配对来对第一用户用计算机208的相机捕获的区域定位。一旦计算机204已经在屏幕上标识了匹配区域,则它可以获得区域的拐角和区域的中心点的X、Y坐标并且向在该区域中在计算机204上运行的最前端应用提供该信息。
应用继而可以用如下消息做出响应,该消息提供关于它的当前状态的信息。在一些实现方式中,在计算机204上的应用可以被它们的开发员编程用于使用应用编程接口(API)来执行这样的动作。在其它示例中,应用可以是如下浏览器,该浏览器可以已经具有用于执行这样的动作的扩展。应用提供的信息可以在一些实现方式中包括描述应用的当前状态的URI。一旦收集了信息,如由信息流(箭头216)所示,则计算机204可以通过服务器系统206向请求计算机208传递回描述它的当前状态的信息,比如URI。
虽然在这一附图中未示出,但是向系统206注册到相同用户的其它设备也可以已经接收消息并且以相似方式动作。具体而言,那些设备可以已经接收图像、比较它与它们的当前显示器的屏幕截图、确定它们不是通信的目标并且保持静默或者向计算机208返回如下相应消息,这些相应消息指示它们没有匹配并且将不会提供它们本身的当前状态信息。
通过对应文字消息向计算机208传递回URI或者描述应用在计算机204上的状态的其它形式的信息(箭头218)。计算机208继而可以解译接收的信息以启动适当应用或者使适当应用成为计算机208的焦点,并且可以让应用转变到与对应应用在计算机204上的状态匹配的状态。例如,计算机208可以向在计算机208上运行的浏览器传递接收的URI作为地址。
在涉及到从计算机208向计算机204深度发布(如与用于从计算机204向计算机208获得信息的深度摄影比较)的相似示例中,计算机208的用户可以肯定地向计算机204推出计算机208的状态。作为一个示例,用户可以在步行去往她的办公室之时已经开始在计算机208(例如,她的智能电话)上编辑文档,并且可能想要在她的计算机204(例如,台式计算机)上完成文档的编辑。在这一示例中,用户可以调用信息共享应用,该信息共享应用可以使计算机208上的相机被激活,并且也向相机的当前视图叠加用户在计算机208上的当前显示。用户继而可以将相机瞄准计算机204并且捕获计算机204的图像。计算机208继而可以用与上文讨论的方式相似的方式提交文字图像,但是具有计算机204正在尝试与另一计算机共享它自己的信息这样的指示和描述该当前状态的信息。计算机204继而可以接收消息并且可以执行如上文针对深度摄影描述的图像匹配。然而,对于深度发布,计算机204确定它是否为用户打算将发布引向的计算机。如果计算机204从匹配确定它是目标计算机,则它可以启动一个或者多个适当应用或者使该应用活跃,并且可以根据它在文字消息中从计算机208接收的信息设置那些应用的状态。在上例中,计算机204可以启动托管的字处理系统并且可以打开用户在计算机208上编辑的相同文档,从而使得用户可以容易和无缝地继续编辑过程。
因此,以这一方式,这里描述的技术可以在一些实现方式中提供用于在相互视觉邻近的计算机之间共享或者同步信息的方便和直观的机制。这样的计算机的用户了解他们的计算机上的相机功能并且因此可以调用这里描述的信息共享过程。此外,信息共享可以通过标准TCP/IP和文字消息接发功能发生。一般而言,这一功能可以在大多数计算机上一直可用和被激活。可以在大多数现有系统中几乎没有影响地实施该过程并且那些系统的用户可以直观地使用该过程。
图2B是用于传递消息的系统220的示意图,这些消息共享关于计算机的状态信息。一般而言,系统包括通过XMPP服务器222通信的客户端计算设备。在图2B的示例中,示出了包括相机的移动设备220A和台式计算机220B的特定部件。一般而言,所有设备可以包括系统220的所有部件,但是可以根据它们是否为捕获图像的设备或者对接收捕获的图像做出响应的设备,在某些会话中仅实施某些部件。在图2B的示例中,移动设备220A包括相机并且因此将捕获台式计算机220B的显示器的图像,并且台式计算机220B将做出响应。然而,在其它实现方式中,台式计算机220B可以具有web摄像头并且可以是图像捕获设备。
在图2B的示例中,移动设备220A和台式计算机220B包括多个部件类型,例如,摄影器、发布器、调度器、启动器和应用。摄影器部件和发布器部件可以在捕获图像的设备(例如,移动设备)上操作。调度器部件可以在共享深度摄影中的信息或者接受来自深度发布的发布的目标设备或者计算机上操作。启动器可以在捕获图像的设备以及目标设备上操作。当在移动设备220A上操作时,启动器228启动移动应用以呈现通过深度摄影来捕获的信息。当在台式计算机220B上操作时,启动器232使台式应用呈现由深度发布来发布的信息。
可以用JavaScript Object Notation(JSON)格式对在部件之间和之中交换的特定消息进行结构化和编码。换言之,在XMPP上面,用JSON对在XMPP服务器和连接到它的部件之间的消息的正文编码。在调度器与应用之间的在WebSocket上面的消息也可以用JSON。WebSocket是支持通过TCP套接字的全双工和双向通信的协议。WebSocket当前正在由因特网工程任务组(IETF)和万维网联盟(W3C)标准化。一般而言,许多web浏览器支持该协议,并且许多台式应用可以由于使用TCP套接字而支持该协议,其中WebSocket可以是HTTP式握手协议对TCP套接字的扩展。
在操作中,每当启动应用238A-238N和236中的每个应用(其中应用238A-238N和236支持深度摄影)时,启动的应用通过TCP端口54080上的WebSocket连接向调度器234注册它本身。注册过程在标准WebSocket握手之后开始。启动的应用发送出以回车换行(CRLF)终止符为结束的行“reg APP_NAME”,其中APP_NAME是启动的应用的名称。如果调度器234接受启动的应用的注册,则调度器234用CRLF回复“ok”。如果调度器234未接受注册,则调度器234返回指示原因的消息并且关闭连接。为了支持深度发布,应用可以可选地发送“accept URI_SCHEME”命令,该命令指示应用接受什么类型的URI方案。例如,电子邮件客户端可以注册“mailto:”,并且web浏览器可以注册“http:”和“https:”。一旦完成注册,则可以保持这一WebSocket连接持久直至关闭应用,从而使得例如调度器可以向应用前摄地通知请求何时到来。在图3A和3B中讨论使用系统220的部件的特定过程。
图3A示出了用于深度摄影(即,捕获如下计算机的状态,该计算机是数字图像的目标)的示例。
图3B示出了用于深度发布(即,提供如下计算机的状态,该计算机向如下计算机捕获图像,该计算机的显示器在图像中)的示例。
进一步参照图2B中的系统220描绘用于图3A和图3B二者的过程。
参照图2B和图3A,用户使用摄影器226来初始地捕获图片(图像),其中图片旨在于示出台式计算机220B的显示器(框302)。一旦用户使用摄影器226以拍摄与台式计算机220B一起包括的计算机监视器上的感兴趣的区域的图片,则由捕获计算机(例如,移动设备220A)发送具有主题“deepshot.req”的XMPP消息(框304)。这一消息的发送指示继而向当前针对用户登录的每个设备广播的深度摄影请求(框306)。消息在一个示例中可以包括一对关键字值(例如,内容和由用户拍摄的被编码为BASE64串的图片)。
在台式计算机220B上运行的调度器234接收“deepshot.req”消息(框308)。台式计算机220B拍摄台式计算机220B的显示器的屏幕截图(框310)。调度器234继而对接收的BASE64消息解码并且使用SURF或者相似算法来比较解码的图片与屏幕截图(框312)。在调度器234已经在屏幕截图中发现匹配区域时,它确定匹配区域的拐角和匹配区域的中心点的x-y坐标,并且还确定台式计算机220B上的哪个应用是最前端应用(框314)。
在这一示例中将调度器234设计为可以在计算设备上作为后台应用连续运行的守护进程(daemon)。调度器234具有用户的证书,因此调度器234可以一直连接到XMPP服务器。因此,可以从XMPP服务器获得来自任何其它计算设备的计算设备的可用性。在调度器234已经进行上文描述的确定时,调度器234使用与每个运行和参与应用(应用238A至238N和236)的已经打开的WebSocket连接以向相关应用238A-238N和236提供包括两对关键字值的JSON请求,这些关键字值可以是坐标(例如,拐角和四对x-y坐标的列表,以及中心和一对x-y坐标),其中坐标相对于调度的窗口的左上拐角。
应用继而用任何相关方式确定它的状态并且向调度器返回它的状态信息(框316)。这样的信息可以例如是在当前web浏览器地址框中的URI。其它相似信息可以由其它应用提供。在一些示例中,来自应用的响应可以包括至少一对关键字值(例如,代表应用的状态的URI)。应用可以创建它们自己的URI从而使URI与公共标准(例如,http:、tel:、geo:等)兼容。在一些情况下,应用可以附着离线资源或者文件。每个附着的资源或者文件可以被存储于具有两对关键字值(例如,(1)名称,该名称是文件名;以及(2)内容,该内容是文件的BASE64编码内容)的JSON结构中。附件可以被存储于由答复消息中的关键字“files”标识的JSON数组中。
在台式计算机220B上的web浏览器可以呈现特殊类型的应用。web浏览器可以具有web调度器扩展236或者插件,从而使得浏览器可以参与描述的过程。所有应用可以在浏览器中运行,而那些应用的作者无需显式地支持每个过程。web调度器扩展236充当第二级调度器,从而将来自调度器234的消息向web浏览器中的适当网页寻路由并且向调度器234发送回答复消息。web调度器扩展236向所有网页提供JavaScript调回功能(例如,DeepShot.addListener(listener)),从而使得web开发员可以将它们的内部信号挂钩到这里描述的拍摄和发布过程。
web调度器扩展236也可以是用于如下web应用的默认响应器,这些web应用可以未显式地支持这里描述的过程。如果web调度器扩展236从如下站点接收对获得数据的请求,该站点未使用调回功能来注册它本身,则它可以返回用于站点的URL作为默认响应。在地址栏上的URL可以映射到当前web应用的状态。然而,一些AJAX应用可以没有这一属性,或者它们可以判决隐藏它们的实际URL。为了解决这一问题,web调度器扩展236可以通过注入内容脚本从网页前摄地提取信息。作为浏览器扩展,web调度器扩展236可以能够向网页中注入多种内容。因此,web调度器扩展236可以向网页中注入调用调回功能DeepShot.addListener的一件JavaScript以提取网页的内部信息。例如,地图绘制应用可以未在地址栏上示出指向地图的当前区域的URL。为了获得代表当前状态(地图的当前区域)的实际URL,web调度器扩展236可以注入调用“document.getElementById(‘link’).href”的内容脚本以获得在具有id“link”的文档对象模块(DOM)元素中存储的实际URL。使用这一内容脚本向用户提供用于使用深度摄影以在一个步骤中打开在她的计算机上显示的地图的能力。
在从应用238A-238N和236之一接收响应之后,调度器234可以创建具有主题“deepshot.resp”的新XMPP消息,该主题代表响应消息。响应消息的正文部分是来自应用的答复,该答复是JSON编码串。调度器也可以向消息中插入两对新的关键字值(例如,(1)标题,该标题指示应用的名称,该名称可以被存储和用来搜索或者浏览深度摄影历史;以及(2)缩略图,该缩略图是屏幕截图的匹配区域的BASE64编码缩略图,该BASE64编码缩略图也可以被存储于日志中并且由用户用来浏览深度摄影历史)。调度器234继而经由XMPP服务器222(框320)向移动设备220A返回包括状态信息的构造的消息(框318)。移动设备220A(捕获计算机)接收和处理消息(框322)。
在已经从消息提取相关信息时,继而可以向启动器228提供信息。启动器228可以自从它向台式计算机220B发送出初始消息起监视接收具有这样的名称的消息。在具有该主题的消息到达时,启动器228对用JSON编码的消息的正文解码并且向移动设备220A上的存储装置写入所有附件。启动器220A打开适当应用,该应用处置在来自台式计算机220B的答复中包括的URI类型并且向应用传递响应以便恢复台式计算机220B上的任务(框324)。一旦成功启动应用,则完成深度摄影过程。
图3B示出了与刚才描述的深度摄影过程相似地格式化的深度发布过程的示例。深度发布过程可以基于上文针对深度摄影过程描述的包括JSON结构和XMPP通信的相同基础。用于深度发布过程的关键作用在于发布器24。发布器224可以在包括相机的移动设备220A上操作。发布器224可以接受来自移动设备220A上的支持深度摄影的应用的请求。这些应用可以对将作为具有至少一对关键字值(例如,URI,该URI代表应用的内部状态)的JSON格式结构迁移的数据编码。
图4B中的过程始于被编程用于寻求深度发布的应用向具有相机的设备的系统提供发布请求(框326)时。一旦发布器224从应用接收发布请求,发布器224就打开相机应用并且在相机的取景器上重叠应用的屏幕截图,从而使得用户可以在相同时间看见目标设备和待发布的信息(框328)。在用户已经在相机的取景器内对准她想要捕获的图像的视图之后,用户可以指示捕获图像(例如,按压按钮)。作为用户输入的结果,捕获JPEG图像并且将图像编码成BASE64串。继而从具有关键字内容的发布请求向JSON结构中插入捕获的编码图像(框330)。发布器224可以创建具有主题“deeppost.req”的XMPP消息而以整个JSON串作为它的正文。发布器224继而可以用与用于深度摄影的方式相似的方式向所有相关设备(例如,当前登录到用户的账户的所有设备)发送这一XMPP消息(框332)。
XMPP服务器222继而向所有这样的设备广播消息(框334),这些设备通过它们的相应调度器中的每个调度器接收消息(框336)。例如,XMPP服务器222向台式计算机220B广播消息,该台式计算机通过调度器234接收消息。每个相应设备继而可以运行上文针对深度摄影讨论的计算机视觉过程以匹配用户拍摄的图片(捕获的图像)与特定设备的屏幕截图(框338、340)。例如,台式计算机220B运行计算机视觉过程以便确定用户拍摄的图片是否与台式计算机220B的显示器的屏幕截图匹配。如果未发现匹配,则调度器234用“无匹配”消息向服务器系统答复(框342、342),服务器系统向捕获计算机(例如,移动设备220A)转发回消息(框344)。捕获计算机(例如,移动设备220A)处理“无匹配”消息(框346)。如果调度器234确定存在匹配,则调度器234向启动器232发送请求(框348)。
如上文讨论的那样,应用238A-238N和236中的每个应用可以注册它支持的URI方案类型。启动器232可以使用这一信息以针对从捕获计算机(例如,移动设备220A)接收的URI或者其它状态信息启动应用238A-238N和236的适当应用(框350)。应用238A-238N和236中的每个应用可以注册多个URI方案。此外,多个应用可以处置URI方案。如果多个应用可以接受URI方案,则在一些情况下,启动器232可以打开对话框以要求用户选择应用。在其它情况下,如果多个应用可以接受URI方案,则启动器232可以启动可以在启动之前被选择的默认应用。
图4是用于在计算机之间移动信息的过程400的流程图。过程400可以被视为上文描述的过程的广义版本。过程400始于获取计算机屏幕或者显示器的数字图像(步骤402)时。该获取可以通过上文描述的机制,其中将第一用户设备瞄准第二用户设备的显示器,其中两个设备登录到相同用户的账户。
机器视觉技术被用来标识图像的可以相关的方面并且对代表图像的那些方面的参数编码(步骤404)。在与上文讨论的示例相似的示例中,方面可以包括图像的与拍摄的用于如下计算机的屏幕截图的取得的图像匹配的部分,该计算机是第一图像的目标。参数可以包括在第二或者目标设备的显示器上的与最高层应用对应的坐标和用于与应用通信的描述符。
参数用来标识应用和应用的状态(步骤406)。例如,应用名称可以用来联系应用,该应用可以比如通过返回当前与应用关联的URI的值来标识它自己的状态。
在另一示例中,机器视觉可以用来标识显示器上的字词,并且由此推断什么应用在图像中和该应用的状态。作为一个示例,可以对应用的标题栏或者浏览器应用中的地址栏执行机器视觉。同样,在显示器上的其它字词可以用来进一步指示应用的状态。作为一个示例,在地址栏中的文字指示应用是运行基于web的地图绘制应用的web浏览器时,显示器上的其它文字可以用来确定地图绘制应用涉及的地理区域。
提供用于使第二计算设备(与作为初始数据捕获目标的计算设备不同)在确定的状态中自动显示相关应用的数据(步骤408)。在上文讨论的主要示例中,可以通过让目标设备上的应用向如下另一部件提供它的状态信息来执行这样的步骤,该另一部件预备将向发起设备发送回的文字消息,其中文字消息还可以包括标识应用和状态的信息。在描述的其它示例中,在使用光学字符识别时,标识的文字可以由在发起设备上运行的应用组织。文字的组织可以比如产生可以用来向远程搜索引擎提交搜索查询的文字,或者以另一方式构造URI。例如,来自标题栏或者地址框中的文字的地图绘制应用的标识可以用来标识用于构建URL的域,并且在地图上的文字可以用来标识将向域提交的变元。
图5A至图5C示出从移动设备504(例如,智能电话)向台式计算机的显示器506上发布用户接口502。
在一些示例中,实施深度摄影原型以支持深度摄影和深度发布二者。在智能电话上使用JAVA来实施移动设备侧。在另一侧(例如,计算机侧)上,在膝上型计算机上用Python实施调度器和启动器。在Linux上使用Jabber来设置XMPP服务器。Jabber的默认配置对它可以处置的消息的大小具有限制。为了在消息中允许在系统中传送的内容的潜在的大的大小,禁用消息大小限制。除了该改变之外,未修改Jabber的代码。
在其它示例中,为了最小化应用开发员的用于支持深度摄影的工作,开发如下Java库,该库实施调度器、应用通信过程并且隐藏库内的WebSocket连接。库具有DeepShot类,该类具有一种用于应用注册它们本身以监听深度摄影请求的公共方法voidaddListener(Listener listener,String app_name,String[]accepted_uris)
在更多示例中,在调度器(例如,如参照图2B所示的调度器234)中实施默认响应器以处置其中目标应用不支持深度摄影的情况。此外,实施用于web浏览器的扩展以支持用于web应用的URL迁移并且也支持通过注入内容脚本的前摄内容提取。
参照图2B,如果目标应用(例如,在移动设备220A上的应用230A-230N之一)尚未向调度器(例如,调度器234)注册,则(例如,在调度器234中实施的)默认响应器可以在向目标应用答复时提供有用信息。在一些情况下,来自默认调度器的默认响应可以未如在正常响应的情况下那样由应用230A-230N直接打开,然而,目标是向移动设备(例如,移动设备220A)无缝迁移在计算设备(例如,台式计算机220B的显示器)上示出的信息。为了实现这一目标,计算设备的整个显示屏幕(例如,台式计算机220B的显示器)的屏幕截图与匹配区域的坐标一起被向移动设备220A传送。因此,用户可以看见台式计算机220B的显示器的图像的清楚版本而无可能由使用单独物理计算机以捕获屏幕的图像而在图片中引起的噪声和失真。用户可以摇动和缩放屏幕以看见未在原有图片中的更多细节或者其它区域。此外,在调度器234捕获屏幕截图时,调度器234也可以例如使用操作系统的可访问性API来检测可点击的URI和其它感兴趣的信息(例如,电话号码或者地址)。可以将形式为元数据的这一信息与屏幕截图一起传送。用户可以选择(使用在计算机设备上包括的输入设备)屏幕截图中的URL以启动浏览器或者可以选择屏幕截图中的电话号码以便直接拨叫号码。
为了支持web应用,将web调度器扩展或者web调度器创建为web浏览器扩展。web调度器可以具有三个主要功能。首先,web调度器可以充当第二级调度器,从而将来自第一级调度器的消息向浏览器中的适当网页寻路由并且向第二级调度器发送回答复消息。web调度器也可以向所有网页提供JavaScript调回功能“DeepShot.addListener(listener)”,从而如允许web开发员将他们的内部数据简单地挂钩到深度摄影。第二,web调度器可以是用于不支持深度摄影的所有web应用的默认响应器。如果web调度器从如下站点获得对寻求数据的请求,该站点未经由调回功能注册它本身,则web调度器可以向站点简单地返回URL作为默认响应。在地址栏上的URL可以映射到当前web应用的状态。然而,一些AJAX应用无这一属性或者隐藏它们的实际URI。幸运的是,web调度器的最后功能可以应对这一问题。第三,web调度器可以通过注入内容脚本从网页前摄地提取信息。作为浏览器扩展,web调度器可以能够向任何网页中注入任何内容。因此,即使原有web开发员可能尚未计划支持深度摄影,仍然可以向网页中注入调用“DeepShot.addListener”的一件JavaScript以前摄地提取它的内部信息。例如,地图绘制应用可以未在地址栏上示出指向地图的当前区域的URL。为了获得代表当前状态的实际URL,可以注入调用“document.getElementById(‘link’).href”的内容脚本以便获得在具有id“link”的DOM元素中存储的实际URL。利用这一脚本,用户可以使用深度摄影以打开在他们的计算机上显示的任何地图。
评价开发的系统以探索使用相机对监视器上的区域定位是否在速度和准确性方面可行。第一实验测试系统速度,并且第二实验测试图像匹配技术的准确性。
实验1
使用具有高分辨率1680x 1050监视器的MacBook Pro15”计算机作为目标设备,并且使用运行Android 2.2的Nexus One智能电话作为捕获设备。捕获设备由人保持于在从显示器的20cm至40cm之间的距离,并且偏航角度在±20度之间,从而使得可以通过取景器看见屏幕的大约1/3。
考察四个类型的目标应用(GOOGLE STREETVIEW照片、来自YELP.COM的文字、来自CNN.COM的几乎不具有信息的长篇文章和来自GOOGLE MAPS的地图),并且针对每个应用使用深度摄影来拍摄三个图片。过程涉及到:1)拍摄512x384图片;2)经由XMPP服务器向目标设备发送图片;3)一旦图片到达,则目标设备拍摄整个屏幕(1680x1050)的屏幕截图并且将它尺寸重设成840x525;4)目标设备从图片和屏幕截图提取SURF特征,并且继而使用上文描述的过程来匹配特征;5)系统组合由目标应用返回的信息(即,在这一实验中为URI)与匹配区域的缩略图,并且继而经由XMPP服务器向捕获设备发送回消息;6)一旦捕获设备接收答复,则它保存附着的缩略图并且使用适当应用来打开URL。
在共计十二个试验(用于四个应用的三个图片)中,整个过程的平均时间为7.74秒(SD 0.30秒),这是可接受的时间量。考察每个步骤,网络传输占用总时间的约50%,而其它处理时间在目标设备上花费34%并且在计算设备上花费16%。传输时间的持续时间依赖于在消息中附着一个图片和一个缩略图的过程以及消息向外部服务器的后续寻路由。因此,可以通过不传输图片并且不向第三方传递来减少传输时间。
实验2
使用屏幕的倾斜和偏航角度可调的MacBook Pro 15”计算机监视器。存在用于屏幕的偏航角度的四个设置:70°、90°、110°和130°。膝上型计算机示出GOOGLE CHROME全屏浏览器,该浏览器具有由文字和图像构成的受欢迎本地饭馆的网页(来自YELP.COM)。包括相机的Nexus One智能电话连结到与地面垂直的L方形标尺。相机的从膝上型计算机的表面到相机镜头的中心测量的高度在偏航角度为90°或者110°之时被固定为19cm而在偏航角度为70°或者130°之时被固定为14.5cm。这些高度设置允许相机在屏幕上聚焦于相同目标(即,饭馆的名称)周围。最后将电话设置于屏幕前面,而从屏幕轴到相机镜头测量的距离为从5cm至50cm。对于每个偏航角度,针对在5cm与50cm之间的每5cm拍摄五个图片共计200个图片。
上文描述的技术被用来匹配每个图片与膝上型计算机上的屏幕显示。如果匹配区域的中心与在屏幕上的预计区域重叠,则认为匹配成功。图6图示了关于偏航角度和在相机与屏幕之间的距离拍摄的多个试验图片的图形。图6示出了用于每个距离设置602的成功匹配数目,而每条指示用于四个偏航角度604a-604d的匹配总数。
结果表明如果相机与监视器平行并且在相机与监视器之间的距离在10cm与40cm之间的范围中,则改进匹配过程。这一范围可以覆盖如下小区域,该区域可以例如包括饭馆的名称及其基本信息。即使相机朝着或者背离监视器倾斜20度,相机到监视器的距离仍然可以约为30cm。
下文是多个信息共享场景或者用例。
场景1:带着信息走(从台式设备到移动设备)
这一类型的场景激发开发深度摄影。人们通常在工作地或者家里在台式计算机或者膝上型计算机上工作。在移向另一地点之前,他们可以在计算机上查找与该地点有关的信息。然而,人们很快遗忘事情。他们通常需要在纸条上写下信息或者在他们正在移动时在移动电话上再次查找相同信息。在这一种类的场景中,人们可以使用深度摄影来随身携带信息。例如,人们可以携带一张地图或者下一会议地点的信息,因此他们无需再次查找相同信息。
场景2:向台式设备共享在移动设备上生成的内容或者状态(移动设备到台式设备)
人们可以在移动设备上生成信息(例如,照片、联系人或者未完成的阅读)。人们可以使用特定软件以同步移动设备与台式设备。在一些情况下,可能需要线缆和全同步过程以便在大型显示器上显示单个照片或者在台式设备上打开已经在移动设备上打开的网页。深度发布可以是一种用于在移动设备与台式设备之间共享这一类型的信息的更不繁琐的方式。
场景3:使用移动设备作为临时存储装置(经由移动设备的台式设备到台式设备)
USB棒(USB闪存驱动)可以用来在计算机之中共享文件。人们可以保存他们需要作为文件共享的信息、向USB棒上复制文件,并且继而将USB棒带到另一计算机。在这一类型的场景中,深度摄影可以用来从在计算机(例如,台式计算机)上运行的应用向移动设备自动提取信息。可以将移动设备带到另一地点,并且继而用户可以用深度发布向另一计算机(例如,另一台式计算机)发布提取的信息。
场景4:将一个移动设备上的内容或者状态与另一移动设备共享(移动设备到移动设备)
可以在多个个人移动设备之间共享信息。此外,可以从一个人的移动设备向另一个人的移动设备共享信息。例如,碰撞(bumping)是用于连接两个移动设备的同步手势。虽然当前深度摄影框架不支持在多个用户的设备之间的通信,但是深度摄影和深度发布可以用来对属于用户的另一设备定位。此外,深度摄影和深度发布可以用来对将在多个用户之间共享的信息的区域定位。例如,用户可以使用他的或者她的设备用深度摄影拍摄在另一个人的移动设备上显示的联系人的图片,并且继而可以向用户的移动设备自动传送联系人信息。
场景5:继续视频游戏的玩游戏
这里讨论的技术可以用来比如通过长久运行的游戏活动提供单个玩家对视频游戏的连续玩游戏。当玩家在家里时,他可以在全特征游戏控制台上玩游戏。在他前往工作地时,他可以暂停玩游戏并且用智能电话拍摄他的电视屏幕的图片。控制台继而可以接收图像、确定它是相关接收者并且向智能电话发送游戏状态信息。用户继而可以在离去时在智能电话上恢复游戏、尽管分辨率更低并且可能有对玩游戏功能有某些附加限制。用户可以在他回家时执行逆过程。
图7示出可以与这里描述的技术一起使用的通用计算机设备700和通用移动计算机设备750的示例。计算设备700旨在于代表各种形式的数字计算机,比如膝上型计算机、台式计算机、工作站、个人数字助理、服务器、刀片服务器、主机和其它适当计算机。计算设备750旨在于代表各种形式的移动设备,比如个人数字助理、蜂窝电话、智能电话和其它相似计算设备。这里所示的部件、它们的连接和关系及其功能意味着仅为示例而并非意味着限制在本文中描述和/或要求保护的本发明的实现方式。
计算设备700包括处理器702、存储器704、存储设备706、连接到存储器704和高速扩展端口710的高速接口708以及连接到低速总线714和存储设备706的低速接口712。使用各种总线来互连并且可以在共同母板上或者以如适当的其它方式装配部件702、704、706、708、710和712中的每个部件。处理器702可以处理用于在计算设备700内执行的指令,这些指令包括存储器704中或者存储设备706上存储的用于在外部输入/输出设备(比如耦合到高速接口708的显示器716)上显示用于GUI的图形信息的指令。在其它实现方式中,多个处理器和/或多个总线可以如适当的那样与多个存储器和存储器类型一起使用。也可以连接多个计算设备700而每个设备提供必需操作的部分(例如,作为服务器组、成组刀片服务器或者多处理器系统)。
存储器704存储计算设备700内的信息。在一个实现方式中,存储器704是计算机可读介质。在一个实现方式中,存储器704是一个或者多个易失性存储器单元。在另一实现方式中,存储器704是一个或者多个非易失性存储器单元。
存储设备706能够提供用于计算设备700的海量存储装置。在一个实现方式中,存储设备706是计算机可读介质。在各种不同实现方式中,存储设备706可以是软盘设备、硬盘设备、光盘设备或者带设备、闪存或者其它相似固态存储器设备或者如下设备的阵列,这些设备包括存储区域网络或者其它配置中的设备。在一个实现方式中,在信息载体中有形地实现计算机程序产品。计算机程序产品包含在被执行时执行一种或者多种方法(比如上文描述的方法)的指令。信息载体是计算机或者机器可读介质,比如存储器704、存储设备706或者在处理器702上的存储器。
高速控制器708管理用于计算设备700的带宽密集操作,而低速控制器712管理更低带宽密集操作。这样的职责分配仅为示例。在一个实现方式中,高速控制器708耦合到存储器704、显示器716(例如,通过图形处理器或者加速器)并且耦合到可以接受各种扩展卡(未示出)的高速扩展端口710。在该实现方式中,低速控制器712耦合到存储设备706和低速扩展端口714。可以包括各种通信端口(例如,USB、蓝牙、以太网、无线以太网)的低速扩展端口可以例如通过网络适配器耦合到一个或者多个输入/输出设备,比如键盘、指点设备、扫描仪或者联网设备(比如交换机或者路由器)。
如图中所示,可以用多个不同形式实施计算设备700。例如,可以将它实施为标准服务器720或者多次实施于成组这样的服务器中。也可以将它实施为架式服务器系统724的部分。此外,可以在个人计算机(比如膝上型计算机722)中实施它。备选地,来自计算设备700的部件可以与移动设备(未示出)(比如设备750)中的其它部件组合。这样的设备中的每个设备可以包含计算设备700、750中的一个或者多个计算设备,并且整个系统可以由相互通信的多个计算设备700、750组成。
计算设备750包括处理器752、存储器764、输入/输出设备,比如显示器754、通信接口766和收发器768以及其它部件。设备750也可以具有用于提供附加存储装置的存储设备,比如微驱动或者其它设备。使用各种总线来互连部件750、752、764、754、766和768中的每个部件,并且可以在共同母板上或者以如适当的其它方式装配部件中的若干部件。
处理器752可以处理用于在计算设备750内执行的指令,这些指令包括存储器764中存储的指令。处理器也可以包括分离的模拟和数字处理器。处理器可以例如提供协调设备750的其它部件,比如控制用户接口、设备750运行的应用和设备750的无线通信。
处理器752可以通过控制接口758和耦合到显示器754的显示接口756与用户通信。显示器754可以例如是TFT LCD(薄膜晶体管液晶显示器)或者OLED(有机发光二极管)显示器或者其它适当显示器技术。显示器接口756可以包括用于驱动显示器754以向用户呈现图形和其它信息的适当电路装置。控制接口758可以从用户接收命令并且转换它们以用于向处理器752提交。此外,可以提供与处理器752通信的外部接口762以便实现设备750与其它设备的近区域通信。外部接口762可以例如在一些实现方式中提供有线通信或者在其它实现方式中提供无线通信,并且也可以使用多个接口。
存储器764存储计算设备750内的信息。可以将存储器764实施为一种或者多种计算机可读介质、一个或者多个易失性存储器单元或者一个或者多个非易失性存储器单元中的一项或者多项。也可以提供扩展存储器774并且该扩展存储器可以通过可以例如包括SIMM(单列直插存储器模块)卡接口的扩展接口772连接到设备750。这样的扩展存储器774可以提供用于设备750的额外存储空间或者也可以存储用于设备750的应用或者其它信息。具体而言,扩展存储器774可以包括用于实现或者补充上文描述的过程的指令并且也可以包括安全信息。因此,例如,可以提供扩展存储器774作为用于设备750的安全模块并且可以用允许安全使用设备750的指令对扩展存储器774编程。此外,可以经由SIMM卡将安全应用与附加信息一起提供,比如以不可黑客的方式将标识信息放置于SIMM卡上。
如下文讨论的那样,存储器可以例如包括闪存和/或NVRAM存储器。在一个实现方式中,在信息载体中有形地实现计算机程序产品。计算机程序产品包含在被执行时执行一种或者多种方法(、比如上文描述的方法)的指令。信息载体是计算机或者机器可读介质,比如存储器764、扩展存储器774、在处理器752上的存储器或者可以例如通过收发器768或者外部接口762接收的传播的信号。
设备750可以通过可以在必要时可以包括数字信号处理电路装置的通信接口766无线地通信。通信接口766可以在各种模式或者协议(比如GSM语音呼叫、SMS、EMS或者MMS消息接发、CDMA、TDMA、PDC、WCDMA、CDMA2000或者GPRS以及其它模式或者协议之下)提供通信。可以例如通过射频收发器768发生这样的通信。此外,可以比如使用蓝牙、WiFi或者其它这样的收发器(未示出)来发生短程通信。此外,GPS(全球定位系统)接收器模块770可以向设备750提供附加的与导航和位置有关的无线数据,该数据可以如适当的那样由在设备750上运行的应用使用。
设备750也可以使用音频编码解码器760来可听地通信,该编码解码器可以从用户接收口述信息并且将它转换成可用数字信息。音频编码解码器760可以类似地比如通过例如在设备750的头戴式受话器中的扬声器生成用于用户的可听声音。这样的声音可以包括来自语音电话呼叫的声音、可以包括记录的声音(例如,语音消息、音乐文件等)并且也可以包括由在设备750上操作的应用生成的声音。
如图中所示,可以用多个不同形式实施计算设备750。例如,可以将它实施为蜂窝电话780。也可以将它实施为智能电话782、个人数字助理或者其它相似移动设备的部分。
可以在数字电子电路装置、集成电路装置、特殊设计的ASIC(专用集成电路)、计算机硬件、固件、软件和/或其组合中实现这里描述的系统和技术的各种实现方式。这些各种实现方式可以包括在如下可编程系统上可执行和/或可解译的一个或者多个计算机程序中的实现方式,该可编程系统包括可以是特殊或者通用的至少一个可编程处理器、至少一个输入设备和至少一个输出设备,该可编程处理器被耦合用于从存储系统接收数据和指令以及向存储系统传输数据和指令。
这些计算机程序(也被称为程序、软件、软件应用或者代码)包括用于可编程处理器的机器指令并且可以用高级过程和/或面向对象编程语言和/或用汇编/机器语言来实施。如这里所用,术语“机器可读介质”、“计算机可读介质”指代用来向可编程处理器提供机器指令和/或数据的任何计算机程序产品、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(PLD)),该计算机程序产品、装置和/或设备包括接收机器指令作为机器可读信号的机器可读介质。术语“机器可读信号”指代用来向可编程处理器提供机器指令和/或数据的任何信号。
为了提供与用户的交互,可以在如下计算机上实施这里描述的系统和技术,该计算机具有用于向用户显示信息的显示设备(例如CRT(阴极射线管)或者LCD(液晶显示器)监视器)以及用户可以用来向计算机提供输入的键盘和指点设备(例如,鼠标或者跟踪球)。其它种类的设备也可以用来提供与用户的交互;例如向用户提供的反馈可以是任何形式的感官反馈(例如,视觉反馈、听觉反馈或者触觉反馈);并且可以用包括声音、话音或者触觉输入的任何形式接收来自用户的输入。
可以在如下计算系统中实施这里描述的系统和技术,该计算系统包括后端部件(例如,作为数据服务器)或者包括中间件部件(例如,应用服务器)或者包括前端部件(例如,具有如下图形用户接口或者Web浏览器的客户端计算机,用户可以通过该图形用户接口或者Web浏览器来与这里描述的系统和技术的实现方式交互)或者这样的后端、中间件或者前端部件的任何组合。系统的部件可以由任何数字数据通信形式或者介质(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”)、广域网(“WAN”)和因特网。
计算系统可以包括客户端和服务器。客户端和服务器一般相互远离并且通常通过通信网络交互。借助在相应计算机上运行的并且相互具有客户端-服务器关系的计算机程序产生客户端和服务器关系。
已经描述许多实现方式。然而,将理解,可以进行各种修改而不脱离公开内容的精神实质和范围。例如,使用上文所示流程的各种形式而重新排序、添加或者去除步骤。另外,虽然已经描述认证系统和方法的若干应用,但是应当认识到,设想许多其它应用。因而,其它实现方式在所附权利要求的范围内。