`
zuoshu
  • 浏览: 196062 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

google streaming voice recognition分析

 
阅读更多

chrome用到了google的语音识别webservice,下面对该webservice使用原理,即voice recognition和chrome的语音识别实现原理进行分析。详见chrome源码
google语音识别有两个webservice,一种叫做google_one_shot_remote_engine,一种叫做google_streaming_remote_engine,简称为oneshot和streaming。如果进行http抓包,可以发现,one_shot连接的是一个端口为80的地址,streaming连接的是一个地址的443端口。
先说oneshot,这个方式现在已经被解析的差不多了。该方式是连接http://www.google.com/speech-api/v1/recognize?lang=en-us&client=chromium地址,将录好的语音数据post到这个地址,然后读取返回结果,网上资料很多,随便贴一篇。 http://blog.csdn.net/dlangu0393/article/details/7214728 。
但是,认真研究发现,android上的voice recognition和chrome并不是用的这种方式。在voice recognition或者chrome做语音识别的时候,无论说多长的句子,马上就会有返回结果,0.5秒以内。如果用oneshot的方式,会有一个等待时间,这个等待的时间是线性的,句子越长,等待时间越长。而voice recognition是常量时间,无论一句两句三句都是0.5秒内返回,这里就要讲到streaming的语音识别方式了。
streaming的基本原理是用两个http连接连服务器,叫做upstream和downstream,分别上传和下载数据,实现的关键还是在服务器,streaming用的webservice在接受完数据后马上能返回结果。接下来说一些细节。
1.upstream连接地址
https://www.google.com/speech-api/full-duplex/v1/up?key=AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY&pair=xxx&output=pb&lang=en-us&pFilter=0&maxAlternatives=5&client=chromium&xhw=xxx&continuous&interim
参数说明
key是google api key,可以申请google的开发者key,也可以用chrome里面自带的key"AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY"
pair是客户端根据时间随机生成的一个8byte的配对码,16进制表示。每次语音识别的过程中,downstream使用和upstream相同的配对码
xhw是硬件信息,可以省略
2.downstream连接地址
https://www.google.com/speech-api/full-duplex/v1/down?key=AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY& pair=xxx&output=pb
这里的key使用AIzaSyBHDrl33hwRp4rMQY0ziRbj8K9LPA6vUCY即可,pair使用和1中pair相同的值
3.发送数据
upstream采用POST方式连接服务器,将音频文件编码的方式设置成content-type,比如conn.setRequestProperty("Content-Type","audio/x-flac;rate = 16000").之后不断的将编码好的音频数据写入连接即可,upstream只需要写数据,不需要从连接读取数据
4.客户端怎样告诉服务器数据已经写完了?
源码中写道
// The encoder requires a non-empty final buffer. So we encode a packet
// of silence in case encoder had no data already.
即客户端在所有数据都发送完后发送一个silence packet即可通知服务器数据发送完了。什么是silence packet?packet是声音数据的一个单位,是一个byte数组,全为0即表示silence,用一个byte[100]其中每个数据都为0即可表示silence packet。
5.接受数据
downstream采用GET方式连接服务器,等upstream发送了silence packet之后即可读取到数据。返回数据的格式有点特殊,返回的不是json的格式,而需要按照byte来解析。首先,返回的最开头会有4byte0,这个表示客户端连接成功。接下来的数据以chunk为单位,每次的返回有0个或者多个chunk,每个chunk的开头有4byte用来表示chunk数据部分的长度,即|4byte len|chunk data|4byte len|chunk data|。data部分是string的byte值。
原理部分基本上就这些,稍后放demo源码。

 

 转载请注明出处

分享到:
评论
1 楼 mistbow 2013-01-25  
您好 感谢分享

求demo源码

相关推荐

    spark Streaming和structed streaming分析

    通过阅读和分析源代码,开发者可以更透彻地理解其内部机制和模块划分。Coolplay Spark是一个专注于此类内容的社区和资源集合,提供了大量关于Spark Streaming和Structured Streaming的源码解析、类库、代码和技术...

    Face Recognition(face_recognition) Using Hadoop Streaming API

    Face Recognition(face_recognition) Using Hadoop Streaming API Face Recognition(face_recognition) Using Hadoop Streaming API

    SparkStreaming流式日志过滤与分析

    (1)利用SparkStreaming从文件目录读入日志信息,日志内容包含: ”日志级别、函数名、日志内容“ 三个字段,字段之间以空格拆分。请看数据源的文件。 (2)对读入都日志信息流进行指定筛选出日志级别为error或warn...

    Google Voice over BLE spec 1.0 [external].pdf

    《Google Voice over BLE spec 1.0》是Google发布的一份技术规范文档,详细阐述了如何在蓝牙低功耗(BLE)设备上实现语音输入功能,特别是与Android TV设备的集成。该规范版本为1.0,由Google的员工sujithrk、skill...

    Darwin streaming server 分析文档

    这个"Darwin streaming server 分析文档"提供了对DSS的深入理解,是研究该服务器功能和工作原理的重要资源。 首先,文档可能会涵盖DSS的基础架构。这包括服务器的核心组件、模块化设计以及如何通过配置文件定制...

    Flink,Storm,Spark Streaming三种流框架的对比分析

    Flink、Storm、Spark Streaming三种流框架的对比分析 Flink架构及特性分析 Flink是一个原生的流处理系统,提供高级的API。Flink也提供API来像Spark一样进行批处理,但两者处理的基础是完全不同的。Flink把批处理...

    使用Flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【大数据】

    flume+Logstash+Kafka+Spark Streaming进行实时日志处理分析【大数据】

    基于kafka和spark streaming和hbase的日志统计分析系统.zip

    基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的日志统计分析系统.zip基于kafka和spark streaming和hbase的...

    java基于spark streaming和kafka,hbase的日志统计分析系统.rar

    本项目"java基于spark streaming和kafka,hbase的日志统计分析系统"提供了一个高效的数据处理框架,用于实时处理大规模日志数据。以下是关于这个系统的详细介绍,以及涉及的技术栈的核心知识点。 1. **Spark ...

    spark streaming实时网站分析项目实战.rar

    数据分析:见项目 功能一: 统计到今天为止视频的访问量 yyyyMMdd courseId 使用数据库来进行存储我们的统计结果 sparkstreaming把统计结果写入到数据库里面 hbase表设计:create 'aqy_video_clickcount','info...

    29:Spark2.3.x StructuredStreaming项目实时分析.rar

    本项目实时分析旨在深入理解和实践这一强大的功能,下面我们将详细探讨Structured Streaming的相关知识点。 1. **Structured Streaming的基本概念**: - Structured Streaming是Spark SQL的一部分,它扩展了批处理...

    毕业设计:基于Spark streaming的系统日志分析系统.zip

    【标题】:“毕业设计:基于Spark streaming的系统日志分析系统” 这个毕业设计项目的核心是构建一个使用Apache Spark Streaming的实时系统日志分析系统。Apache Spark Streaming是Spark框架的一个扩展,它允许处理...

    基于Spark Core, Spark SQL 和 Spark Streaming的电商分析系统对电商网站的日志进行离线和实时分析文档+源码+优秀项目+全部资料.zip

    基于Spark Core, Spark SQL 和 Spark Streaming的电商分析系统对电商网站的日志进行离线和实时分析文档+源码+优秀项目+全部资料.zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95...

    Flume对接Spark Streaming的相关jar包

    本压缩包中的 jar 包是为了解决 Flume 与 Spark Streaming 的集成问题,确保数据能够从 Flume 无缝流转到 Spark Streaming 进行实时分析。 Flume 是 Apache Hadoop 生态系统中的一个分布式、可靠且可用的服务,它...

    spark之sparkStreaming 理解

    此外,Spark Streaming还能与其他Spark模块(如Spark SQL、MLlib、GraphX等)紧密结合,提供更丰富的数据分析能力。 ### Spark Streaming工作原理 #### 四、工作流程 1. **实时数据接收**:Spark Streaming接收...

    Spark 实践-基于 Spark Streaming 的实时日志分析系统+源代码+文档说明

    1、资源内容:Spark 实践——基于 Spark Streaming 的实时日志分析系统+源代码+文档说明 2、代码特点:内含运行结果,不会运行可私信,参数化编程、参数可方便更改、代码编程思路清晰、注释明细,都经过测试运行成功...

    Darwin_Streaming_Server

    ### Darwin Streaming Server 配置与部署详解 #### 一、概述 Darwin Streaming Server是一款功能强大的开源流媒体服务器,由Apple公司开发。它支持多种流协议,包括实时传输协议/实时流协议(RTP/RTSP)、MPEG-4...

    hadoop-streaming-2.8.0_jar_2.8.0_hadoop_streaming_

    在实际应用中,Hadoop Streaming 可以处理大量非结构化数据,例如日志分析、网页爬虫输出、社交网络数据等。用户可以通过编写简单的脚本来实现复杂的处理逻辑,而无需深入理解Java编程。例如,Python脚本可以用于...

Global site tag (gtag.js) - Google Analytics