TLSphinx, Pocketsphinx的快速包装器

分享于 

8分钟阅读

GitHub

  繁體 雙語
Swift wrapper around Pocketsphinx
  • 源代码名称:TLSphinx
  • 源代码网址:http://www.github.com/tryolabs/TLSphinx
  • TLSphinx源代码文档
  • TLSphinx源代码下载
  • Git URL:
    git://www.github.com/tryolabs/TLSphinx.git
    Git Clone代码到本地:
    git clone http://www.github.com/tryolabs/TLSphinx
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/tryolabs/TLSphinx
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    TLSphinx

    TLSphinx是基于 Sphinx Sphinx的一个 Swift 包装器,它基于 Sphinx Sphinx,允许应用程序在不离开设备的情况下进行语音识别

    这里存储库有两个主要部分。 第一个版本是 pocketsphinxsphinx base库的syntetized版本,带有模块映射,以将库作为一个Clang模块库访问。 这里模块以名称 Shpinx 访问,并且有两个子模块: PocketBase 参照 pocketsphinx sphinx sphinx base base base。

    第二部分是 TLSphinx,使用 Sphinx 模块,并公开了一个类似于的API,该API与pocketsphinx服务 talks。

    注意:我在这里写了一个关于 TLSphinx的博客帖子,在Tryolabs博客。 查看一下我为什么写这篇文章的简短历史。

    用法

    框架提供了三个类:

    • Config 描述识别语音所需的配置。
    • Decoder 是提供执行所有解码的API的主要类。
    • Hypotesis 是解码尝试的结果。 它有一个 text 和一个 score 属性。
    配置

    表示 Sphinx 中的cmd_ln_t 不透明结构。 默认构造函数采用具有以下形式的元组的array (param name, param value) 其中,"参数名称"是 Sphinx 识别的参数的名称。 在本例中,我们传递acustic模型。语言模型和字典。 有关识别参数的完整列表,请参见文档

    类具有一个 public 属性,可以打开/关闭 Sphinx 中的调试信息:

    publicvar showDebugInfo:Bool
    解码器

    表示 Sphinx 中的ps_decoder_t 不透明结构。 默认构造函数将 Config 对象作为参数。

    这具有执行来自文件或者麦克风的解码的功能。 结果是在可选的Hypotesis 对象中返回,遵循 Pocketsphinx API的名称约定。 函数是:

    从 file: 解码语音

    publicfuncdecodeSpeechAtPath (filePath: String, complete: (Hypotesis?) -> ())

    filePath 指向的音频必须具有以下特征:

    • 单通道( 单声道)
    • 小尾数
    • unheadered
    • 16位 签名
    • PCM
    • 采样频率为 16000赫兹

    若要控制用于读取文件的缓冲区大小,Decoder 类具有 public 属性

    publicvar bufferSize:Int

    要从麦克风解码实时音频流,请执行以下操作:

    publicfuncstartDecodingSpeech (utteranceComplete: (Hypotesis?) -> ())publicfuncstopDecodingSpeech ()

    你可以多次使用相同的Decoder 实例。

    Hypotesis

    这里结构表示解码尝试的结果。 它具有一个 text 属性,它具有最佳得分文本和一个带有得分值的score。 这里结构实现 Printable,以便你可以使用 println(hypotesis_value) 打印它。

    示例

    处理音频文件

    作为一个例子,让我们看看如何在音频文件中解码语音。 为此,首先需要创建一个 Config 对象并将它传递给 Decoder 构造函数。 使用解码器,你可以从音频文件中执行自动语音识别,如下所示:

    importTLSphinxlet hmm =...// Path to the acustic modellet lm =...// Path to the languaje modellet dict =...// Path to the languaje dictionaryiflet config =Config(args: ("-hmm", hmm), ("-lm", lm), ("-dict", dict)) {
     iflet decoder =Decoder(config:config) {
     let audioFile =...// Path to an audio file 
     decoder.decodeSpeechAtPath(audioFile) {
     iflet hyp: Hypotesis =$0 {
     // Print the decoder text and scoreprintln("Text: (hyp.text) - Score: (hyp.score)")
     } else {
     // Can't decode any speech because of an error }
     }
     } else {
     // Handle Decoder() fail }
    } else {
     // Handle Config() fail }

    解码是用 decodeSpeechAtPath 函数在bacground中执行的。 进程完成后,主线程中调用 complete 闭包。

    从麦克风发出的语音
    importTLSphinxlet hmm =...// Path to the acoustic modellet lm =...// Path to the language modellet dict =...// Path to the language dictionaryiflet config =Config(args: ("-hmm", hmm), ("-lm", lm), ("-dict", dict)) {
     iflet decoder =Decoder(config:config) {
     decoder.startDecodingSpeech {
     iflet hyp: Hypotesis =$0 {
     println(hyp)
     } else {
     // Can't decode any speech because an error }
     }
     } else {
     // Handle Decoder() fail }
    } else {
     // Handle Config() fail }//At some point in the future stop listen to the micdecoder.stopDecodingSpeech()

    安装

    集成 TLSphinx的简单方法是使用 Carthage 或者类似的方法来获取框架包。 这让你可以集成框架和 Sphinx 模块,而无需使用 。

    Carthage

    Cartfile 中,添加对 TLSphinx的最后一个版本的引用:

    
    github"Tryolabs/TLSphinx" ~> 0.0.4
    
    
    
    

    然后运行 carthage update,这应该获取并构建 TLSphinx的最后一个版本。 完成之后,将 TLSphinx.framewok 插件捆绑到XCode的链接框架和库。 你必须告诉XCode在哪里找到 Sphinx 模块,该模块位于 Carthage checkout中。 要这样做:

    • 添加 $(SRCROOT)/Carthage/Checkouts/TLSphinx/Sphinx/include 头搜索路径的递归
    • 添加 $(SRCROOT)/Carthage/Checkouts/TLSphinx/Sphinx/lib 库搜索路径的递归
    • 在快速编译器搜索路径中,添加 $(SRCROOT)/Carthage/Checkouts/TLSphinx/Sphinx/include 导入路径
    手册

    从这个存储库下载项目并将 TLSpinx项目拖到XCode项目中。 在 Sphinx Sphinx Sphinx中,如果遇到关于缺少标题和/或者库的错误,请将 Spinx/include 目录添加到库搜索路径和库搜索路径中,并将它标记为 recursive

    社区

    Slack

    请加入我们 !

    作者

    BrunoBerisso,bruno@tryolabs.com

    许可证

    TLSphinx在MIT许可证下可用。 有关详细信息,请参阅许可证文件。


    WRAP  换行  Swift  poc  pocket  Pocketsphinx  
    相关文章