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

构建依赖关系

  • 摇篮
  • 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.mfbz.cn/a/583538.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vue根据输入n动态生成n个表单

我的构想&#xff1a;在输入框中输入一个数字n&#xff0c;然后点击一个按钮&#xff0c;弹出一个弹窗&#xff0c;里面有n个表单。 这是按钮的vue代码&#xff1a;数值保存在form.number里面&#xff0c;每次数字改变会触发numberChange //...略 <el-form-item prop"…

POCEXP编写—多线程

POC&EXP编写—多线程 1. 前言2. 多进程&多线程2.1. 多进程2.1.1. 案例 2.2. 多线程2.2.1. 案例&#xff1a; 2.3. POC的案例&#xff08;模板&#xff09; 3. UA头设置3.1. 随机UA头3.1.1. 案例3.1.2. 模板拼接 4. 代理Proxy4.1. 单代理案例4.2. 多代理案例4.2.1. 请求…

【2024最叼教程】Appium自动化环境搭建保姆级教程

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

鸿蒙内核源码分析(线程概念篇) | 是谁在不断的折腾CPU

本篇说清楚任务的问题 在鸿蒙内核线程(thread)就是任务(task)&#xff0c;也可以叫作业.线程是对外的说法&#xff0c;对内就叫任务.跟王二毛一样&#xff0c; 在公司叫你王董&#xff0c;回到家里还有领导&#xff0c;就叫二毛啊.这多亲切.在鸿蒙内核是大量的task&#xff0c…

【Linux系列】 离线安装vnc 可视化桌面

离线安装vnc 可视化桌面 缘下载安装vnc初始化链接 缘 项目需要下载 下载地址&#xff1a; http://mirror.centos.org/centos/7/updates/x86_64/Packages/tigervnc-license-1.8.0-31.el7_9.noarch.rpm http://mirror.centos.org/centos/7/os/x86_64/Packages/libXfont2-2.0.…

Word插件开发

VSTO是Visual Studio Tools for Office的简称&#xff0c;它是Microsoft Visual Studio的一个扩展&#xff0c;用于开发基于Microsoft Office平台的应用程序。VSTO提供了一套API和工具&#xff0c;使开发人员能够利用Visual Studio IDE来开发定制的Office解决方案。 在 Visual…

DiffusionGAN ——最快的小波扩散模型应用研究

介绍 扩散模型最近出现并迅速发展&#xff0c;吸引了许多研究人员的兴趣。这些模型能从随机的噪声输入生成高质量的图像。在图像生成任务中&#xff0c;它们的表现尤其优于最先进的生成模型&#xff08;GANs&#xff09;。扩散模型可以灵活地处理各种条件输入&#xff0c;从而…

knife4j swagger 使用笔记

1.接口访问的端口跟后台设置的不一致&#xff0c;接口请求无反应 处理办法 2.响应参数不显示问题 &#xff08;1&#xff09;返回的参数里面一定要有响应的参数对象&#xff0c;如下&#xff1a; &#xff08;2&#xff09;TableDataInfo 定义成泛型类 TableDataInfo package…

移动应用安全

移动应用安全 移动应用安全主要关注Android、iOS、Windows Phone等平台上移动应用软件安全状态。它涉及应用程序在其设计运行的平台上下文中的安全问题、它们使用的框架以及预期的用户集。所有主流的移动平台都提供大量可选的安全控制&#xff0c;旨在帮助软件开发人员构建安全…

浅析扩散模型与图像生成【应用篇】(十八)——ControlNet

18. Adding Conditional Control to Text-to-Image Diffusion Models 现有的文生图模型如Stable Diffusion通常需要人工输入非常准确的提示词&#xff0c;而且生成的结果还是完全随机不可控制的&#xff0c;只能通过生成多个结果&#xff0c;再从中选取最佳方案。而ControlNet的…

竞争分析:波特五力模型

波特五力模型是分析企业竞争环境的一个分析模型。 根据波特的观点&#xff0c;每家企业都受到“直接竞争对手、顾客、供应商、潜在新进公司和替代性产品”这五个“竞争作用力”的影响。 我们用波特五力模型试着分析下实体书店竞争是否激励。 直接竞争对手&#xff1a;如果直接…

料堆体积测量新方案:激光雷达

激光雷达测量料堆体积是一种高效且精确的方法。激光雷达的工作原理与雷达相似&#xff0c;通过发射激光束探测目标的位置、速度等特征量。在测量料堆体积时&#xff0c;激光雷达系统向料堆发射激光束&#xff0c;然后接收从料堆表面反射回来的信号。通过对这些反射信号的处理和…

Linux网络之DNS域名解析

一、DNS概述 1.1什么是DNS 域名解析协议&#xff0c;将域名转换成IP地址 1.2为什么要用DNS IP地址不便于记忆&#xff0c;DNS使用户可以通过易记的域名快速访问各种网络资源。 192.168.0.0—— ip地址过长而且都是数字&#xff0c;不方便记忆就出现了域名 www.baidu.com—…

记一次线上日志堆栈不打印问题排查(附:高并发系统日志打印方案可收藏)

目录 一.线上的日志堆栈不打印了二.一步一步仔细排查三.最后搞定四.聊一聊线上日志到底应该怎么打印4.1 日志打印的诉求4.2 常见的系统日志上报方案4.2.1 ELK 方案4.2.2 自定义log appender 完成应用日志采集. 4.3 日志常见框架傻傻分不清4.4 日志在高并发系统中需要注意的 tip…

神仙级Python入门教程,手把手教你从0到精通,学不会算我输!

亲爱的朋友们&#xff0c;你是否对编程充满好奇&#xff0c;却觉得它遥不可及&#xff1f; 你是否想学习一门强大的编程语言&#xff0c;却不知从何下手&#xff1f; 那么&#xff0c;这篇“神仙级”Python入门教程就是为你量身打造的&#xff01;不论你是编程小白还是有一定…

linux笔记4--shell命令1

文章目录 一. 目录1.说明2.盘符3.linux根目录(以Ubuntu为例)①说明②根目录下一些文件夹的解析/home/root/mnt/media/var/cdrom/etc/lib (/lib32--32位的&#xff0c;/lib64-64位的)/lostfound/boot/proc/bin/sbin/snap/srv/usr/opt/dev/run/tmp 二. ls命令--操作文件夹1.说明2…

探索阿里巴巴商品详情API接口:开启电商数据之旅

阿里巴巴商品详情API接口是阿里巴巴开放平台提供的一项服务&#xff0c;它允许开发者通过调用接口获取指定商品的详细信息&#xff0c;包括商品标题、价格、库存、描述、图片等。这些数据对于电商从业者来说具有极高的价值&#xff0c;可以帮助他们更好地了解市场动态&#xff…

层次分析法(AHP)计算原理解释

AHP层次分析法是一种解决多目标复杂问题的定性和定量相结合进行计算决策权重的研究方法。该方法将定量分析与定性分析结合起来&#xff0c;用决策者的经验判断各衡量目标之间能否实现的标准之间的相对重要程度&#xff0c;并合理地给出每个决策方案的每个标准的权数&#xff0c…

vue下载文件时显示进度条

1.单个下载&#xff08;开始是导出按钮 下载显示进度条&#xff09; html <el-button click.stop"exportReport(scope.row, scope.index)" v-if"!scope.row.schedule" icon"el-icon-download"size"small" type"text"styl…

Linux第十五章

&#x1f436;博主主页&#xff1a;ᰔᩚ. 一怀明月ꦿ ❤️‍&#x1f525;专栏系列&#xff1a;线性代数&#xff0c;C初学者入门训练&#xff0c;题解C&#xff0c;C的使用文章&#xff0c;「初学」C&#xff0c;linux &#x1f525;座右铭&#xff1a;“不要等到什么都没有了…
最新文章