0%

Google语音服务

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进行请求

  1. 最早直接将json凭据放到raw中
  2. 然后将json凭据放到系统中,进行DES3加密,DES3密钥使用Java常量存储
  3. 再将DES3密钥放到so库中,增加破解难度
  4. 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日将被移除。

实现对话操作有两种方式

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 Servicesample-googleassistant示例,大致流程和接入Speech-to-Text类似

语义识别暂未实验

  1. Action Console中创建项目,Google Cloud中会同步创建项目
  2. Google Cloud中启用Google Assistant API和OAuth授权功能。(根据需要创建结算账号,关联项目,定期结算)
  3. 下载sample-googleassistant:该项目基于Android嵌入式树莓派平台,用到了嵌入式平台的类库和控件,在手机上无法直接运行。例如通过Gpio输出电信号,控制IoT设备。
  4. 修改为Android移动平台代码、去掉gradle依赖
  5. 控制台下载凭据:
    1. 样例中使用google-oauthlib-tool工具生成OAuth凭据,试了一下没成功,不知道为什么提示400
    2. 这里使用服务账号生成凭据:【凭据->服务账号->密钥->添加密钥】,下载私钥的json文件
  6. 根据私钥生成Access Token进行请求,或者将私钥传给SDK进行请求:
    1. 保存json私钥到raw目录(考虑安全性,不应该放到工程中,而是放到服务器上,这里只是作为示例)
    2. 样例中使用UserCredentials读取私钥,需要改为GoogleCredentials
  7. 编译运行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)表示只支持被控制
  • 可查询可控制:可读写

欢迎关注我的其它发布渠道