CMUS狮身人面像(七)-Android 上的 PocketSphinx

本教程介绍了GitHub上提供的演示应用程序。

PocketSphinx Android 演示

为了运行演示应用程序,我们建议使用 Android Studio。您可以从官方下载页面下载Android Studio IDE和sdk 。

从 Android Studio 构建并运行

为了在 IDE 中获取演示,请选择从 VCS 签出项目,选择GitHub并输入项目 URL:https://github.com/cmusphinx/pocketsphinx-android-demo

项目设置完毕后,您的 IDE 将自动更新并下载所有依赖项。您现在应该能够运行该项目。

启动应用程序后,识别器将需要一些时间来初始化。初始化后,它将等待关键字“哦,强大的计算机”。一旦检测到此关键字,它会要求您选择演示 - “数字”、“天气”或“电话”。“digits”演示识别 0 到 9 的数字,“weather”演示识别天气预报,“phones”演示演示语音识别。

要尝试某个演示,请将此项目导入 IDE 并照常运行。如果出现错误,请检查 logcat 以获取更多详细信息。

从 Eclipse 构建并运行

我们不再支持 Eclipse 项目,请考虑升级 SDK。

从命令行构建并运行

您还可以使用 gradle 构建系统构建项目。

  1. 从 Github 克隆存储库:
    git clone https://github.com/cmusphinx/pocketsphinx-android-demo.git.
  2. 连接您的物理设备或设置虚拟设备。
  3. 创建一个文件local.properties指向 sdk 文件夹:
    sdk.dir = /home/user/android/sdk.
  4. 跑步gradle installDebug。它将在设备上构建并安装应用程序。
  5. 从设备应用程序菜单手动运行应用程序。

使用 pocketsphinx-android

在 Android 项目中引用该库

该库作为 Adroid Archive ( AAR )分发,其中包括针对不同架构的二进制 so 文件和独立的 Java 代码。

在 Android Studio 中,您需要将 AAR 包含到您的项目中。只需转到 File > New > New module并选择Import .JAR/.AAR Package

您还可以使用命令行将 AAR 添加到您的项目中,如 本 stackoverflow 帖子中所述。

将 AAR 作为模块导入到项目中后,请确保将其列为主模块的依赖项app/build.gradle

dependencies {
    compile project(':aars')
}

设置权限

为了存储资产文件,您的应用程序必须具有WRITE_EXTERNAL_STORAGE 权限。要录制音频,您需要RECORD_AUDIO权限。请注意,从Android 6.0开始,RECORD_AUDIO不会自动启用,而是必须在应用程序设置中手动确认。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />

包括资源文件

在 Android 中随应用程序传送资源文件的标准方法是将它们放在assets/项目的目录中。为了使它们可用于 pocketsphinx,这些文件应该有物理路径。但是,只要它们位于.apk中,它们就没有这样的物理路径。

pocketsphinx-android 中的类Assets提供了一种自动将资源文件复制到目标设备的外部存储的方法。 通过从位于顶部的文件edu.cmu.pocketsphinx.Assets#syncAssets中读取项目来同步资源。在复制之前,它会匹配资产和外部存储上同名文件的 MD5 校验和(以防存在)。assets.lstassets/

它仅在信息不完整(外部存储上没有文件,.md5 文件不可用)或哈希不匹配时复制文件。PocketSphinxAndroidDemo 包含一个ant生成文件的脚本assets.lst ,.md5查找assets.xml.

ant请注意,如果构建脚本在构建过程中未正确运行,资产可能会不同步。因此,您应该确保脚本运行或创建 md5 文件和assets.lst您自己。

要将资产同步集成到您的应用程序中,请执行以下操作:

  1. 将构建文件从演示应用程序复制models/assets.xml到您的应用程序的同一文件夹中app
  2. 编辑app/build.gradle要运行的构建文件assets.xml,就像在 Android 演示中一样:
ant.importBuild 'assets.xml'
preBuild.dependsOn(list, checksum)
clean.dependsOn(clean_assets)

这应该够了吧。您现在可以验证assets.lst文件是否已创建以及 md5 文件是否已更新。

示例应用程序

pocketsphinx-android 的类和方法的设计类似于 pocketsphinx 中使用的相同工作流程,不同之处在于基本数据结构被转换为类,而与这些结构一起使用的函数被转换为相应类的方法。因此,如果您熟悉 pocketsphinx,您也应该对 pocketsphinx-android 感到满意。

SpeechRecognizer访问解码器功能的主类。它是在构建器的帮助下创建的SpeechRecognizerSetup。ASpeechRecognizerBuilder允许配置解码器的主要属性以及其他参数。参数的键和值与在命令行上传递给 pocketsphinx 二进制文件的键和值相同。在此处阅读有关调整 pocketsphinx 性能的更多信息 。

recognizer = defaultSetup()
	    .setAcousticModel(new File(assetsDir, "en-us-ptm"))
	    .setDictionary(new File(assetsDir, "cmudict-en-us.dict"))
	    .getRecognizer();
recognizer.addListener(this);

解码器配置是一个包含 IO 操作的漫长过程,因此建议在异步任务中运行它。

解码器支持多个命名搜索,您可以在运行时切换:

// Create keyword-activation search
recognizer.addKeyphraseSearch(KWS_SEARCH, KEYPHRASE);

// Create grammar-based searches
File menuGrammar = new File(assetsDir, "menu.gram");
recognizer.addGrammarSearch(MENU_SEARCH, menuGrammar);

// Next search for digits
File digitsGrammar = new File(assetsDir, "digits.gram");
recognizer.addGrammarSearch(DIGITS_SEARCH, digitsGrammar);

// Create language model search
File languageModel = new File(assetsDir, "weather.dmp");
recognizer.addNgramSearch(FORECAST_SEARCH, languageModel);

设置解码器并添加所有搜索后,您可以开始识别:

recognizer.startListening(searchName);

onEndOfSpeech您将在识别器侦听器的回调中收到有关语音结束事件的通知。然后您可以致电recognizer.stop()或 recognizer.cancel()。后者会取消识别,前者会使最终结果传入onResult回调中。

在识别过程中,您将在onPartialResult 回调中收到部分结果。

您还可以访问 swig 中包装在 Java 类中的其他 Pocketsphinx 方法。有关详细信息,请检查、DecoderHypothesis类 。SegmentNBest

构建 pocketsphinx-android

Pocketsphinx 提供了预构建的二进制文件,在各种平台上编译它具有挑战性。除非您完全了解自己在做什么,否则您不应该自己构建它。我们建议使用预构建的二进制文件。

构建依赖关系

搭建步骤

您需要签出 sphinxbase、pocketsphinx 和 pocketsphinx-android 并将它们放在同一目录中。

root-directory
├─ pocketsphinx
├─ sphinxbase
└─ pocketsphinx-android

旧版本可能与最新的 pocketsphinx-android 不兼容,因此您需要确保使用最新版本。您可以使用以下命令来签出存储库:

git clone https://github.com/cmusphinx/sphinxbase
git clone https://github.com/cmusphinx/pocketsphinx
git clone https://github.com/cmusphinx/pocketsphinx-android

排列目录后,您需要更新local.properties 项目根目录中的文件并定义以下属性:

  • sdk.dir– Android SDK 的路径
  • ndk.dir– Android NDK 的路径

例如:

sdk.dir=/home/user/local/adt-bundle-linux-x86_64-20140321/sdk
ndk.dir=/home/user/local/android-ndk-r9d

一切设置完毕后,运行gradle build。这将 创建pocketsphinx-android-5prealpha-debug.aar和 。pocketsphinx-android-5prealpha-release.aarbuild/outputs/aar

相关推荐

  1. CMUS狮身人面像)-Android PocketSphinx

    2024-04-29 16:56:04       38 阅读
  2. CMUS狮身人面像(三)-建立一个语音词典

    2024-04-29 16:56:04       36 阅读
  3. CMUS狮身人面像(四)-构建语言模型

    2024-04-29 16:56:04       30 阅读
  4. Android获取CPU使用率

    2024-04-29 16:56:04       35 阅读
  5. 学习Android第十

    2024-04-29 16:56:04       39 阅读
  6. 学习Android第二十

    2024-04-29 16:56:04       37 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-29 16:56:04       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-29 16:56:04       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-29 16:56:04       87 阅读
  4. Python语言-面向对象

    2024-04-29 16:56:04       96 阅读

热门阅读

  1. golang变量常见问题总结

    2024-04-29 16:56:04       31 阅读
  2. go圣经 ——方法

    2024-04-29 16:56:04       38 阅读
  3. 【AI大模型】Prompt Engineering 基础知识与挑战

    2024-04-29 16:56:04       35 阅读
  4. 【Spring AI】03. 图像生成 API

    2024-04-29 16:56:04       31 阅读
  5. git版本控制基础工作流

    2024-04-29 16:56:04       31 阅读
  6. k8s的PV/PVC详解以及使用范例

    2024-04-29 16:56:04       29 阅读
  7. Android面试

    2024-04-29 16:56:04       32 阅读
  8. 从零开始搭建SpringCloud

    2024-04-29 16:56:04       32 阅读
  9. react怎么只让接口请求一次

    2024-04-29 16:56:04       31 阅读
  10. P9586 「MXOI Round 2」游戏

    2024-04-29 16:56:04       32 阅读