一种全程语音实现方法及系统与流程

文档序号:12368754阅读:335来源:国知局
一种全程语音实现方法及系统与流程

本发明涉及安卓语音应用领域,尤其涉及一种全程语音实现方法及系统。



背景技术:

现有技术中,全程语音交互要求语音助手获取当前用户正在交互的应用和界面信息,并且还需获取应用界面中所显示的信息,以便进行语音识别和语义理解时,并优先命中当前界面上的功能,并实现语音调用。语点将上述应用和界面等信息定义为个性化场景信息。个性化场景信息包含:场景ID和动态数据。场景ID是指每个需要支持全程语音交互的应用在每个不同的场景界面下所具有的唯一的场景ID,通过该场景ID可在语点中独立定义其可能的功能组合(如同时支持语音选集和语音播放控制功能等)。动态数据是指应用界面提供辅助的动态信息(如在影视检索列表中各个影视名字,通过动态检索得到)。

现有技术中的全程语音交互方案,其原理如下:

启动语音交互时,语点以Broadcast(广播)消息方式通知应用程序,告知当前应用程序开始提交场景信息;如果应用程序如果处于前台显示,则通过startservice(启动服务)方式将当前的场景信息提交给语点;语音识别时将结合场景信息,优先命中场景中的功能,语音助手可通过实现约定的startActivity(启动事件)、startService(启动服务)、sendBroadcast(发送广播)三种方式来调用应用程序,应用程序收到调用指令后,完成用户所要的功能。

上述现有技术的方案,其不足之处在于,所有需要响应语音指令的应用程序,都需要与语音助手对接适配,所以工作量大,可移植和可维护性不佳,所以现有技术中的全程语音方案灵活性差、适配性不高、通用性差。

因此,现有技术还有待于改进和发展。



技术实现要素:

鉴于上述现有技术的不足,本发明的目的在于提供一种全程语音实现方法及系统,旨在解决现有技术中的全程语音方案灵活性差、适配性不高、通用性差等问题。

本发明的技术方案如下:

一种全程语音实现方法,其中,包括:

步骤A、启动应用程序时打开一个客户端socket,用来连接全程语音服务端socket;

步骤B、当应用程序切换到前台时,通过反射机制将应用程序的控件节点信息提交给全程语音服务端,全程语音服务端记录当前处于前台的应用程序;

步骤C、当全程语音服务端接收到语音信息后,对所述语音信息进行解析,并通过socket方式向应用程序发送所解析的语义信息;

步骤D、应用程序接收到全程语音服务端发送过来的语义信息后,调用相应的控件响应函数,进行相应的响应操作。

所述的全程语音实现方法,其中,所述步骤C具体包括:

步骤C1、当全程语音服务端接收到语音信息后,进行语义解析;

步骤C2、判断语义解析出的语义信息是否与应用程序提交的资料相匹配,若是则进入步骤C3;

步骤C3、通过socket方式向应用程序发送所解析的语义信息。

所述的全程语音实现方法,其中,所述步骤A还包括:

每次启动应用程序时启动一个线程,用来循环等待全程语音服务端发送过来的语义信息,并根据所接收的语义信息做相应的响应操作。

所述的全程语音实现方法,其中,所述步骤A之前还包括:

步骤A0、预先为应用程序的UI控件添加注解。

所述的全程语音实现方法,其中,所述步骤B具体包括:

B1、获取切换到前台的应用程序的根节点;

B2、获取到所述根节点之后,通过反射的方法,获取相应的类名,然后遍历所述根节点;

B3、遍历所述根节点后,根据所述注解获取所述应用程序的控件节点信息。

一种全程语音实现系统,其中,包括:

socket连接模块,用于启动应用程序时打开一个客户端socket,用来连接全程语音服务端socket;

记录模块,用于当应用程序切换到前台时,通过反射机制将应用程序的控件节点信息提交给全程语音服务端,全程语音服务端记录当前处于前台的应用程序;

语音发送模块,用于当全程语音服务端接收到语音信息后,对所述语音信息进行解析,并通过socket方式向应用程序发送所解析的语义信息;

操作响应模块,用于应用程序接收到全程语音服务端发送过来的语义信息后,调用相应的控件响应函数,进行相应的响应操作。

所述的全程语音实现系统,其中,所述语音发送模块具体包括:

语义解析单元,用于当全程语音服务端接收到语音信息后,进行语义解析;

语义匹配单元,用于判断语义解析出的语义信息是否与应用程序提交的资料相匹配,若是则进入语义发送单元;

语义发送单元,用于通过socket方式向应用程序发送所解析的语义信息。

所述的全程语音实现系统,其中,所述socket连接模块还包括:

线程启动单元,用于每次启动应用程序时启动一个线程,用来循环等待全程语音服务端发送过来的语义信息,并根据所接收的语义信息做相应的响应操作。

所述的全程语音实现系统,其中,还包括:

注解添加模块,用于预先为应用程序的UI控件添加注解。

所述的全程语音实现系统,其中,所述记录模块具体包括:

根节点获取单元,用于获取切换到前台的应用程序的根节点;

根节点遍历单元,用于获取到所述根节点之后,通过反射的方法,获取相应的类名,然后遍历所述根节点;

控件节点信息获取单元,用于遍历所述根节点后,根据所述注解获取所述应用程序的控件节点信息。

有益效果:通过本发明所提供的全程语音实现方法及系统,第三方开发者无需了解全程语音的要求,只要将开发的应用安装到支持全程语音的系统中,即可实现对全程语音的支持,其具有灵活性好、适配性高、通用性好的优点。

附图说明

图1为本发明一种全程语音实现方法较佳实施例的流程图。

图2为图1所示方法中步骤S103的具体流程图。

图3为本发明一种全程语音实现系统较佳实施例的结构框图。

图4为图3所示系统中语音发送模块的具体结构框图。

具体实施方式

本发明提供一种全程语音实现方法及系统,为使本发明的目的、技术方案及效果更加清楚、明确,以下对本发明进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。

请参阅图1,图1为本发明一种全程语音实现方法较佳实施例的流程图,如图所示,其包括:

步骤S101、启动应用程序时打开一个客户端socket,用来连接全程语音服务端socket;

步骤S102、当应用程序切换到前台时,通过反射机制将应用程序的控件节点信息提交给全程语音服务端,全程语音服务端记录当前处于前台的应用程序;

步骤S103、当全程语音服务端接收到语音信息后,通过socket方式向应用程序发送语音信息;

步骤S104、应用程序接收到全程语音服务端发送过来的语音信息后,调用相应的控件响应函数,进行相应的响应操作。

由于安卓系统中的应用,绝大部分都是基于安卓系统中的控件开发,控件的组织结构在系统中都是按照树状结构组织,所以可获取每个应用中的控件属性信息并对其操作,即可实现通过语音对其操控。

具体来说,在所述步骤S101中,修改安卓系统的源代码,具体是定位到安卓系统中各个应用程序的启动入口部分,也就是修改应用程序每次启动时都要执行的代码部分,通过本步骤的修改,其实现两个功能,一个功能是每次启动应用程序时打开一个相应的客户端socket,用来连接全程语音服务端socket,并实现二者的socket连接;另外一个功能则是启动一个线程,循环等待全程语音服务端发送过来的语义信息,并根据所接收的语义信息做相应的响应操作。

在所述步骤S102中,在当应用程序切换到前台时,可通过反射机制获取应用程序的控件节点信息,并提交给全程语音服务端,全程语音服务端记录当前处于前台的应用程序。

在安卓系统中,每个应用的根节点不是PhoneWindow$Decorview,而是rootviewimpel,每个安卓应用Activity组件都是被PhoneWindow$Decorview 与rootviewimpel的节点串联起来,并组织成一个树型结构,并被WindowMangerImpl统一管理,本发明中获取到rootviewimpel这个根节点之后,可通过反射的方法,将获取相应的类名,如view.getclass().getName()。然后遍历这个根节点上的所有子节点,就可以获取到子节点相关信息。

但此时尚未获取到各个节点的属性信息,例如子节点(也就是应用控件)的ID、长宽高等信息,是否响应按键等操作。为了解决上述问题,本发明中在安卓系统框架中的显示部分,也就是view等相关代码中,加上注解,即预先为应用程序的UI控件添加注解。

也就是说,在步骤S101之前,还包括:预先为应用程序的UI控件添加注解。这样后续即可通过发射机制读取UI控件的属性信息。这样后续在有语音信息输入的时候,即可根据解析的语音指令,使相应的UI控件得到响应。

另外,所述步骤102具体包括:

S201、获取切换到前台的应用程序的根节点;

S202、获取到所述根节点之后,通过反射的方法,获取相应的类名,然后遍历所述根节点;

S203、遍历所述根节点后,根据所述注解获取所述应用程序的控件节点信息。

其中,反射机制是应用在JAVA上、运行时加载、探知、使用编译期间完全未知的类。换句话说,JAVA程序可以加载一个运行时才得知名称的类,并获悉其完整构造,并生成其对象实体、或对其fields(字段)设值、或唤起其methods(方法)。

在步骤S103中,在全程语音服务端接收到语音信息后,对其进行解析,并通过前述的socket连接方式向应用程序发送所解析的语义信息。

具体来说,如图2所示,所述步骤S103具体包括:

步骤S301、当全程语音服务端接收到语音信息后,进行语义解析;

步骤S302、判断语义解析出的语义信息是否与应用程序提交的资料相匹配,若是则进入步骤S303;

步骤S303、通过socket方式向应用程序发送所解析的语义信息。

先对接收到的语音信息进行语义解析,判断语义解析出的语义信息与应用程序提交的资料是否匹配,如果不匹配可结束流程,如果匹配,则说明是正确的语音指令,可将对应的语义信息通过建立的socket连接发送给应用程序。其中提交的资料即指之前应用程序提交给全程语音服务端的控件节点信息。

在所述步骤S104中,应用程序通过在步骤S101建立的线程,循环接收全程语音服务端发送过来的语义信息,然后调用相应的控件响应函数,进行相应的响应操作即可。

采用本发明的语音实现方案,第三方开发者无需了解全程语音的概念,只要将开发的应用程序安装到支持全程语音的系统中,即可实现对全程语音的支持,实现了更广泛的通用性,灵活性更高,具有较高的适配性。

基于上述方法,本发明还提供一种全程语音实现系统较佳实施例,如图3所示,其包括:

socket连接模块100,用于启动应用程序时打开一个客户端socket,用来连接全程语音服务端socket;

记录模块200,用于当应用程序切换到前台时,通过反射机制将应用程序的控件节点信息提交给全程语音服务端,全程语音服务端记录当前处于前台的应用程序;

语音发送模块300,用于当全程语音服务端接收到语音信息后,对所述语音信息进行解析,并通过socket方式向应用程序发送所解析的语义信息;

操作响应模块400,用于应用程序接收到全程语音服务端发送过来的语义信息后,调用相应的控件响应函数,进行相应的响应操作。

进一步,如图4所示,所述语音发送模块300具体包括:

语义解析单元310,用于当全程语音服务端接收到语音信息后,进行语义解析;

语义匹配单元320,用于判断语义解析出的语义信息是否与应用程序提交的资料相匹配,若是则进入语义发送单元;

语义发送单元330,用于通过socket方式向应用程序发送所解析的语义信息。

进一步,所述socket连接模块还包括:

线程启动单元,用于每次启动应用程序时启动一个线程,用来循环等待全程语音服务端发送过来的语义信息,并根据所接收的语义信息做相应的响应操作。

进一步,所述系统还包括:

注解添加模块,用于预先为应用程序的UI控件添加注解,所述注解包括控件响应函数和控件属性信息。

所述记录模块200具体包括:

根节点获取单元,用于获取切换到前台的应用程序的根节点;

根节点遍历单元,用于获取到所述根节点之后,通过反射的方法,获取相应的类名,然后遍历所述根节点;

控件节点信息获取单元,用于遍历所述根节点后,根据所述注解获取所述应用程序的控件节点信息。

关于上述模块单元的技术细节在前面的方法中已有详述,故不再赘述。

综上所述,通过本发明所提供的全程语音实现方法及系统,第三方开发者无需了解全程语音的要求,只要将开发的应用安装到支持全程语音的系统中,即可实现对全程语音的支持,其具有灵活性好、适配性高、通用性好的优点。

应当理解的是,本发明的应用不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1