2016-10-14 12:34:43 mydear_11000 阅读数 8177
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

语音识别项目:

http://www.oschina.net/project/tag/203/tts-speech

 

sf.net

 

http://www.codesoso.net/Search?q=%D3%EF%D2%F4%CA%B6%B1%F0&l=c

http://search.codesoso.com/Search?q=%E8%AF%AD%E9%9F%B3%E8%AF%86%E5%88%AB

http://simon-listens.blogspot.com/2012/12/simon-040.html
http://cmusphinx.sourceforge.net/wiki/
http://member.voicecloud.cn/index.php/default/register
最后这个。。。应该不是 
 
 
這裏有許多 语音识别系统 其中部分是開源的
There are currently several speech recognition software packages for Linux, some of them being open-source and others proprietary.
http://en.wikipedia.org/wiki/Speech_rec ... n_in_Linux

http://www.pudn.com/downloads630/sourcecode/speech/detail2559966.html

 

Speech SDK 5.1 识别不太准确

 

Jasper:开源的语音控制系统

文/文:周骏挺    

两位来自普林斯顿大学的本科生Shubhro Saha(左)和Charles Marsh,利用业余时间开发了一个名叫Jasper的语音控制项目

“明天早上8 点叫醒我”,“帮我打电话给老妈”,“提醒我星期五下午公司要开会”……4 年前Siri发布时,业界普遍还对这个技术的成熟度以及实用性保持质疑的态度。但今天除了Siri之外,在手机上打开百度地图、大众点评或者微信,语音搜 索以及输入几乎已成主流标配。加之2012 年Google发布Google Now,以及今年不久前微软发布的用于Windows Phone 8.1 的语音助手Cortana,现在看来Siri更像掀起了又一场智能语音的技术革新。
从2013 年夏天开始,两位来自普林斯顿大学的本科生Charles Marsh和Shubhro Saha,利用业余时间开发了一个名叫Jasper的语音控制项目。
比 起为移动设备而生的Siri和Cortana,Jasper则是为居家或者工作室而生的定点智能语音系统。它运行在“树莓派”B型计算机 (Raspberry Pi Module B)上,这是一款由英国开发,只有信用卡大小的低价单板机计算机,一方面连接着麦克风与扬声器用于与用户互动,另一方面连接着网络。摒弃了关机或者开机的 传统概念,Jasper被设计成一个永远在线的系统,你能够随时通过语音呼唤“Jasper”唤醒它,然后听到“哔”地一声确认之后说出指令。在默认状态 下,Jasper支持查询时间、天气、新闻,还有新邮件、Facebook推送等社交信息,不知道是不是由于Siri和Cortana之前上演的“二人 转”大热的原因,Jasper也支持为用户讲笑话这样的恶俗功能。
J.A.R.V.I.S,是这个项目最初的名字。听起来有点熟悉?没错,这就是 钢铁侠电影中Tony Stark家里那个智能中央控制电脑,只要Tony一声令下,J.A.R.V.I.S几乎可以完成家中的所有事情,打开窗帘、灯光等电源,报告天气、交 通、新闻信息,甚至协助Tony进行战衣的研发和管理。Marsh和Saha将这个电影中的电脑管家带入了现实,后来主创人员觉得项目名字叫 J.A.R.V.I.S太没创意了,就将项目改名Jasper。
要比复杂性和智能程度,Jasper比不上聪慧搞笑的Siri或者 Cortana。严格意义上说,它最多只能算是一个语音控制系统,而并不是智能的。但开源性让Jasper充满了无限的可能性。Marsh和Saha完全 利用网络上公开的开源代码开发出Jasper,例如它的语音识别系统则是由卡耐基梅隆大学所开发的开源软件PocketSphinx所支持;同 时,Jasper还利用Phonetisaurus来优化语音的识别,这是一款能够适应用户的讲话速度与习惯的开源听写词库软件。
这一切都是开源 的,Jasper的存在让你意识到开源的美妙之处。一个定价35 美元的“树莓派”B型计算机、一张4 GB的SD卡、一条以太网线、一个USB充电器、一条micro USB线、一个USB麦克风以及一套有源扬声器,如果你想自己建一台Jasper,这就是你所需要的全部东西,全部加起来可能都不会超过500 元人民币。安装过程同样是直接简单,把所有该插入的东西都插入就可以了,Jasper的初始安装需用以太网线将“树莓派”与PC连接起来,安装完成了就可 以把Jasper的无线网络打开,让其成为一个完全独立运行的语音控制系统。在Jasper的官网上有一系列教程指引你如何安装软件,同时主创者还开发了 一系列“简单到死”(dead-simple)的API,让开发者或者用户根据自己的需要开发语音指令。

Jasper则是为居家或者工作室而生的定点智能语音系统。一方面连接着麦克风与扬声器用于和用户互动,另一方面连接着网络

你也许很难想象世界各地的人们会拿Jasper干什么。在《连线》的采访中,Jasper的开发者Charles Marsh提到了一些。有人用Jasper来控制自家整个房子的电源,有人则希望能利用这个语音系统来控制整个工厂所有的自动化运输设备,甚至还有人用 Jasper来教小朋友编程。这种语音控制应用的程度对Siri这种封闭的智能语音系统是难以企及的。Jasper令人想起2012 年底一度大热的那只“小鸡”SimSimi,本质上来说Simsimi只是一个自动回复的虚拟卡通形象,它甚至还没有语音功能。但用户能够“教”会 Simsimi如何回复相应的关键词,结果在全球无数网民的调教下,SimSimi被誉为“犯贱版Siri”。从这个角度看,发挥网民无穷的智慧,让其成 为UGC(用户产生内容)与众包作用的结果, Jasper的前途似乎光明无限。
但Marsh和Saha目前似乎并没有如此的野心,直至目前,他 们还没有将Jasper商业化运作的想法,而纯粹只想让更多开发者和黑客加入到Jasper这一项目中,集合无数人的创意与想法,探索这一设备未来更多的 可能性。而对这些极客来说,比起Jasper在不同领域的运用,让更多人意识到现存的开源代码背后所蕴含的巨大潜能更有意义。

 

开源语音识别项目JuliusJS

现在,你可以用你的声音控制你的智能手机。像苹果的Siri和谷歌,不触摸屏幕你就可以搜索网络,寻找简单问题的答案,并更新你的在线日历。但是在台式电脑上语音控制仍是未来的事情。再在许多新的台式机附 带语音识别软件,可以让你控制一些事情。编程学校的波默朗茨的目标是更多的东西。他试图建立一个开源项目叫做JuliusJS,,帮助软件开发人员构建 web语音应用程序的工具,他要为台式机构建一个类似Siri的应用程序。截至目前,JuliusJS只能识别包含在样本字典中的几句话,想要识别更多程 序员将不得不扩大软件的词汇本身。但它是一个开源项目。因此,它可以生长。
  今天,开发商有兴趣加入语音控制到一个Web应用程序。现代浏览器都有一些语音控制工具,但他们总是依赖于某种形式的远程服务,如谷歌的基本语音处理 在远程服务器上。这涉及到整个网络流媒体的声音。JuliusJS会解决此问题。这是一个运行在浏览器中的代码库,而且由于它使用通用的Web标准,它几 乎在任何一台电脑上可以运行。开发人员可以从网站的网站导航来构建工具,添加语音控制进入游戏,或者做别的没有想到事。

 

 

7个开源的TTS(文本转语音)系统推荐

摘要:TTS可以帮助有视觉障碍的人阅读计算机上的信息,或者只是简单的用来增加文本文档的可读性。TTS经常与声音识别程序一起使用。

TTS(Text To Speech,文本转语音)是语音合成应用的一种,它将储存于电脑中的文件,如帮助文件或者网页,转换成自然语音输出。TTS可以帮助有视觉障碍的人阅读 计算机上的信息,或者只是简单的用来增加文本文档的可读性。TTS经常与声音识别程序一起使用。

1.MARY - Text-to-Speech System

MARY是一个采用Java开发的、多语种的文本转语音平台,它支持:德语、英语、美式英语、泰卢固语、土耳其语和俄语。

2.SpeakRight Framework - Helps to build Speech Recognition Applications

SpeakRight 是一个 Java 框架,用于编写语音识别应用,基于 VoiceXML 技术。使用 StringTemplate 模板引擎自动生成 VoiceXML 文档。

3.Festival - Speech Synthesis System

Festival提供了一个通用的框架,用于构建语音合成系统,该系统包含了各种模块示例。它提供了完整的文本转语音的API,原生支持Mac OS,支持的语言包括英语和西班牙语。

4.FreeTTS - Speech Synthesizer in Java

FreeTTS 是完全采用 Java 开发的语音合成系统,它是卡内基梅隆大学基于 Flite 这个小型的语音合成引擎开发的。

5.Festvox - Builds New Synthetic Voices

Festvox项目构建了一个更加系统化、全新的语音合成功能。Festvox是大部分语音合成库的基础。

6.eSpeak - Text to Speech 

eSpeak是一个小型的、开放源码的语音合成系统,支持多种语言。eSpeak使用共振峰合成方法,这可以使提供的语言文件非常小。该系统支持 Windows平台上的SAPI5,所以能用于屏幕阅读程序和其他支持Windows SAPI5接口的程序。eSpeak可以将文本转换成音素代码,因此它也可以用于另一个语音合成引擎的前端。

7.Flite - Fast Run time Synthesis Engine

Flite是一个小型、快速的TTS系统,是著名的语音合成系统festival的C版本,可用于嵌入式系统。

文章出自:OPEN资讯

英文出自:findbestopensource

 

 

Android 轻松实现语音识别

苹果的iphone 有语音识别用的是Google 的技术,做为Google 力推的Android 自然会将其核心技术往Android 系统里面植入,并结合google 的云端技术将其发扬光大。 
所以Google Voice Recognition在Android 的实现就变得极其轻松。 
语音识别,借助于云端技术可以识别用户的语音输入,包括语音控制等技术,下面我们将利用Google 提供的Api 实现这一功能。 
功能点为:通过用户语音将用户输入的语音识别出来,并打印在列表上。 
用户通过点击speak按钮显示界面: 
用户说完话后,将提交到云端搜索: 
在云端搜索完成后,返回打印数据:

Android 轻松实现语音识别的完整代码    

* Copyright (C) 2008 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
 
package com.example.android.apis.app;
 
import com.example.android.apis.R;
 
import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
 
import java.util.ArrayList;
import java.util.List;
 
/**
* Sample code that invokes the speech recognition intent API.
*/
public class VoiceRecognition extends Activity implements OnClickListener {
 
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
 
private ListView mList;
 
/**
* Called with the activity is first created.
*/
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
 
// Inflate our UI from its XML layout description.
setContentView(R.layout.voice_recognition);
 
// Get display items for later interaction
Button speakButton = (Button) findViewById(R.id.btn_speak);
 
mList = (ListView) findViewById(R.id.list);
 
// Check to see if a recognition activity is present
PackageManager pm = getPackageManager();
List activities = pm.queryIntentActivities(
new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size() != 0) {
speakButton.setOnClickListener(this);
} else {
speakButton.setEnabled(false);
speakButton.setText("Recognizer not present");
}
}
 
/**
* Handle the click on the start recognition button.
*/
public void onClick(View v) {
if (v.getId() == R.id.btn_speak) {
startVoiceRecognitionActivity();
}
}
 
/**
* Fire an intent to start the speech recognition activity.
*/
private void startVoiceRecognitionActivity() {
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
 
/**
* Handle the results from the recognition activity.
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) {
// Fill the list view with the strings the recognizer thought it could have heard
ArrayList matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
mList.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1,
matches));
}
 
super.onActivityResult(requestCode, resultCode, data);
}
}

 

Google推出开源语音视频聊天软件WebRTC

天极网软件频道2011-06-22 09:30

  Google近期推出了开源的语音视频聊天软件WebRTC。有消息称Google将把这款功能类似Skype的软件集成到Chrome浏览器中。

  WebRTC源于Google 2010年收购的互联网电话和视频会议公司Global IP Solutions(以下简称“GIPS”)。当Chrome浏览器集成WebRTC之后,Gmail的受益最明显。目前,Gmail拥有语音视频聊天功能,但用户需要安装Google私有的插件。随着Google VoIP业务的成熟,以及Gmail对Google Voice/Talk等的集成,Gmail聊天已经越来越重要。

  不过,Google对WebRTC有更高的期望。Google希望WebRTC能成为互联网视频会议和点对点通信的标准,并在此基础之上制定网 络通信协议。Google在官方博客中表示,WebRTC将是开源、无版权费的,Google还将就WebRTC与Mozilla和Opera等其他浏览器厂商合作。

  Google是网页应用和云计算的积极支持者。网页应用能够很方便地跨操作系统,不仅可以用于Windows和Mac OS X,也可以被智能手机使用。预计WebRTC将很快进入Chrome浏览器。

  Google GIPS一名程序员亨里克·安德里森(Henrik Andreasson)表示:“我们的目标是通过简单的Javascript应用程序接口,使Chrome拥有实时通信能力(RTC)。我们正在努力使Chrome全面支持RTC,从WebKit到语音视频通信功能。”

  WebRTC使用了GIPS的两款语音编解码器,包括用于宽带连接的iSAC和用于窄带连接的iLBC。视频部分,WebRTC使用了Google的VP8编解码器,这也是一项开源、无版权费的技术。

 

 几个常见的语音交互平台的简介和比较
分类: 多媒体技术 2014-01-19 16:04 2762人阅读 评论(0) 收藏 举报

目录(?)[+]
1.概述

最近做了两个与语音识别相关的项目,两个项目的主要任务虽然都是语音识别,或者更确切的说是关键字识别,但开发的平台不同, 一个是windows下的,另一个是android平台的,于是也就选用了不同的语音识别平台,前者选的是微软的Speech API开发的,后者则选用 的是CMU的pocketsphinx,本文主要将一些常见的语音交互平台进行简单的介绍和对比。

这里所说的语音交互包含语音识别(Speech Recognition,SR,也称为自动语音识别,Automatic Speech Recognition,ASR)和语音 合成(Speech Synthesis,SS,也称为Text-To-Speech,简记为TTS)两种技术,另外还会提到声纹识别(Voice Print Recognition, 简记为VPR)技术。

语音识别技术是将计算机接收、识别和理解语音信号转变为相应的文本文件或者命令的技术。它是一门涉及到语音语言学、信号处理、 模式识别、概率论和信息论、发声机理和听觉机理、人工智能的交叉学科。在语音识别系统的帮助下,即使用户不懂电脑或者无法使用 电脑,都可以通过语音识别系统对电脑进行操作。

语音合成,又称文语转换(Text to Speech)技术,能将任意文字信息实时转化为标准流畅的语音朗读出来,相当于给机器装上了人工 嘴巴。它涉及声学、语言学、数字信号处理、计算机科学等多个学科技术,是中文信息处理领域的一项前沿技术,解决的主要问题就是如何 将文字信息转化为可听的声音信息,也即让机器像人一样开口说话。

下面按平台是否开源来介绍几种常见的语音交互平台,关于语音识别和语音合成技术的相关原理请参见我接下来的其他文章。
2.商业化的语音交互平台
1)微软Speech API

微软的Speech API(简称为SAPI)是微软推出的包含语音识别(SR)和语音合成(SS)引擎的应用编程接口(API),在Windows下应用 广泛。目前,微软已发布了多个SAPI版本(最新的是SAPI 5.4版),这些版本要么作为于Speech SDK开发包发布,要么直接被包含在windows 操作系统中发布。SAPI支持多种语言的识别和朗读,包括英文、中文、日文等。SAPI的版本分为两个家族,1-4为一个家族,这四个版本彼此 相似,只是稍微添加了一些新的功能;第二个家族是SAPI5,这个系列的版本是全新的,与前四个版本截然不同。

最早的SAPI 1.0于1995年发布,支持Windows 95和Windows NT 3.51。这个版本的SAPI包含比较初级的直接语音识别和直接语音合成的API, 应用程序可以直接控制识别或合成引擎,并简化更高层次的语音命令和语音通话的API。SAPI3.0于97年发布,它添加了听写语音识别(非连续 语音识别)和一些应用程序实例。98年微软发布了SAPI4.0,这个版本不仅包含了核心的COM API,用C++类封装,使得用C++来编程更容易, 而且还有ActiveX控件,这个控件可以再VB中拖放。这个版本的SS引擎随Windows2000一起发布,而SR引擎和SS引擎又一起以SDK的形式发布。

SAPI5.0 于2000年发布,新的版本将严格将应用与引擎分离的理念体现得更为充分,所有的调用都是通过动态调用sapi.dll来实现的, 这样做的目的是使得API更为引擎独立化,防止应用依赖于某个具有特定特征的引擎,这种改变也意图通过将一些配置和初始化的代码放 到运行时来使得应用程序的开发更为容易。
2).IBM viaVoice

IBM是较早开始语音识别方面的研究的机构之一,早在20世纪50年代末期,IBM就开始了语音识别的研究,计算机被设计用来检测特定的语言 模式并得出声音和它对应的文字之间的统计相关性。在1964年的世界博览会上,IBM向世人展示了数字语音识别的“shoe box recognizer”。 1984年,IBM发布的语音识别系统在5000个词汇量级上达到了95%的识别率。

1992年,IBM引入了它的第一个听写系统,称为“IBM Speech Server Series (ISSS)”。1996年发布了新版的听写系统,成为“VoiceType3.0”, 这是viaVoice的原型,这个版本的语音识别系统不需要训练,可以实现孤立单词的听写和连续命令的识别。VoiceType3.0支持Windows95系统, 并被集成到了OS/2 WARP系统之中。与此同时,IBM还发布了世界上首个连续听写系统“MedSpeak Radiology”。最后,IBM及时的在假日购物季节 发布了大众化的实用的“VoiceType Simply Speaking”系统,它是世界上首个消费版的听写产品(the world’s first consumer dictation product).

1999年,IBM发布了VoiceType的一个免费版。2003年,IBM授权ScanSoft公司拥有基于ViaVoice的桌面产品的全球独家经销权,而ScanSoft公司 拥有颇具竞争力的产品“Dragon NaturallySpeaking”。两年后,ScanSoft与Nuance合并,并宣布公司正式更名为Nuance Communications,Inc。 现在很难找到IBM viaVoice SDK的下载地址了,它已淡出人们的视线,取而代之的是Nuance。
3)Nuance

Nuance通讯是一家跨国计算机软件技术公司,总部设在美国马萨诸塞州伯灵顿,主要提供语音和图像方面的解决方案和应用。目前的业务集中 在服务器和嵌入式语音识别,电话转向系统,自动电话目录服务,医疗转录软件与系统,光学字符识别软件,和台式机的成像软件等。

Nuance语音技术除了语音识别技术外,还包扩语音合成、声纹识别等技术。世界语音技术市场,有超过80%的语音识别是采用Nuance识别引擎技术, 其名下有超过1000个专利技术,公司研发的语音产品可以支持超过50种语言,在全球拥有超过20亿用户。据传,苹果的iPhone 4S的Siri语音识别中 应用了Nuance的语音识别服务。另外,据Nuance公司宣布的重磅消息,其汽车级龙驱动器Dragon Drive将在新奥迪A3上提供一个免提通讯接口, 可以实现信息的听说获取和传递。

Nuance Voice Platform(NVP)是Nuance公司推出的语音互联网平台。Nuance公司的NVP平台由三个功能块组成:Nuance Conversation Server 对话服务器,Nuance Application Environment (NAE)应用环境及Nuance Management Station管理站。Nuance Conversation Server对话服务 器包括了与Nuance语音识别模块集成在一起的VoiceXML解释器,文语转换器(TTS)以及声纹鉴别软件。NAE应用环境包括绘图式的开发工具, 使得语音应用的设计变得和应用框架的设计一样便利。Nuance Management Station管理站提供了非常强大的系统管理和分析能力,它们是为了 满足语音服务的独特需要而设计的。
4)科大讯飞——讯飞语音

提到科大讯飞,大家都不陌生,其全称是“安徽科大讯飞信息科技股份有限公司”,它的前身是安徽中科大讯飞信息科技有限公司,成立于99 年12月,07年变更为安徽科大讯飞信息科技股份有限公司,现在是一家专业从事智能语音及语音技术研究、软件及芯片产品开发、语音信息服务 的企业,在中国语音技术领域可谓独占鳌头,在世界范围内也具有相当的影响力。

科大讯飞作为中国最大的智能语音技术提供商,在智能语音技术领域有着长期的研究积累,并在中文语音合成、语音识别、口语评测等多项 技术上拥有国际领先的成果。03年,科大讯飞获迄今中国语音产业唯一的“国家科技进步奖(二等)”,05年获中国信息产业自主创新最高荣誉 “信息产业重大技术发明奖”。06年至11年,连续六届英文语音合成国际大赛(Blizzard Challenge)荣获第一名。08年获国际说话人识别评测 大赛(美国国家标准技术研究院—NIST 2008)桂冠,09年获得国际语种识别评测大赛(NIST 2009)高难度混淆方言测试指标冠军、通用测试 指标亚军。

科大讯飞提供语音识别、语音合成、声纹识别等全方位的语音交互平台。拥有自主知识产权的智能语音技术,科大讯飞已推出从大型电信级 应用到小型嵌入式应用,从电信、金融等行业到企业和家庭用户,从PC到手机到MP3/MP4/PMP和玩具,能够满足不同应用环境的多种产品,科大 讯飞占有中文语音技术市场60%以上市场份额,语音合成产品市场份额达到70%以上。
5)其他

其他的影响力较大商用语音交互平台有谷歌的语音搜索(Google Voice Search),百度和搜狗的语音输入法等等,这些平台相对于以上的4个 语音交互平台,应用范围相对较为局限,影响力也没有那么强,这里就不详细介绍了。
3.开源的语音交互平台
1)CMU-Sphinx

CMU-Sphinx也简称为Sphinx(狮身人面像),是卡内基 - 梅隆大学( Carnegie Mellon University,CMU)开发的一款开源的语音识别系统, 它包括一系列的语音识别器和声学模型训练工具。

Sphinx有多个版本,其中Sphinx1~3是C语言版本的,而Sphinx4是Java版的,另外还有针对嵌入式设备的精简优化版PocketSphinx。Sphinx-I 由李开复(Kai-Fu Lee)于1987年左右开发,使用了固定的HMM模型(含3个大小为256的codebook),它被号称为第一个高性能的连续语音识别 系统(在Resource Management数据库上准确率达到了90%+)。Sphinx-II由Xuedong Huang于1992年左右开发,使用了半连续的HMM模型, 其HMM模型是一个包含了5个状态的拓扑结构,并使用了N-gram的语言模型,使用了Fast lextree作为实时的解码器,在WSJ数据集上的识别率 也达到了90%+。

Sphinx-III主要由Eric Thayer 和Mosur Ravishankar于1996年左右开发,使用了完全连续的(也支持半连续的)HMM模型,具有灵活 的feature vector和灵活的HMM拓扑结构,包含可选的两种解码器:较慢的Flat search和较快的Lextree search。该版本在BN(98的测评数据 集)上的WER(word error ratio)为19%。Sphinx-III的最初版还有很多limitations,诸如只支持三音素文本、只支持Ngram模型(不 支持CFG/FSA/SCFG)、对所有的sound unit其HMM拓扑结构都是相同的、声学模型也是uniform的。Sphinx-III的最新版是09年初发布的0.8版, 在这些方面有很多的改进。

最新的Sphinx语音识别系统包含如下软件包:
? Pocketsphinx — recognizer library written in C.
? Sphinxbase — support library required by Pocketsphinx
? Sphinx4 — adjustable, modifiable recognizer written in Java
? CMUclmtk — language model tools
? Sphinxtrain — acoustic model training tools
这些软件包的可执行文件和源代码在sourceforge上都可以免费下载得到。
2)HTK

HTK是Hidden Markov Model Toolkit(隐马尔科夫模型工具包)的简称,HTK主要用于语音识别研究,现在已经被用于很多其他方面的研究, 包括语音合成、字符识别和DNA测序等。

HTK最初是由剑桥大学工程学院(Cambridge University Engineering Department ,CUED)的机器智能实验室(前语音视觉及机器人组) 于1989年开发的,它被用来构建CUED的大词汇量的语音识别系统。93年Entropic Research Laboratory Inc.获得了出售HTK的权利,并在95年 全部转让给了刚成立的Entropic Cambridge Research Laboratory Ltd,Entropic一直销售着HTK,直到99年微软收购了Entropic,微软重新 将HTK的版权授予CUED,并给CUED提供支持,这样CUED重新发布了HTK,并在网络上提供开发支持。

HTK的最新版本是09年发布的3.4.1版,关于HTK的实现原理和各个工具的使用方法可以参看HTK的文档HTKBook。
3)Julius

Julius是一个高性能、双通道的大词汇量连续语音识别(large vocabulary continues speech recognition,LVCSR)的开源项目, 适合于广大的研究人员和开发人员。它使用3-gram及上下文相关的HMM,在当前的PC机上能够实现实时的语音识别,单词量达到60k个。

Julius整合了主要的搜索算法,高度的模块化使得它的结构模型更加独立,它同时支持多种HMM模型(如shared-state triphones 和 tied-mixture models等),支持多种麦克风通道,支持多种模型和结构的组合。它采用标准的格式,这使得和其他工具箱交叉使用变得 更容易。它主要支持的平台包括Linux和其他类Unix系统,也适用于Windows。它是开源的,并使用BSD许可协议。

自97年后,Julius作为日本LVCSR研究的一个自由软件工具包的一部分而延续下来,后在2000年转由日本连续语音识别联盟(CSRC)经营。 从3.4版起,引入了被称为“Julian”的基于语法的识别解析器,Julian是一个改自Julius的以手工设计的DFA作为语言模型的版本,它可以 用来构建小词汇量的命令识别系统或语音对话系统。
4)RWTH ASR

该工具箱包含最新的自动语音识别技术的算法实现,它由 RWTH Aachen 大学的Human Language Technology and Pattern Recognition Group 开发。

RWTH ASR工具箱包括声学模型的构建、解析器等重要部分,还包括说话人自适应组件、说话人自适应训练组件、非监督训练组件、个性化 训练和单词词根处理组件等,它支持Linux和Mac OS等操作系统,其项目网站上有比较全面的文档和实例,还提供了现成的用于研究目的的 模型等。

该工具箱遵从一种从QPL发展而来的开源协议,只允许用于非商业用途。
5)其他

上面提到的开源工具箱主要都是用于语音识别的,其他的开源语音识别项目还有Kaldi 、simon 、iATROS-speech 、SHoUT 、 Zanzibar OpenIVR 等。

常见的语音合成的开源工具箱有MARY、SpeakRight、Festival 、FreeTTS 、Festvox 、eSpeak 、Flite 等。

常见的声纹识别的开源工具箱有Alize、openVP等。
4.小结

本文介绍了几种常见的语音交互平台,主要是语音识别、语音合成的软件或工具包,还顺便提到了声纹识别的内容, 下面做一个简单的总结:
以上总结的表格希望对读者有用!

参考文献

[1]语音识别-维基百科:http://zh.wikipedia.org/wiki/语音识别 
[2]语音合成-百度百科:http://baike.baidu.com/view/549184.htm 
[3] Microsoft Speech API:http://en.wikipedia.org/wiki/Speech_Application_Programming_Interface#SAPI_1 
[4] MSDN-SAPI:http://msdn.microsoft.com/zh-cn/library/ms723627.aspx 
[5] 微软语音技术 Windows 语音编程初步:http://blog.csdn.net/yincheng01/article/details/3511525 
[6]IBM Human Language Technologies History:http://www.research.ibm.com/hlt/html/history.html 
[7] Nuance: http://en.wikipedia.org/wiki/Nuance_Communications 
[8] 科大讯飞:http://baike.baidu.com/view/362434.htm 
[9] CMU-Sphinx: http://en.wikipedia.org/wiki/CMU_Sphinx 
[10] CMU Sphinx homepage:http://cmusphinx.sourceforge.net/wiki/ 
[11] HTK Toolkit:http://htk.eng.cam.ac.uk/ 
[12] Julius:http://en.wikipedia.org/wiki/Julius_(software) 
[13] RWTH ASR:http://en.wikipedia.org/wiki/RWTH_ASR 
[14] List of speech recognition software: http://en.wikipedia.org/wiki/List_of_speech_recognition_software 
[15] Speech recognition: http://en.wikipedia.org/wiki/Speech_recognition 
[16] Speech synthesis: http://en.wikipedia.org/wiki/Speech_synthesis 
[17] Speaker recognition: http://en.wikipedia.org/wiki/Speaker_recognition

 

 Sphinx-4一个完全采用Java开的语音识别器.
  http://cmusphinx.sourceforge.net/sphinx4/#what_is_sphinx4

 

Google推出开源语音视频聊天软件WebRTC

天极网软件频道2011-06-22 09:30

  Google近期推出了开源的语音视频聊天软件WebRTC。有消息称Google将把这款功能类似Skype的软件集成到Chrome浏览器中。

  WebRTC源于Google 2010年收购的互联网电话和视频会议公司Global IP Solutions(以下简称“GIPS”)。当Chrome浏览器集成WebRTC之后,Gmail的受益最明显。目前,Gmail拥有语音视频聊天功能,但用户需要安装Google私有的插件。随着Google VoIP业务的成熟,以及Gmail对Google Voice/Talk等的集成,Gmail聊天已经越来越重要。

  不过,Google对WebRTC有更高的期望。Google希望WebRTC能成为互联网视频会议和点对点通信的标准,并在此基础之上制定网 络通信协议。Google在官方博客中表示,WebRTC将是开源、无版权费的,Google还将就WebRTC与Mozilla和Opera等其他浏览器厂商合作。

  Google是网页应用和云计算的积极支持者。网页应用能够很方便地跨操作系统,不仅可以用于Windows和Mac OS X,也可以被智能手机使用。预计WebRTC将很快进入Chrome浏览器。

  Google GIPS一名程序员亨里克·安德里森(Henrik Andreasson)表示:“我们的目标是通过简单的Javascript应用程序接口,使Chrome拥有实时通信能力(RTC)。我们正在努力使Chrome全面支持RTC,从WebKit到语音视频通信功能。”

  WebRTC使用了GIPS的两款语音编解码器,包括用于宽带连接的iSAC和用于窄带连接的iLBC。视频部分,WebRTC使用了Google的VP8编解码器,这也是一项开源、无版权费的技术。

 

一个简单语音识别系统:

http://www.cnblogs.com/zhuweisky/p/4059048.html

 

调用科大讯飞:

http://www.apkbus.com/android-170225-1-1.html

 

开源语音格式speex教程(for iOS):

http://www.cocoachina.com/industry/20121105/5029.html

2015-11-11 19:24:31 nnmmbb 阅读数 6402
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

对于CMU Sphinx-4进行相关简单的介绍,并对其中的一些功能和使用进行相关说明。

Introduction:

CMU Sphinx:

      由卡内基梅隆大学制作的用于语音识别的开源工具箱。

CMU Sphinx-4:

      Sphinx-4是完全用Java语言写的先进的语音识别系统。它是通过卡内基梅隆大学Sphinx组,Sun微系统实验室、三菱电器研究实验室、惠普等联合完成的,同时美国加州大学圣克鲁斯分校和麻省理工学院也对其有贡献。

Capabilities:

1.实时模式以及批处理模式下的语音识别,能够识别离散和连续的语音。

2.通用可插拔的前端结构。包括实现预加重、汉明窗、FFT、Mel频率滤波器、离散余弦变换、倒谱均值归一化、倒谱的特征值提取,增量倒谱,双增量倒谱特征。

3.通用可插拔的语言模型结构。包括可插拔语言模型支持单元组、二元组、三元组、Java Speech API语法格式以及ARPA-格式FST文法的ASCII和二进制版本。

4.通用的声学模型结构。包括可插拔的支持Sphinx-3声学模型。

5.通用的搜索管理。包括可插拔的支持广度优先和字修剪搜索。

6.一些对于处理后的识别结果,包括获得的可信度分数,生成的格子以及嵌入到JSGF标签中的ECMAScript

7.独立的工具。包括用于显示波形图和频谱图,从音频中产生特征。

Performance:

      Sphinx-4是一个复杂的系统,能够执行许多不同类型的识别任务。因此,很难用Sphinx-4对于一些简单数字的识别精度和速度来衡量性能。取而代之,通常会做一些在Sphinx-4上的回归测试来决定如何在多种多样的任务下执行。这些任务和最后的结果如下(每个任务的难度依次递增):

·孤立数字(TI46):用事先录制好的测试数据来运行Sphinx-4,收集在一时间识别一个字的性能。 这个词汇表仅仅是从0-9的孤立话语,只包含一个数字以及一个单一的话语。
·连续数字(TIDIGITS):扩展单个字来识别同一时间的更多的字(如,连续话语)。词汇仅仅是从0到9的数字话语,用一个单一的话语包含的数字序列。
·小词汇集(AN4):扩展词汇到大约100个词,从说话词汇的输入数据范围来讲,就如同一个字母一个字母的把单词拼出来。
·中等词汇集(RM1):扩展词汇到大约1000次。
·中等词汇集(WSJ5K):扩展词汇到大约5000次。
·中等词汇集(WSJ20K):扩展词汇到大约20000次。
·大词汇集(HUB4):扩展词汇集到大约64000次。

下面的图表是Sphinx 3.3与Sphinx 4的性能对比:

其中HUB4测试的性能是不完全的。
key:
· WER - word error rate (%) (lower is better)
· RT - Real Time - Ratio of processing time to audio time - (lower is better )
· S3.3 RT -  Results for a single or dual CPU configuration
· S4 RT(1) - Results on a single - CPU configuration
· S4 RT(2) - Results for a dual - CPU configuration


Downloading Sphinx-4:

Sphinx- 4 有两个可用的包: 
· Sphinx4-{version}-bin.zip:提供jar包文件,文档和实例。 
· Sphinx4-{version}-src.zip:提供源、文档、实例,单元测试和回归测试。

 

Demos:

简单例子: 
Hello World Demo: 识别简单的短语 
Hello N-Gram Demo: 运用N元语言模型来进行识别 
语音文件转录的例子: 
Transcriber Demo: 一个简单的例子来展示如何转录有多个离散词语的连续语音文件 
Confidence Demo: 展示如何获得结果的可信度 
Lattice Demo: 展示如何从识别结果中提取点阵 
Class-Based Language model Demo: 展示一个基于分类的语言模型 
Aligner Tags Demo: 对齐音频文件来转录并且获得字的时间。可用于隐藏式字幕。 
一些先进的对话系统例子: 
ZipCity Demo: 一个Java应用,通过识别字串儿来定位城市的位置 
JSGF Demo: 展示程序如何在复杂的JSGF语法中交换 
Dialog Demo: 展示程序如何在复杂的JSGF语法和听写语法中交换 
Action Tags Demo: 展示如何使用动作标签来后处理从JSGF中得到的RuleParse对象

 

Sphinx-4 Frequently Asked Questions:

General:
Who created Sphinx-4?
I have a question about Sphinx-4. How can I get it answered?
How can I contact the Sphinx-4 team?
Which Sphinx-4 distribution should I use?

Sphinx-4:
I want to add speech recognition to my application. Where do I start?
How can I decode/transcribe .wav files?
How can I get the N-Best list?
How can I detect and ignore out-of-grammar utterances?
How can I change my language models or grammars at runtime?
How can I perform word-spotting?

Java:
How well does Sphinx-4 perform compared to other speech recognizers?
Isn't the Java Platform too slow to be used for speech recognition?
Does Sphinx-4 support the Java Speech API (JSAPI)?
Where can I learn more about the Java Speech Grammar Format (JSGF)?
Can I use Sphinx-4 in a J2ME device such as a phone or a PDA?
Why can't I use Java versions prior to 1.4?
I am having microphone troubles under linux. What can I do?

Acoustic & Language Models:
How can I train my own acoustic models?
How do I use models trained by SphinxTrain in Sphinx-4?
How can I create my own language models?


2017-08-19 20:14:30 godloveyuxu 阅读数 41938
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

按:本文原作者 Cindi Thompson,美国德克萨斯大学奥斯汀分校(University of Texas at Austin)计算机科学博士,数据科学咨询公司硅谷数据科学(Silicon Valley Data Science,SVDS)首席科学家,在机器学习、自然语言处理等领域具有丰富的学术研究和产业界从业经验。雷锋网编译。


作为 SVDS 研究团队的成员,我们会经常接触各种不同的语音识别技术,也差不多见证了语音识别技术近几年的发展。直到几年之前,最先进的语音技术方案大多都是以语音为基础的(phonetic-based),包括发音模型(Pronunciation models),声学模型(Acoustic Modelling)和语言模型(Language Model)等。通常情况下,这些模型大多都是以隐马尔可夫模型(HMM)和 N-gram 模型为核心的。未来,我们希望以这些传统模型为基础,探索一些诸如与百度 Deep Speech 等最新的语音识别系统相结合的新技术。当然,目前互联网上可以找到许多针对这些基础模型进行解释、汇总的文章和资料,但针对它们之间的差别和特点展开阐述的却并不多。

为此,我们对比了五款基于 HMM 和 N-gram 模型的语音识别工具:CMU Sphinx,Kaldi,HTK,Julius 和 ISIP。它们都是开源世界的顶级项目,与 Dragon 和 Cortana 等商业语音识别工具不同,这些开源、免费的工具可以为开发者提供更大的自由度以及更低的开发成本,因此在开发圈始终保持着强大的生命力。

需要提前说明的是:以下分析大多来源于我们的主观经验,同时也参考了互联网上的其他信息。而且这篇文章也并非一个覆盖所有语音识别开源工具的汇总类文章,我们只是对比了其中五款相对更主流的产品。另外,HTK 并不是严格开源的,它的代码并不能重新组织发布,也不能用于商业用途。

想知道更多语音识别工具的用户请点击以下链接,其中列出了几乎所有开源/非开源的语音识别工具,非常全面。

https://en.wikipedia.org/wiki/List_of_speech_recognition_software 


  编程语言:

根据你对不同编程语言的熟悉程度,你可能会更偏爱某一种工具。如上图所示,这里列出的五款工具中,除了 ISIP 只支持 C++ 之外,全都支持 Python。你可以直接在它们的官网找到不同语言对应的下载链接。不过,Python 版有可能并不会覆盖工具包的全部功能,有些功能还可能是为其他语言的特性单独设计的。另外值得注意的是,CMU Sphinx 还支持 Java、C 和其他更多语言。

  开发者活跃度:

这里列出的五个项目均源于学术研究。

从名字也能看出,CMU Sphinx 是一款源于卡内基梅隆大学的产品。它的研发历史大约可以追溯到 20 年前,目前在 GitHub 和 SourceForge 平台同步更新。在 GitHub 平台有 C 和 Java 两个版本,而且据说分别只有一个管理员维护。但在 SourceForge 平台却有 9 个管理员和十几个开发者。

Kaldi 源于 2009 年的一场研讨会,代码目前在 GitHub 平台开源,共有 121 位贡献者。 

HTK 始于 1989 年的剑桥大学,曾一度商业化,但目前又回归剑桥。如前所述 HTK 现在并不是一款严格意义的开源工具,而且更新缓慢(虽然它的最新版本更新于 2015 年 12 月,但前一个版本的更新时间却是 2009 年,中间隔了差不多 6 年时间)。

Julius 始于 1997 年,最后一个主要版本更新于 2016 年 9 月,据称其 GitHub 平台有三名管理员维护。

ISIP 是第一个比较先进的开源语音识别系统,起源于密西西比州。它主要在 1996 年到 1999 年之间研发,最后一个版本发布于 2011 年,在 GitHub 平台出现之前就已经停止更新了。


  社区活跃度:

这一部分我们考察了上述五个工具的邮件和社区讨论情况。

CMU Sphinx 的论坛讨论热烈,回帖积极。但其 SourceForge 和 GitHub 平台存在许多重复的 repository。相比之下,Kaldi 的用户则拥有更多交互方式,包括邮件、论坛和 GitHub repository 等。HTK 有邮件列表,但没有公开的 repository。Julius 官网上的论坛链接目前已经不可用,其日本官网上可能有更详细的信息。ISIP 主要用于教育目的,其邮件列表目前已不可用。

  教程和示例:

CMU Sphinx 的文档简单易读,讲解深入浅出,且贴近实践操作。

Kaldi 的文档覆盖也很全面,但是在我看来更难理解。而且,Kaldi 同时包括了语音识别解决方案中的语音和深度学习方法。

如果你并不熟悉语音识别,那么可以通过对 HTK 官方文档(注册后可以使用)的学习对该领域有一个概括的认识。同时,HTK 的文档还适用于实际产品设计和使用等场景。

Julius 专注于日语,其最新的文档也是日语,但团队正在积极推动英文版的发布。

以下链接提供了一些基于 Julius 的语音识别样例。

https://github.com/julius-speech/dictation-kit 

最后是 ISIP,虽然它也有一些文档,但是并不系统。

  预训练模型:

即使你使用这些开源工具的主要目的是想要学习如何去训练一个专业的语音识别模型,但一个开箱即用的预先训练好的模型仍然是一个不可忽略的优点。

CMU Sphinx 包括英语、法语、西班牙语和意大利语在内的诸多可以直接使用的模型,详情可以参考它的说明文档。

Kaldi对现有模型进行解码的指令深藏在文档中,不太容易找到,但我们仍然发现了贡献者在 egs/voxforge 子目录下基于英文 VoxForge 语料库训练好的一个模型,并且还可以通过 online-data 子目录下的一个脚本直接运行。详情可以参考 Kaldi 项目的 repository。

我们没有深入挖掘其他三个软件包的模型训练情况,但它们应该至少包含一些简单可用的预训练模型,而且与 VoxForge 兼容(VoxForge 是一个非常活跃的众包语音识别数据库和经过训练的模型库)。

2019-04-24 09:37:17 whale52hertz 阅读数 86
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

来源:ATYUN AI平台 

技术的进步推动了语音界面的发展,通过机器学习工具的普及,使得更多的互联网连接产品能够比以往任何时候都更能倾听和回应我们的声音。许多人将会体验到新的语音设备带来的便利。

语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

Mozilla(缩写MF或MoFo)全称Mozilla基金会,是为支持和领导开源的Mozilla项目而设立的一个非营利组织。Mozilla对语音识别的潜力感到兴奋。他们相信这项技术能够并且将会带来一波创新产品和服务的浪潮,并且应该对所有人开放。

上个月29日,Mozilla的机器学习小组的语音识别工作取得了两个重要的里程碑进展。其中之一是Mozilla的开源语音识别模型首次发布,该模型的准确性接近人类在听同样的录音时的感知。其次,Mozilla还发布了世界上第二大公开的语音数据集,这是全球近2万名用户的贡献。

一个接近用户期望性能的开放源码的语音文本引擎
目前只有少数几家大公司的商业质量语音识别服务是可行的。这就减少了用户的选择,也减少了初创公司、研究人员甚至更大的公司的可用功能,这些公司想要为他们的产品和服务提供支持。

这就是为什么Mozilla将DeepSpeech作为一个开放源码项目。Mozilla和一群志同道合的开发人员、公司和研究人员组成的社区一起,应用了复杂的机器学习技术和各种各样的创新,在LibriSpeech的测试数据集上构建了一个语音到文本的引擎,出错率仅为6.5%。

在发布的第一个版本中,引擎包含了Python、NodeJS和一个命令行二进制代码的预构建包,开发者可以马上使用它来进行语音识别。

构建世界上最多样化的公开语音数据集,为训练语音技术最优化
如此少的服务在商业上可用的一个原因是缺乏数据。创业公司、研究人员或任何想要建立语音技术的人都需要高质量的、转录的语音数据来训练机器学习算法。现在,他们只能访问相当有限的数据集。

为了解决这一障碍,Mozilla在今年7月启动了Common Voice项目。目标是让人们可以很容易地把他们的声音捐赠给一个公开的数据库,这样就可以建立一个语音数据集,每个人都可以用它来训练新的语音应用程序。

语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

到目前为止,Mozilla已经发布了第一批捐赠者的声音:近40万种录音,相当于500小时的演讲。任何人都可以下载这些数据。

Mozilla收到了来自全球范围内的2万多人提供的不同的声音。通常,现有的语音识别服务无法理解不同的口音,而且大多数情况,比起女性更善于理解男性的语音——这是语音识别服务接受训练的数据中存在的偏见结果。Mozilla希望说话者的数量和他们的不同的口音能够创造出一个全球性的代表数据集,从而带来更具包容性的技术。

为此,Mozilla开始使用英语,并且正在努力确保从2018年上半年开始,Common Voice项目能够支持多种语言的语音捐赠。最后,当经历了寻找可公开的语音数据集的挑战时,Mozilla还收集了所有其他我们所知道的大型语音收集的链接。

Mozilla认为,技术应该是开放的,所有人都可以访问,包括语音。Mozilla开发这种技术的方法是由设计开放的,他们非常欢迎更多的合作者和贡献者与之一起工作。

本文转自ATYUN人工智能媒体平台,原文链接:语音识别取得了两个里程碑进展 Mozilla发布开源语音识别模型和语音数据集

更多推荐

达观数据荣获上海市软件企业核心竞争力评价,推动上海软件行业发展

云从科技 | 从初创企业上位AI“国家队”,看看背后都干了些什么?!

智行者蜗小白“无人清扫车”南翠屏上岗(图)

裤子变裙子,GAN图像转换新进展

欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com
欢迎关注ATYUN官方公众号,商务合作及内容投稿请联系邮箱:bd@atyun.com

 

2019-05-17 15:34:26 muxiue 阅读数 710
  • Android开源项目实践之UI篇

    本课程主要展现了如何利用Android开源代码进行app的开发。例如: 1.异步网络请求(android-async-http); 2.百变圆形滚动条(ProgressWheel);3.滑动导航栏(PagerSlidingTabStrip);4.瀑布流与上拉刷新,下拉加载完美结合(PinterestLikeAdapterView)...

    21109 人正在学习 去看看 李忠义

开源语音识别工具包

目前开源世界里存在多种不同的语音识别工具包,它们为开发者构建语音识别相关的应用提供了很大的帮助。以下是目前比较流行的语音识别工具包:

  1. CMU Sphinx
  2. Kaldi
  3. HTK
  4. Julius
  5. ISIP
    作为语音识别小白,我将从CMU Sphinx入手,从简单的应用搭建到CMU Sphinx代码的阅读和理解,逐步深入了解语音识别这个深奥的世界。

语音识别简介

语音其实上是一个复杂的现象,人们很少理解语音是怎么产生和感知的,最直观的理解就是语言是由多个单词组成的,而每个单词又是由多个音素(phone)组成的,但事实却并不是这样。事实上,语言/语音是一个连续动态的过程,之间没有明显的分界,如果你用一个语音编辑器来看的话,波形就是下面的样子:
在这里插入图片描述
语音实际上是一个概率问题,从而意味着在一段连续的语音中,单词之间没有明显的分界,所以从语音到文字的转换永远不可能100% 正确,这其实颠覆了许多程序员的认知。作为程序员,大多数都在处理一就是一,二就是二的问题,而不是一有可能是一,也有可能是二的问题,而语音识别就是后者。

语音的构成

语音是一种连续的音频流,这个音频流是稳定状态与动态改变状态的叠加, 在这种状态序列中,可以定义相似类别的声音或音素。对应于每个音素的波形的声学特性受许多因素影响——环境,扬声器,语音风格等。另外,协同发音(指的是一个音受前后相邻音的影响而发生变化,从发声机理上看就是人的发声器官在一个音转向另一个音时其特性只能渐变,从而使得后一个音的频谱与其他条件下的频谱产生差异)的存在使得音素的感知与标准不一样,所以我们需要根据上下文来辨别音素。将一个音素划分为几个亚音素单元。如:数字“three”,音素的第一部分与在它之前的音素存在关联,中间部分是稳定的部分,而最后一部分则与下一个音素存在关联,这就是为什么在用HMM模型做语音识别时,选择音素的三状态HMM模型。上下文相关建模方法在建模时考虑了这一影响,从而使模型能更准确地描述语音,只考虑前一音的影响的称为双音素Bi-Phone,考虑前一音和后一音的影响的称为 3音素Tri-Phone,甚至4音素Qin-phones。
从计算角度出发,只检测3音素的一部分比把3音素作为整体考虑要有用的多,例如,现在你想创建一个3音素头部部分的检测器,那么你只需要一小部分(大约4000个)不同的短的声音检测器,我们称这些检测器为senones。一个senone的上下文依赖比单纯的左右上下文复杂得多,它是一个可以被决策树或者其他方式来定义的复杂函数。
音素phones构成亚单词单元,也就是音节syllables。音节是一个比较稳定的实体,因为当语音变得比较快的时候,音素往往会发生改变,但是音节却不变。音节与节奏语调的轮廓有关。有几种方式去产生音节:基于形态学或者基于语音学。音节经常在词汇语音识别中使用。
亚单词单元(音节)构成单词。单词在语音识别中很重要,因为单词约束了音素的组合。假如共有40个音素,然后每个单词平均有7个音素,那么就会存在40^7个单词,但幸运的是就算一个受过优等教育的人也很少使用过20k个单词,这就使识别变得可行。
单词和一些非语言学声音构成了话语(语句,utterances),我们把非语言学声音称为填充物(fillers),例如呼吸,um,uh,咳嗽等,它们在音频中是以停顿做分离的。所以它们更多只是语义上面的概念,不算是一个句子。

识别过程

语音识别一般的方法是:录制语音波形,再把波形通过静音(语句之间的间断,silences)分割为多个语句,然后去识别每个语句所表达的意思。为了达到这个目的,我们需要用单词的所有可能组合去匹配这段音频,然后选择匹配度最高的组合。
在匹配中有几个关键的概念需要了解的:

  1. 特征
    由于描述一个语音需要的参数个数非常多,这样对处理速度的要求就很高(而且也没必要处理那么多的信息,我们只需要处理对识别有帮助的就行),所以我们需要做优化,进行降维。我们用帧frames去分割语音波形,每帧大概10ms,然后每帧提取可以代表该帧语音的39个数字,这39个数字也就是该帧语音的特征,用特征向量来表示。而如何提取特征向量是当下热门的研究课题,不过简单说来,这些提取方法都是由频谱衍生出来的。
  2. 模型
    模型是用来描述一些数学对象的。这些数学对象描述了一些口语的共同属性。在实际应用中,senone的音频模型就是三态高斯混合模型。简单的说,它就是一个最有可能的特征向量。对于模型,有几个问题需要考虑:模型到底多大程度上可以描述实际情况?在模型本身的局限情况下模型能表现得更优吗?自适应模型如何改变条件?
    经典的语言模型称为隐马尔科夫模型(Hidden Markov Model, HMM),在该模型中,过程被描述为以一定概率彼此改变的状态序列。 此模型旨在描述任何顺序过程,如语音。 HMM已被证明对语音解码非常实用。
  3. 匹配算法
    语音识别需要对所有的特征向量和所有的模型做比较匹配,这是一个非常耗时的工作。而在这方面的优化往往是使用一些技巧,在每一点的匹配时,我们通过保留最好的匹配变体(variants),然后通过它在下一帧产生最好的匹配变体。

模型

根据语音结构,在语音识别中需要用到三种模型:

  1. 声学模型
    一个声学模型包含每个senone的声学属性,包括不依赖上下文的模型和依赖上下文的模型。其中不依赖上下文的模型包括不依赖于上下文的属性(每个音素最大可能的特征向量),而依赖上下文的模型包括依赖于上下文的属性(根据上下文构建的senone)。
  2. 语音学字典
    语音学字典包含了从单词到音素之间的映射,这种映射并不是十分有效,例如,在字典中只标注了两到三个发音变体,但是这种方法在大多数时候够用。字典并不是描述单词到音素之间的映射的唯一方法。可以通过运用机器学习算法去学习得到一些复杂的函数去完成映射功能。
  3. 语言模型
    语言模型是用来约束单词搜索的,它定义了哪些词能跟在上一个已经识别的词的后面(匹配是一个顺序的处理过程),这样就可以为匹配过程排除一些不可能的单词。最常用的语言模型是n-gram模型,它包含了单词序列的统计和有限状态模型,通过有限状态机来定义语音序列,有时候会加入权值。为了达到比较好的识别准确率,语言模型必须能够很好的约束空间搜索,也就是说可以更好的预测下一个词。语言模型是约束词汇包含的单词的,这就出现一个问题,就是名字识别(因为名字可以随便由几个单词组成)。为了处理这种情况,语言模型可以包含更小的块,例如亚单词,甚至音素。但是这种情况,识别准确率将会低于基于单词的语言模型。
    特征、模型和搜索算法三部分构成了一个语音识别系统。如果你需要识别不同的语言,那么就需要修改这三个部分。很多语言,都已经存在声学模型,字典,甚至大词汇量语言模型可供下载了。

其他概念

  • 网格(Lattice)是一个代表识别变体的有向图。一般来说,很难去获得一个最好的语音匹配结果,所以Lattices就是一个比较好的格式去存放语音识别的中间结果。
  • N-best lists of variants和网格(lattice)有点像,但是它没有网格那么密集(也就是保留的结果没有网格多)。N-best搜索和多遍搜索:为在搜索中利用各种知识源,通常要进行多遍搜索,第一遍使用代价低的知识源(如声学模型、语言模型和音标词典),产生一个候选列表或词候选网格,在此基础上进行使用代价高的知识源(如4阶或5阶的N-Gram、4阶或更高的上下文相关模型)的第二遍搜索得到最佳路径。
  • 单词混淆网络是从网格的边缘得到的一个严格的节点顺序序列。
  • 语音数据库是一个从任务数据库得到的典型的录音集。如果我们开发的是一个对话的系统,那么数据库就是包含了多个用户的对话录音。而对于听写系统,包含的就是朗读的录音。语音数据库是用来训练,调整和测试解码系统的(也就是语音识别系统)。
  • 文本数据库是为了训练语言模型而收集的文本,一般是以样本文本的方式来收集形成的。而收集过程存在一个问题就是误把PDFs, web pages, scans等现成文档也当成口语文本的形式放进数据库中。所以,我们就需要把这些文件里的标签和文件头去掉,还有把数字展开为它们的语音形式(例如1展开为英文的one或者汉语的yi),另外还需要把缩写给扩大还原为完整单词。

CMU Sphinx

简介

CMU Sphinx(简称Sphinx)是美国卡内基梅隆大学开发的一系列语音识别工具包以及相关工具(例如声学模型训练软件,语言模型编辑软件和语音词典CMUDICT等)的总称。在2000年,卡内基梅隆的Sphinx小组致力于开源几个语音识别器组件,包括Sphinx 2和后来的Sphinx 3(2001年)。Sphinx包括许多工具包,可以用于搭建具有不同需求的应用。

  • Pocketsphinx - 用C语言编写的轻量级的语音识别库;
  • Sphinxbase - Pocketsphinx的支撑库;
  • Sphinx4 - 用Java编写的自适应的,可修改的语音识别库;
  • Sphinxtrain - 声学模型训练软件;
    现在最新的发布版本是:
  • sphinxbase-5prealpha
  • pocketsphinx - 5prealpha
  • sphinx4 - 5prealpha
  • sphinxtrain - 5prealpha
    Sphinx除了是开源之外,还具有很多优势,可以自己定制声音模型,语言模型,语音学字典,用于多个不同的场景,例如语音搜索,语义分析,翻译,智能助手等。
    如何选择你需要的工具包呢?
  • 由于Sphinx有用不同的编程语言开发的工具包,所以开发者可以根据自己的习惯选择相应的语言识别包。
  • 如果你想要快速和可携带性,那么选择pocketsphinx,如果你想要灵活和可管理,那么可以选择sphinx4.

Sphinx初体验

让我们先来用Sphinx自带的Pocketsphinx来体验一下Sphinx语音识别的效果吧。由于Pocketsphinx依赖于SphinxBase库(提供了公共的函数功能),所以需要同时安装SphinxBase和Pocketsphinx,Pocketsphinx才能正常工作。Pocketsphinx可以安装在Linux,windows,MacOS,iPhone和Android上,本文中我们将在windows上进行安装。

下载

sphinxbase下载页
pocketsphinx下载页

下载"sphinxbase-5prealpha-win32.zip"和“pocketsphinx-5prealpha-win32.zip”,并解压缩。
在这里插入图片描述

编译

  • 编译Sphinxbase
    用visual studio打开sphinxbase\sphinxbase.sln,编译所有项目,其中visual studio版本需要是MS Visual Studio 2012及以上,我使用的是visual studio 2017。由于编译版本不一样,在打开solution时,会弹出如下窗口,选择OK。
    在这里插入图片描述
    在这里插入图片描述
    编译后的结果:
    在这里插入图片描述
  • 编译Pocketsphinx
    用visual studio打开pocketsphinx\pocketsphinx.sln,编译所有项目。其他步骤与编译sphinxbase相同。编译结果如下:
    在这里插入图片描述
  • 拷贝sphinxbase.dll到上图中的文件夹中
    在这个地方有个小trick,理论上应该是我们自己编译出spinxbase.dll之后进行拷贝,但是我们从网站上下载的pocketsphinx中,bin\Debug\Win32下自带拷贝好的sphinxbase.dll,当然你也可以把你编译好的dll重新拷贝覆盖掉之前的dll。提示:如果你编译了pocketsphinx,最好是把你编译的sphinxbase结果也复制过去,否则可能出现不匹配,造成程序如法运行。

运行

运行命令:
bin\Release\Win32\pocketsphinx_continuous.exe -inmic yes -hmm model\en-us\en-us -lm model\en-us\en-us.lm.bin -dict model\en-us\cmudict-en-us.dict

参数说明:

  • inmic:使用麦克风,如果使用file,修改为-infile
  • hmm:指定声学模型
  • lm:指定语言模型
  • dict:指定语言学字典

运行结果:你可以开始说话了,不过识别结果感人,暂时原因未知,还需要继续学习。
在这里插入图片描述

如果在命令行运行时,遇到如下错误:
在这里插入图片描述
其中MSVCR110D.dll是MSVCR110.dll的debug版本。如果遇到这个问题,说明你的phocketsphinx与sphinxbase不匹配,需要将编译好的sphinxbase结果复制过去。

下一篇 PocketSphinx在windows上的应用示例,开发工具Visual Studio

语音识别资源

阅读数 1907

没有更多推荐了,返回首页