Cloud Speech-to-Text(STT)
识别方式 | 音频格式 | 请求方式 | 解释 |
---|---|---|---|
同步识别 | 短音频(不超过1分钟) | REST和gRPC | 全部处理完之后返回结果 |
异步识别 | 长音频(不超过480分钟) | REST和gRPC | 定期轮询,返回识别结果 |
流式识别 | 实时音频 | gRPC | 从麦克风采集实时音频,边讲话边返回识别结果 |
- Speech To Text API接入
- Speech To Text Android 示例:Demo运行成功,按照文档配一下凭据即可
- SpeechRecognitionClient:使用Java客户端SDK方式调用,封装了grpc类。使用简单,但是未对Android进行优化,例如没有使用java-lite的protobuf库
- Speech:使用轻量的protobuf,需要自己定义protobuf类
安全性
TvSpeechService采用的是speech api,使用服务账号json凭据生成AccessToken进行请求
- 最早直接将json凭据放到raw中
- 然后将json凭据放到系统中,进行DES3加密,DES3密钥使用Java常量存储
- 再将DES3密钥放到so库中,增加破解难度
- v2将AccessToken生成放到SDK中,SDK内部请求服务端,服务端生成AccessToken返回(Google推荐做法)
Google Assistant App
是Google开发的语音助手App,可以调起其他应用、显示其他应用的小部件或者Slice页面、百科搜索、通过Google Home控制智能家居等。
依赖gms运行。
Google Assistant功能
- App Action:应用定制Action,Google Assistant可以快捷跳转自己的应用或者执行动作,提高应用曝光率。可以结合Slice使用。
- 智能家居:传递智能家居Intent,定制特殊指令。文档从Assistant迁移到Google Home开发者中心。
- Web Action:网页定制Action,Google Assistant可以发现并显示自己的网页内容。
- Media Action:媒体资源定制Action,Google Assistant可以发现并播放内容。
- Conversational Action:支持在控制台定制对话。2023年6月13日将被移除。
实现对话操作有两种方式
- Dialogflow对话流
- Google Assistant(旧版):旧版Google Assistant集成了Dialogflow,2023年将被移除,不再集成Dialogflow,改为使用内置的对话构建器。参考
Google Assistant API和Speech-to-Text API
Speech-to-Text API:服务接口为
speech.googleapis.com
,只提供了语音转文字功能。- 价格:$0.004/15 秒
Google Assistant API:服务接口为
embeddedassistant.googleapis.com
,让设备具备类似Google Home的功能,智能音响设备集成SDK,发送语音到云端,云端识别成设备指令后返回。智能音响再去控制其他设备,或者控制自身。- 未标注价格,不过有配额限制,并且声明无法商用
个人理解:GoogleAssistant服务内部应该是依赖了Speech-to-Text服务,并且还加入了一些自己的功能。
正常客户端直接请求speech服务,统计speech的配额和流量。assistant服务帮我们转发了请求,speech的配额和流量由assistant承担。
Google Assistant接入
参考Google Assistant Service和sample-googleassistant示例,大致流程和接入Speech-to-Text类似
语义识别暂未实验
- Action Console中创建项目,Google Cloud中会同步创建项目
- Google Cloud中启用Google Assistant API和OAuth授权功能。(根据需要创建结算账号,关联项目,定期结算)
- 下载sample-googleassistant:该项目基于Android嵌入式树莓派平台,用到了嵌入式平台的类库和控件,在手机上无法直接运行。例如通过Gpio输出电信号,控制IoT设备。
- 修改为Android移动平台代码、去掉gradle依赖
- 控制台下载凭据:
- 样例中使用
google-oauthlib-tool
工具生成OAuth凭据,试了一下没成功,不知道为什么提示400 - 这里使用服务账号生成凭据:【凭据->服务账号->密钥->添加密钥】,下载私钥的json文件
- 样例中使用
- 根据私钥生成Access Token进行请求,或者将私钥传给SDK进行请求:
- 保存json私钥到raw目录(考虑安全性,不应该放到工程中,而是放到服务器上,这里只是作为示例)
- 样例中使用
UserCredentials
读取私钥,需要改为GoogleCredentials
- 编译运行APP:能够识别语音转文字,但是由于没有注册嵌入式设备,无法进行具体的行为
智能家居相关
Home Graph:是一个存储家庭及其设备信息的数据库。本质是家庭的逻辑地图。智能家居的所有操作都依赖Home Graph
- 结构Structure:每个房屋对应一个结构
- 管理员Managers:每个结构至少包含一名管理员,可以与其他用户共享结构
- 标签Labels:标识结构,例如John‘s House
- 房间Rooms:结构包含房间
- 设备Devices:结构包含设备
- 房间:一个结构包含多个房间
- 标签:标识房间,例如Master Bedroom
- 设备:房间包含设备
- 设备:一个设备必须属于一个结构,最多可以属于一个房间。
- 标签:标识设备,例如Bedroom Lamp
- 类型Type:例如灯、摄像头、空调等
- 特性Traits:即功能,例如亮度、颜色、开关、模式等。
- 属性Attributes:静态的设备属性,例如模式支持设置哪些选项,颜色支持设置多大范围等。
- 状态State:动态变化的设备状态
- 命令Command:下发控制指令
设备特性传输方式:
- 查询:可读,queryOnlyXXX属性(默认为false)表示只支持被查询状态
- 控制:可写,commandOnlyXXX属性(默认为false)表示只支持被控制
- 可查询可控制:可读写