ios语音识别(讯飞)

语音识别系统

为了方便人们的生活,许多的方面都可以通过语音指令来代替手动输入来执行想要的指令。现在做语音识别的有一些不错的开放平台供我们使用,一家是科大讯飞平台,一家是百度语音平台。我个人比较偏爱科大讯飞,因为科大讯飞的优势在于大 段大段的文字识别上,准确率较高。这正好能符合我输入银行卡号准确无误的需求。这篇博客也主要讲的是讯飞语音SDK的使用。下面我们来详细看一下科大讯飞。

1.科大讯飞开放平台

2.科大讯飞iOS - API开放平台

科大讯飞的操作步骤

1.注册ID

正常的注册步骤,一步一步的按顺序来

注册完之后先创建新应用如第一个图,然后添加语音听写,在下载里面的SDK选择iOS下载。

2.导入讯飞SDK框架

下载下来SDK解压后有三个文件夹:doc文件夹:不用多说肯定是开发文档;重要的是接下来的那两个文件夹:一个是lib文件夹:存放科大讯飞SDK类库,这就是我们要导入的SDK;Sample:iOS的科大讯飞demo演示工程。

下面我们来创建一个工程,将lib文件夹下的“iflyMSC.framework”拷贝到工程目录,然后在工程中添加依赖库,如下图所示:

3.开始语音识别

这里已有界面提示的语音识别来讲,先用storyboard创建一个控制器,跳转两个界面分别是语音识别和文字转换界面。语音识别与FirstViewController相连接并连线属性以及按钮方法,文字识别同上。

3.1导入头文件

#import "AppDelegate.h"
#import "iflyMSC/IFlySpeechUtility.h"//

3.2登陆讯飞服务

在使用讯飞的语音解析之前,需要进行用户身份验证,即登陆讯飞服务器,这个在viewDidLoad()方法中添加两行代码即可.即讯飞服务器需要根据你当前用户的APPID才能同意你登陆。代码如下:

1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2     // Override point for customization after application launch.
3
4     //登录科大讯飞语音平台
5     NSString *appID = [NSString stringWithFormat:@"appid=%@",@"570f0a8b"];
6     [IFlySpeechUtility createUtility:appID];
7
8     return YES;
9 }

3.3在FirstViewController.m中编写语音识别的代码如下

#import "FirstViewController.h"
//第一步:引入库文件
//科大讯飞语音识别功能回调方法的接口文件
#import <iflyMSC/IFlyRecognizerViewDelegate.h>
//科大讯飞语音识别功能的声音识别视图
#import <iflyMSC/IFlyRecognizerView.h>
//科大讯飞语音识别功能中定义的常量
#import <iflyMSC/IFlySpeechConstant.h>

//遵循代理协议
@interface FirstViewController ()<IFlyRecognizerViewDelegate>

//语音识别对象
@property(nonatomic,strong)IFlyRecognizerView *iflyRecognizerView;
//接受相关结果的字符串
@property(nonatomic,strong)NSMutableString *result;

//展示识别内容TextView
@property (weak, nonatomic) IBOutlet UITextView *showContentTextView;

@end

@implementation FirstViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    //创建声音识别视图对象,初始化声音识别控件
    self.iflyRecognizerView= [[IFlyRecognizerView alloc] initWithCenter:self.view.center];
    //delegate需要设置,确保delegate回调可以正常返回
    self.iflyRecognizerView.delegate = self;
}

#pragma mark -  开始识别
- (IBAction)beginRecognise:(id)sender {
    [self startListenning];
}

- (void)startListenning
{
    //设置语音识别结果应用为普通文本领域
    [self.iflyRecognizerView setParameter: @"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
    //设置前端点检测时间为6000ms
    [self.iflyRecognizerView setParameter: @"6000" forKey:[IFlySpeechConstant VAD_BOS]];
    //设置后端点检测时间为700ms
    [self.iflyRecognizerView setParameter: @"700" forKey:[IFlySpeechConstant VAD_EOS]];
    //设置采样率为8000
    [self.iflyRecognizerView setParameter: @"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
    //设置为返回结果中包含标点符号
    [self.iflyRecognizerView setParameter: @"1" forKey:[IFlySpeechConstant ASR_PTT]];
    //设置语音识别完成后数据的返回数据结构类型xml
    [self.iflyRecognizerView setParameter: @"plain" forKey:[IFlySpeechConstant RESULT_TYPE]];
    //设置在Documents文件夹下缓存的文件名为temp.asr
    [self.iflyRecognizerView setParameter: @"temp.asr" forKey:[IFlySpeechConstant ASR_AUDIO_PATH]];
    //设置自定义的参数
    [self.iflyRecognizerView setParameter: @"custom" forKey:[IFlySpeechConstant PARAMS]];

    [self.iflyRecognizerView start];

}

3.4代理方法

讯飞对识别结果的处理采用的代理回调的方法,实现IFlySpeechSynthesizerDelegate协议的onResult:isLast:方法.
注意!!!!这里的是onResult,不是onResults,后者是无界面提示的语音解析的结果回调函数.

回调时默认传回来的数据是json数据,咱们大可不必疑惑解析到底使用哪种方式,科大讯飞已经为我们考虑到这些问题了,他官方提供了一个叫做“ISRDataHelper”用它解析就可以了。代码如下:

#pragma mark - 代理方法
//成功
-(void)onResult:(NSArray *)resultArray isLast:(BOOL)isLast{

    self.result = [[NSMutableString alloc] init];
    NSDictionary *dic = [resultArray objectAtIndex:0];

    for (NSString *key in dic)
    {
        [self.result appendFormat:@"%@",key];
    }
    NSLog(@"%@---------",_result);

    //自定义控件显示内容
    self.showContentTextView.text = [NSString stringWithFormat:@"%@%@",self.showContentTextView.text,self.result];

}
//失败
-(void)onError:(IFlySpeechError *)error{
    NSLog(@"error = %@",error);
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

4.语音识别文字的(说句话让它显示出你说的文字)

整体流程跟上面一样下面来写一下代码

#import "SecondViewController.h"

//第一步:引入头文件
//文字识别的回调方法接口
#import <iflyMSC/IFlySpeechSynthesizerDelegate.h>

//文字识别对象
#import <iflyMSC/IFlySpeechSynthesizer.h>

//科大讯飞语音框架定义的常量
#import <iflyMSC/IFlySpeechConstant.h>

@interface SecondViewController ()<IFlySpeechSynthesizerDelegate>//引入协议
@property (weak, nonatomic) IBOutlet UITextField *input;//接收框属性

//创建文字识别对象
@property (strong, nonatomic) IFlySpeechSynthesizer *synthesizer;

@end

@implementation SecondViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    //创建文字识别对象
    self.synthesizer = [IFlySpeechSynthesizer sharedInstance];

    //指定文字识别对象的代理对象
    self.synthesizer.delegate = self;

    //设置文字识别对象的关键属性
    [self.synthesizer setParameter:@"50" forKey:[IFlySpeechConstant SPEED]];
    [self.synthesizer setParameter:@"50" forKey:[IFlySpeechConstant VOLUME]];
    [self.synthesizer setParameter:@"XIAOYAN" forKey:[IFlySpeechConstant VOICE_NAME]];
    [self.synthesizer setParameter:@"8000" forKey:[IFlySpeechConstant SAMPLE_RATE]];
    [self.synthesizer setParameter:@"temp.pcm" forKey:[IFlySpeechConstant TTS_AUDIO_PATH]];
    [self.synthesizer setParameter:@"custom" forKey:[IFlySpeechConstant PARAMS]];
}

#pragma mark - 识别相关的内容
- (IBAction)beginRecgnise:(id)sender {

    [self.synthesizer startSpeaking:_input.text];
}

#pragma mark - 代理方法

-(void)onCompleted:(IFlySpeechError *)error{

}

这个是很方便的一种第三方的方法实现语音识别!

时间: 2024-10-04 13:05:07

ios语音识别(讯飞)的相关文章

iOS开发讯飞语音的集成

1.进入官网注册账号,登陆,注册,应用. 2,下载sdk  导入系统库. 3,关闭bitcode 4,初始化讯飞语音. NSString * initString = [[NSString alloc] initWithFormat:@"appid=%@",@"56fb34f4"]; [IFlySpeechUtility createUtility:initString]; 5.集成代码 #import <UIKit/UIKit.h> #import &

讯飞语音识别

使用讯飞开放平台实现语音识别合成 发 社会和产品的发展总是向着便利和智能的方法发展,对于手机的App来说也是如此.所以,现在的App都在缩减流程,优化使用体验,为的就是让用户用起来更加便利,提高App的入手度和用户粘性.那么另一方面的智能呢? 一个比较简单智能的实现方法就是在输入的地方加上语音识别,在输出显示的时候加上语音合成,直接进行语音播报,那么是不是对于司机等来说就是一个智能的体现呢? 现在做语音识别有一些不错的开放平台可以给我们直接提供使用,一家是科大讯飞开放平台,一家是百度语音开放平台

(转)IOS App中揉合讯飞SDK功能详细

转至:http://www.sufeinet.com/thread-2488-1-1.html 如何使用讯飞的语音SDK加入到你的iPhone应用中吧!1.首先请先到讯飞官方网站的开发者专区(http://open.voicecloud.cn/developer.php).如果你还没有注册,那么需要先注册一个开发者账号的.点击网站顶部的"免费注册"即可,使用你的自己的手机号码注册一个账号.2.仅仅注册了一个开发者账号还可以使用SDK,因为还需要申请Appid.登陆之后到自己的个人中心创

android 讯飞语音识别(离线)注意事项

讯飞语音识别:使用注意事项:mainfest.xml中一定要记得权限写进去21001:我的情况是没有写SpeechApp类,并且需要在application中注册:20005:无匹配结果23300:本地引擎错误,,我的问题是在于语法错误,少了一个分号,,,尼玛,调试好久才找到,而且不会有提示. 一般情况下引擎错误的原因: 1.java代码检查你的语法文件路径.语法ID等相关配置: 2.语法文件语法是否正确,可能多了分号,少了分号,等等,必须严格按照BNF语法(最常出现):

iOS-Senior23-科大讯飞语音识别1

科大讯飞语音识别 随着当今社会的高速发展,我们所使用的产品也向着遍历和智能的方面发展着,当然了手机端的App也不例外.现在的App都在缩减用户操作的流程,优化用户的体验,为了更加便利用户.提高用户的DAU(日活),增加用户的粘性一般我们都会想出比较新颖的招式. 如果现在有这样一个需求:用户需求:用户需要绑定银行卡输入银行卡号,手动输入增加用户的操作度,所以用户可以通过语音读取银行卡号码,是不是既方便又只能,现在做语音识别的有一些不错的开放平台供我们使用,一家是科大讯飞平台,一家是百度语音平台.我

Unity3D5.3.5 PC x64讯飞语音识别测试

星期天掉了一天头发,晚上终于写完了,移植的讯飞官方C++例子的代码,测试环境Win7 64位,64位Unity5.3.5,32位应该同理,换个32位的讯飞dll就行,没测试但是理论上应该能行 程序必需在网络环境运行,因为要网络通信 有麦克风点左上角录音,可以对着麦克录音,停止,自动识别,没麦点右上角识别硬盘音频文件 语言0中文,1英文,想识别鸟语I used to be an advanture like you的别忘了切换 默认录音10秒,要录长时间音频自己设置,因为Unity用的不熟,不能自

Android 通过调用系统接口使用如 谷歌语音、百度语音、讯飞语音等语音识别对话框的方法

现在app的开发进程会集成一些语音识别功能,而一般开发者是不具备自己开发一套语音识别引擎的,因此大多数情况是选择一个已经成熟的语音识别引擎SDK集成到自己的app中. 通常情况下,这种集成分两种,一种是直接调用SDK为开发者设计好的弹出框,开发者不需要开发识别交互界面:还有一种是开发者只利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先,测试机需要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时可以在系统设置界面的语言与输入处找到相

iOS第三方语音-讯飞语音

官方网站:http://www.xfyun.cn/ 注册还要绑定微信,坑啊,识别率感觉没得微信语音好,但是微信语音审核一直不过,研究下这个 1.下载sdk,主要就下面几个文件,我主要用的是语音识别 2.导入相关的库 3.在官网上注册一个应用,得到key,这里用的我注册的key AppDelegate中导入头文件 #import <iflyMSC/iflyMSC.h> - (BOOL)application:(UIApplication *)application didFinishLaunch

一段讯飞、百度等语音识别API无法识别的语音最终解决办法

最近在做语音识别.字幕扒词相关的工作,遇到了一段录音(https://download.csdn.net/download/u014220286/12169183,各位有兴趣的可以下载下来试试),音质什么的和其他处理过的无二异,也是普通话,照常理说应该能识别出来,可为了类似这样的语音丢了工作机会(前一次没重视人工速录交了,后来又遇到了,琢磨了好长时间解决了,过了交稿时间,产生信任危机了,没有机会合作了.)记录下这次的解决过程,希望给你有需要的人帮助. 首先用ffmpeg查看该音频,发现是32是浮