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

news/2024/9/22 21:34:20/

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

android-demo">PocketSphinx Android 演示

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

android-studio">从 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. 从设备应用程序菜单手动运行应用程序。

android">使用 pocketsphinx-android

android-project">在 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

android">构建 pocketsphinx-android

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

构建依赖关系

  • 摇篮
  • JDK >= 1.6
  • 斯威格>= 2.0
  • 安卓软件开发工具包
  • 安卓NDK

搭建步骤

您需要签出 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


http://www.ppmy.cn/news/1443780.html

相关文章

HTML批量文件上传方案——图像预览方式

作者:私语茶馆 1.HTML多文件上传的关键方案 多文件上传包括:文件有效性校验,文件预览、存储和进度展示多个方面,本章节介绍的是文件预览的实现方案。 2.文件上传前预览 2.1.效果 选择文件前: 选择文件后: 2.2.CSS文件代码 StorageCenter.css代码 html {font-family:…

4.29训练赛h题function

1.利用下标和值直接定义b[n]数组 2.如果加入有相同的想到b[n]的二维数组 3.很蠢的问题 ans定义的位置不一样因为每次答案都不样啊&#xff0c;仔细分析一下。。。。 #include <bits/stdc.h> using namespace std; #define int long long const int N1e510; vector&l…

spring-boot控制bean的创建顺序

1、order注解&#xff08;不一定有效&#xff09; org.springframework.core.annotation.Order 2、dependsOn注解&#xff08;有效&#xff09; org.springframework.context.annotation.DependsOn 3、提前将bean注册为BeanDefinition 1、实现BeanDefinitionRegistryPostP…

与Apollo共创生态:我们携手远航

目录 小程一言会议记录 回望7年发展展望未来小程有感 小程一言 4月22日&#xff0c;百度Apollo在北京车展前夕举办了以“破晓•拥抱智变时刻”为主题的智能汽车产品发布会。我在观看后也是很是触动 作为在校大学生的我&#xff0c;从大一开始知道Apollo开始&#xff0c;Apollo…

Kubernetes:云原生时代的核心引擎

文章目录 一、Kubernetes简介&#xff1a;引领云原生潮流二、K8s的核心特性&#xff1a;自动化与智能化三、K8s的实践应用&#xff1a;打造高效云原生应用架构四、K8s的挑战与应对&#xff1a;安全与性能并重五、K8s的未来展望&#xff1a;无限可能与挑战并存《Kubernetes快速进…

Python中format的常见用法

一、填充 1、按默认顺序填充 name "Alice" age 25 print("My name is {} and I am {} years old.".format(name, age))输出&#xff1a;My name is Alice and I am 25 years old. 2、指定位置 name "Bob" age 30 print("My name is…

dremio数据湖sql行列转换及转置

1、行转列 (扁平化) 数据准备 表 aa 1.1 cross join unnest 在Dremio中&#xff0c;UNNEST 函数用于将数组或复杂类型的列&#xff08;如JSON、Map或Array类型&#xff09;中的值“炸裂”&#xff08;分解&#xff09;成多行. with aa as ( select 上海 as city, ARRAY[浦东…

计算机系统概述试题

01&#xff0e;完整的计算机系统应包括()。 A.运算器、存储器、控制器 B.外部设备和主机 C.主机和应用程序 D.配套的硬件设备和软件系统 02.冯诺依曼机的基本工作方式是()。 A.控制流驱动方式 B.多指令多数据流方式 C.微程序控制方式 D.数据流驱动方式 03.下列()是冯诺依曼机…