iOS编程技巧总结之语音篇(三)- OpenEars框架及其使用2

OpenEars是一个开源的iOS类库,用于在iPhone和iPad实现语音识别功能。 立即下载

5. 如何在自己的应用中添加离线语音识别功能

看了OpenEarsSampleApp这个示例项目后,其实基本上已经大概了解了如何在应用中添加离线语音识别功能,不过这里还是要大概总结下一些基本的步骤(具体的操作完全可以参照OpenEarsSampleApp这个官方示例项目来看):

(1)   创建自己的项目,下载OpenEars框架,然后把解压缩文件中的Frameworks文件夹拖到项目中,确保选中”Create groups for any added folders”,而不是”Create folder references for any added folders”.

(2)   可选:为减少应用大小,可以切换到build setting,将Deployment Postprocessing 设置为Yes

(3)  添加 AudioToolbox 和 AVFoundation 这两个框架。
iOS编程技巧总结之语音篇(原创)- <wbr>OpenEars框架及其使用2

(4)     使用语言模型生成器


在自己要用到语音识别的类(比如示例中的ViewController.m)中添加下面的代码:

#import

 

在需要初始化语言模型生成器的地方添加以下代码:

LanguageModelGenerator *languageModelGenerator = [[LanguageModelGenerator alloc] init];

在OpenEarsSampleApp这个官方示例中,是在viewDidLoad方法中添加的这行代码。

在使用离线语音识别的时候,开发者需要定义自己想要在应用中识别的词汇。对于离线语音识别的iPhone应用来说,词汇在3到300个单词间为宜。

在你想要创建自己语言模型的方法中,(比如示例项目的viewDidLoad方法),添加以下方法调用(使用你想要识别的真实词汇和短语替代其中的”WORD”和”A PHRASE”.

NSArray *words = [NSArray arrayWithObjects:@"WORD", @"STATEMENT", @"OTHER WORD", @"A PHRASE", nil];

NSString *name = @"NameIWantForMyLanguageModelFiles";

NSError *err = [lmGenerator generateLanguageModelFromArray:words withFilesNamed:name];

NSDictionary *languageGeneratorResults = nil;

 

NSString *lmPath = nil;

 

NSString *dicPath = nil;

if([err code] == noErr) {

        

         languageGeneratorResults = [err userInfo];

                

         lmPath = [languageGeneratorResults objectForKey:@"LMPath"];

         dicPath = [languageGeneratorResults objectForKey:@"DictionaryPath"];               

 

} else {

         NSLog(@"Error: %@",[err localizedDescription]);

}

如果你使用默认的英语语言模型生成,那么需要将单词和短语全部大写(但根据我的实际测试,不需要这么做)。如果你需要提前创建一个固定的语言模型,而不是在应用中动态创建,那么可以使用Simulator提交自己的语言模型,然后使用Simulator documents folder script来获取语言模型和词典文件,然后手动添加到应用中。

(5)   使用PocketsphinxController

在使用PocketsphinxController的时候,需要准备好一个语言模型和一个语音词典文件。这两个文件将决定PocketsphinxController可以识别的词汇。当然,在上一步中已经说明了语言模型和语音词典的创建方式。

在项目中需要用到语音识别的类的.h文件顶部(比如示例中的ViewController.h)添加以下代码:

#import

然后在类声明部分添加以下代码:

PocketsphinxController *pocketsphinxController;

然后在.m文件中添加以下方法:

- (PocketsphinxController *)pocketsphinxController {

         if (pocketsphinxController == nil) {

                 pocketsphinxController = [[PocketsphinxController alloc] init];

         }

         return pocketsphinxController;

}

当然,如同示例项目中的代码一样,你还可以在这里设置它的一些属性。

然后在需要实现语音识别的方法(比如示例项目的viewDidLoad方法)中添加以下代码:

[self.pocketsphinxController startListeningWithLanguageModelAtPath:lmPath dictionaryAtPath:dicPath languageModelIsJSGF:NO];


当然,在OpenEarsSampleApp这个示例项目中,把这行代码放在startListening这个方法中,然后在viewDidLoad方法中调用startListening方法,本质上是一样的。

 

(6)   使用OpenEarsEventsObserver


接下来将以下代码添加到需要实现语音识别类的.h文件中:

#import

在类声明部分添加对该代理的继承说明,比如在示例项目中如以下代码所示:
@interface ViewController : UIViewController

 

然后添加以下实例变量:
OpenEarsEventsObserver *openEarsEventsObserver;

 

还需要添加一个属性:

@property (nonatomic, strong) OpenEarsEventsObserver *openEarsEventsObserver;

 

在.m实现文件中添加以下方法:
// Lazily allocated OpenEarsEventsObserver.

- (OpenEarsEventsObserver *)openEarsEventsObserver {

         if (openEarsEventsObserver == nil) {

                 openEarsEventsObserver = [[OpenEarsEventsObserver alloc] init];

         }

         return openEarsEventsObserver;

}

 

接下来,在你想要使用第一个OpenEars功能之前(比如在第一个self.fliteController say:withVocie: 消息或是在第一个self.pocketsphinxController startListeningWithLanguageModelAtPath:dictionaryAtPath:languageModelIsJSGF: message前)添加以下代码:
         [self.openEarsEventsObserver setDelegate:self];

在官方示例代码中,是在viewDidLoad方法的第二行代码添加的。

 

然后要添加以下代码方法的实现代码:

- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID {

         NSLog(@"The received hypothesis is %@ with a score of %@ and an ID of %@", hypothesis, recognitionScore, utteranceID);

}

 

- (void) pocketsphinxDidStartCalibration {

         NSLog(@"Pocketsphinx calibration has started.");

}

 

- (void) pocketsphinxDidCompleteCalibration {

         NSLog(@"Pocketsphinx calibration is complete.");

}

 

- (void) pocketsphinxDidStartListening {

         NSLog(@"Pocketsphinx is now listening.");

}

 

- (void) pocketsphinxDidDetectSpeech {

         NSLog(@"Pocketsphinx has detected speech.");

}

 

- (void) pocketsphinxDidDetectFinishedSpeech {

         NSLog(@"Pocketsphinx has detected a period of silence, concluding an utterance.");

}

 

- (void) pocketsphinxDidStopListening {

         NSLog(@"Pocketsphinx has stopped listening.");

}

 

- (void) pocketsphinxDidSuspendRecognition {

         NSLog(@"Pocketsphinx has suspended recognition.");

}

 

- (void) pocketsphinxDidResumeRecognition {

         NSLog(@"Pocketsphinx has resumed recognition.");

}

 

- (void) pocketsphinxDidChangeLanguageModelToFile:(NSString *)newLanguageModelPathAsString andDictionary:(NSString *)newDictionaryPathAsString {

         NSLog(@"Pocketsphinx is now using the following language model: \n%@ and the following dictionary: %@",newLanguageModelPathAsString,newDictionaryPathAsString);

}

 

- (void) pocketSphinxContinuousSetupDidFail { // This can let you know that something went wrong with the recognition loop startup. Turn on OPENEARSLOGGING to learn why.

         NSLog(@"Setting up the continuous recognition loop has failed for some reason, please turn on OpenEarsLogging to learn more.");

}

 

以上这些代理方法并不都是必须实现的,根据项目的实际需要来决定,其具体作用在官方示例项目中已经非常清楚,这里就不废话了。

 

(7)   使用FliteController(语音合成)

 

为了使用FliteController,首先需要在项目中添加至少一种Flite语音。当然,在将OpenEars框架添加到应用中时,就已经添加了一种名为Slt的默认语音。你还可以通过这里获得其它8种免费的语音: https://bitbucket.org/Politepix/openearsextras

 

首先在要实现语音合成的类的.h文件(示例中的ViewController.h)顶部添加以下代码:

#import

#import

 

然后在类声明中添加以下实例变量:

FliteController *fliteController;

Slt *slt;

 

接下来添加两个属性声明:

@synthesize fliteController;

@synthesize slt;

 

然后在.m文件中添加以下方法:

// Lazily allocated slt voice.

- (Slt *)slt {

         if (slt == nil) {

                 slt = [[Slt alloc] init];

         }

         return slt;

}

 

// Lazily allocated FliteController.

- (FliteController *)fliteController {

         if (fliteController == nil) {

                 fliteController = [[FliteController alloc] init];     

 

         }

         return fliteController;

}

以上代码很简单,只不过是初始化方法而已。

接下来在想要调用语音合成的方法中添加以下代码:


[self.fliteController say:[NSString stringWithFormat:@"You said %@",hypothesis] withVoice:self.slt];

在示例中是分别在- (void) pocketsphinxDidReceiveHypothesis:(NSString *)hypothesis recognitionScore:(NSString *)recognitionScore utteranceID:(NSString *)utteranceID和pocketsphinxDidCompleteCalibration这两个方法中调用的。

基本上,使用以上的步骤,就可以在项目中轻松添加基本的英语语音识别和语音合成功能了。

付费插件介绍:

1.     离线语音识别,忽略不在词汇表中的单词

2.     离线语音识别(实时)

3.     将OpenEars离线语音识别的音频保存为wav文件

4.     更好的语音

参考:http://www.politepix.com/openears/

IOS应用源码之【类库与框架】-OpenEars(语音识别_TTS).rar 立即下载

相关推荐

手把手教 - VSCode 开发 GD32F450 单片机

系统版本:rt-thread v5.2.2单片机型号:GD32F450ZK基于文章进行开发。

weixin_46158019的博客 841

iOS编程技巧总结之语音篇(二)- OpenEars框架及其使用1

1.什么是OpenEars  OpenEars是面向iOS平台的一个离线的语音识别和text-to-speech(文字语音转换)开发工具包。因为是离线的,它无需象Siri那样需要和服务器进行网络连接。当然,还要强调一点的是,OpenEars主要是针对英语的。最重要的是,它是免费的。除了基本的免费功能,它还提供了可以用来扩展基本功能的付费插件,也即Politepix OpenEars插件。

西江月 1675

淘宝链接跳转微信全攻略:自建合规中转页实现私域引流

在跨平台运营中,链接跳转是连接不同生态、实现流量引导的关键技术。其核心原理是通过服务器端或前端逻辑,将用户从一个平台的链接安全引导至目标页面,同时规避平台间的访问限制。这项技术的核心价值在于打破数据孤岛,实现跨平台用户沉淀与精细化运营,广泛应用于电商引流、私域流量构建和跨平台营销等场景。本文聚焦于**淘宝短链**与**企业微信**之间的跳转难题,提供了一套基于自建中转页面的完整工程解决方案,手把手教你如何通过合规的技术手段,将淘宝流量高效、安全地引导至微信生态,并实现数据追踪与客户分流。

weixin_34185512的博客 411

基于iOS平台配置免费离线语音识别功能-OpenEars

用了半天时间弄明白了在iOS上如何配置语音识别功能,然后用半天时间写了一个demo,公司坑爹的是不用科大飞讯的语音识别,而使用的是OpenEars,用google查了一下最新的介绍文章是2013年的,OpenEars是一款国外比较主流的语音识别的第三方框架,全是英文文档(吐槽一下,做开发必须要学好英语啊). 1.什么是OpenEars?         OpenEars是面向iOS平台的一个离

Victor_Barnett 的家园 4466

【Unity3D】关于unity中spriteAtlas的打包方案及使用时内存状态的多组对照实验

unity项目中使用精灵(Sprite)为了降低性能消耗,我们可以使用精灵图集(Sprite Atlas)技术,它能够将多个纹理合并成一个大纹理

云渊寒烬 5101

Win10下YOLOv8环境搭建避坑指南:从CUDA 11.6到cuDNN配置全流程

本文详细介绍了在Windows 10系统下搭建YOLOv8环境的完整流程,包括CUDA 11.6和cuDNN的配置步骤,以及常见问题的解决方案。通过硬件准备、软件安装、环境验证和性能优化等环节,帮助开发者高效完成YOLOv8环境配置,提升目标检测项目的开发效率。

defi6farmer的博客 224

OpenEars

OpenEars是一个开源的iOS类库,用于在iPhone和iPad实现语音识别功能. 版本   OpenEars目前的版本是0.913。 特性   OpenEars具有以下功能(特性):   在后台线程中持续侦听语音   暂停或恢复语音处理   在第一代iPhone上CPU平均占用率低于8%(语音解码、文本-语音转换、更新用户界面和其他间非持续性功能将临时占用更

ch_soft的专栏 1779

3D Slicer学习记录(4)-PLUSapp连接双目相机Intel Realsense

plusapp是基于openIGTLink协议的免费的开源库和应用程序API接口,用于数据采集、预处理、校准和实时流成像、位置跟踪和其他传感器数据。这里以intel realsense双目相机为例详细的演示整个图像流导入到3D Slicer的流程。

weixin_39090239的博客 1346

iOS编程技巧总结之语音篇-- OpenEars框架及其使用1

1.什么是OpenEars  OpenEars是面向iOS平台的一个离线的语音识别和text-to-speech(文字语音转换)开发工具包。因为是离线的,它无需象Siri那样需要和服务器进行网络连接。当然,还要强调一点的是,OpenEars主要是针对英语的。最重要的是,它是免费的。除了基本的免费功能,它还提供了可以用来扩展基本功能的付费插件,也即Politepix OpenEars插件。

快乐驿站 2254

Altium Designer(AD)仿真实验操作指南

1:运行仿真2:设置仿真3:放置电源模块4:放置器件模块5:探针。

XU157303764的博客 8899

面向业务角色的 SAP Fiori Space 与 Page 创建全流程实战指南

业务角色导航设计:从Space与Page规划到实施 摘要:本文探讨了SAP S/4HANA Cloud和BTP ABAP环境中基于业务角色的导航设计方法。传统Fiori Launchpad的Group+Tile模式存在应用堆积问题,而新的Space与Page模型将导航按工作领域(如应付会计、销售代表)组织,每个Space包含多个任务导向的Page。文章详细介绍了从业务角色建模到Space/Page创建、分配的完整流程,包括核心概念解析、规划思路和具体操作步骤。重点阐述了如何根据业务需求选择创建方式(基于预交

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 183

iOS编程技巧总结之语音篇-- OpenEars框架及其使用2

继续上面的内容。 5. 如何在自己的应用中添加离线语音识别功能 看了OpenEarsSampleApp这个示例项目后,其实基本上已经大概了解了如何在应用中添加离线语音识别功能,不过这里还是要大概总结下一些基本的步骤(具体的操作完全可以参照OpenEarsSampleApp这个官方示例项目来看): (1)   创建自己的项目,下载OpenEars框架,然后把解压缩文件中的F

快乐驿站 1725

【Halcon-2D测量】add_metrology_object_rectangle2_measure 函数功能(用于向2D计量模型中添加旋转矩形(rectangle2类型)计量对象)

HALCON算子add_metrology_object_rectangle2_measure解析摘要 该算子是HALCON 2D计量模块的核心算子,用于添加旋转矩形计量对象并配置测量参数。主要功能包括:定义旋转矩形几何轮廓(中心坐标、主轴角度、长短半长);生成垂直于矩形边界的测量区域;设置边缘提取预处理参数(高斯平滑、振幅阈值)。关键注意事项:MeasureLength1必须小于矩形长短半长;角度参数Phi需使用弧度单位;多线程需同步模型句柄。该算子适用于方形螺母、PCB板边框等矩形零件的精密测量,需与a

weixin_45590420的博客 1223

Openears - 语音识别软件适用于iOS

Openears - 语音识别软件适用于iOS   就在几年前,语音识别软件技术是仅限于科幻小说。然而,在短短的时间内,语音识别已经成为现实和iPhone的开发者利用这一独特的工具,开发丰富多彩的外包iPhone项目。   OpenEars是可以用来和编辑免费为持续iPhone开发的一个新的iOS开源库。该库是用于设置语音识别软件在英语上的权利,如iPad和iPhone设备。目前,OpenEars

tinten0的专栏 1176

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

开源的语音识别+TTS for iPhone(一)Welcome To OpenEars

openEars是一个开源的语音识别+TTS库,在iphone APP中有几个款用到了该库,最近了一次升级,提高了代码的效率,并升级到了xcode4。politepix网站有openEars教程.以下转载,找个时间再翻译翻译吧.------------------------------------------------------------------

4679

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

开源的语音识别+TTS for iPhone(三)Configuring Your App For OpenEars

Configuring Your App For OpenEarsConventions used in these instructions:[OPENEARS] will be used to mean the path on your system to the OpenEars distribution folder after you downloaded and

1515

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

开源的语音识别+TTS for iPhone(二)Getting Started With OpenEars

Getting Started With OpenEarsConventions used in these instructions:[OPENEARS] will be used to mean the path on your system to the OpenEars folder after you downloaded and unzipped it. So,

2110

iOS编程技巧总结之语音篇--前言

在游戏和软件开发的世界里面最有挑战性的事情是什么?用C++进行服务器网络编程?用OpenGL进行3D渲染?用各种物理引擎来模拟控制物体的交互?用后台数据库进行海量数据分析和处理?这些看似很可怕的东西在一个名词的前面都不值一提,那就是人工智能。 事实上,人工智能不仅仅是游戏和软件开发,更是整个IT技术发展的终极目标。在无数的科幻小说和电影中,人工智能都是当之无愧的最佳配角(主角当然是打不死的人

快乐驿站 1014

iOS开源:OpenEars

OpenEars是由Politepix开发的语音识别和文本语音转换的iOS开源类库,可以用于iPhone和iPad应用。该类库使用了CMU Pocketsphinx、CMU Flite、和MITLM类库。 授权协议:CDDL http://www.poli

degager的专栏 675

OpenEars 语音处理Welcome to OpenEars: free speech recognition and speech synthesis for the iPhone

OpenEars   包括离线语音处理等等 http://www.politepix.com/openears/ Welcome to OpenEars: free speech recognition and speech synthesis for the iPhone Introduction Installation Basic conce

Just Do It 2351

Welcome to OpenEars iPhone voice recognition API!

From:   Download Politepix’s OpenEars OpenEars is an shared-source iOS framework for iPhone voice recognition and TTS. It lets you implement round-trip English language speech recognition and text-to

logcabin的专栏 1291

开源的语音识别+TTS for iPhone Welcome To OpenEars

http://www.politepix.com/openears openEars是一个开源的语音识别+TTS库,在iphone APP中有几个款用到了该库,最近了一次升级,提高了代码的效率,并升级到了xcode4。politepix网站有openEars教程.以下转载,找个时间再翻译翻译吧. ----------------------------------------------...

weixin_30627341的博客 1172

iOS10原生的语音转文字功能

#import <Foundation/Foundation.h> #import <Speech/Speech.h> @interface SpeechListener : NSObject <SFSpeechRecognitionTaskDelegate,SFSpeechRecognizerDelegate> @property...

diankuini1374的博客 268

[ios]ios tts的使用

参考:http://www.tekuba.net/program/327/ http://blog.sina.com.cn/s/blog_923fdd9b0101flx3.html   iOS平台由于本身不支持TTS,所以开发者如果想使自己的App具有TTS功能,首先要找到好用的TTS库。根据特酷吧的了解,在iOS平台有以下几个选择:1,OpenEars和FliteTTSGoogle下很容易...

weixin_34306446的博客 632

语音识别库整理

openEars 是一个开源的语音识别+TTS库。可以在IOS下使用。  http://www.politepix.com/openears/tutorial/ Julius 是开源语音双向处理库,不过目前仅对日语支持比较好。 Linux和Windows下都可以使用。  http://julius.sourceforge.jp/en_index.php SAPI

heartrude的专栏 3393

iOS 框架

1.OpenEars 语音识别 转载于:https://www.cnblogs.com/halou/archive/2011/05/28/2061072.html

weixin_30588675的博客 65
上一篇: iOS编程技巧总结之语音篇(二)- OpenEars框架及其使用1
下一篇: 10 个学习iOS开发的最佳网站
iXiJiangYue123
博客等级 码龄14年 5粉丝 2原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值