2016-07-14 16:22:09 xiaokui_wingfly 阅读数 3226
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

voicewo 是一个专门用于在网页中实现语音识别转换的jQuery插件。开发人员可以用voicewo将用户的语音转换成文字,插入到指定的HTML表单里,无缝地与Java、.NET、PHP、ASP等多种编程语言集成。适合在聊天室、评论框、论坛、博客、电子邮件等互联网应用中使用。

这里写图片描述

主要特点:

  • 快速:体积小,加载速度快
  • 架构:采用Flash语音采集,云端API接口识别,页面Javascript文本处理
  • 风格:修改风格容易,只需修改CSS文件
  • 扩展:提供多组Javascript事件接口,扩展定制方便
  • 兼容:支持大部分主流浏览器,比如IE、Firefox、Safari、Chrome、Opera

快速示例

<!DOCTYPE html>
<html>
<head>
<title>Voicewo jQuery Plugin Demo</title>
<link rel="stylesheet" type="text/css" href="voicewo.css">
<script src="jquery-1.11.0.min.js" type="text/javascript"></script>
<script src="jquery.voicewo.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
   $('#btn').voicewo({
      'width'        : 92,
      'height'       : 25,
      'outputId'     : 'txt',
      'buttonImage'  : 'btn.png',
      'swf'          : 'voicewo.swf'
   });
})
</script>
</head>
<body>
   <textarea id="txt" cols="60" name="txt" rows="6"></textarea>
   <div id="btn"></div>
</body>
</html>

使用说明:

本插件架构是用Flash进行语音采集,提交到云端接口(目前接口采用科大讯飞)进行语音至文本转换,jQuery插件页面控制操作。

1、首先在科大讯飞-语音云开放平台(http://open.voicecloud.cn/)注册,获得appid;

2、下载本插件包并解压缩,用Adobe Flash Professional CS5.5 打开voicewo.fla与voicewo.as文件,编辑voicewo.as,将其中的private const domain:String = “www.youdomain.com”; 改为自己的网站域名,多个域名可以用分号隔开,该代码是防止别人恶意调用,调试时也可以用*代表所有域名访问。另外将其中的private const configs:String = “appid=53000000,timeout=2000″; appid换成自己申请到的数字。重新编译发布voicewo.swf文件;注:编辑flash时先要加载库,方法是打开CS5.5开发工具,单击【文件】->【ActionScript…】,点击库路径选项卡,添加库路径”./lib”,确定即可。

3、按照前面的代码示例调用,注意要先引入jquery脚本与插件脚本文件以及样式文件,即可在自己的web项目中使用;

4、应用部署完成后,在科大讯飞语音云平台中请求审核接口。

运行环境:

  1. 客户端需要有麦克风;
  2. 客户端浏览器需要支持flash插件;
  3. 客户端控制面板的flash设置需要授权浏览器用户使用麦克风。

查看原文

查看在线演示Demo和更多原文内容:
http://www.ibloger.net/article/1177.html

2017-02-22 23:48:33 Xoxo_x 阅读数 2345
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

语音转成文字

这里写图片描述

科大讯飞语音识别技术,支持英文,中文,方言等。识别效率十分迅速,而且准确率官网能够达到97%以上。
在使用过程中,也确实发现,可以商用,或者利用其API进行开发。

使用场景,包含英语学习,单词朗读,语音评测等。

本文介绍如何使用 语音转成文字 的功能

Demo 地址:https://git.coding.net/Xoxo_x/IFlyDemo.git

使用讯飞的SDK,需要进行注册,并添加项目,其SDK与申请的APPID有关,不同的SDK和不同的APPID不能通用

本文的APPID:57d22af3
说明:该id没有被审核,每天使用次数有限

原demo中含有不必要的文件,这里进行了处理。
使用这几个文件,就可以进行语音识别了。

结构如下:

这里写图片描述

/**
语音听写demo
使用该功能仅仅需要四步
1.创建识别对象;
2.设置识别参数;
3.有选择的实现识别回调;
4.启动识别
*/

导入 #import “iflyMSC/iflyMSC.h”

//
//  ViewController.h
//  IFlyDemo
//
//  Created by fsk-0-1-n on 17/2/21.
//  Copyright © 2017年 Xoxo. All rights reserved.
//

#import <UIKit/UIKit.h>
#import "iflyMSC/iflyMSC.h"

@class IFlySpeechRecognizer;
@class IFlyPcmRecorder;

@interface ViewController : UIViewController<IFlySpeechRecognizerDelegate,IFlyRecognizerViewDelegate,IFlyPcmRecorderDelegate>
@property (nonatomic, strong) NSString *pcmFilePath;//音频文件路径
@property (nonatomic, strong) IFlySpeechRecognizer *iFlySpeechRecognizer;//不带界面的识别对象




@property (nonatomic, strong) NSString * result;
@property (nonatomic, assign) BOOL isCanceled;

@property (nonatomic,strong) IFlyPcmRecorder *pcmRecorder;//录音器,用于音频流识别的数据传入

@end

demo录音文件保存路径

- (void)viewDidLoad {
    [super viewDidLoad];

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
    NSString *cachePath = [paths objectAtIndex:0];
    _pcmFilePath = [[NSString alloc] initWithFormat:@"%@",[cachePath stringByAppendingPathComponent:@"asr.pcm"]];
}

/**
设置识别参数
**/


-(void)initRecognizer
{
    NSLog(@"%s",__func__);


        //单例模式,无UI的实例
        if (_iFlySpeechRecognizer == nil) {
            _iFlySpeechRecognizer = [IFlySpeechRecognizer sharedInstance];

            [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];

            //设置听写模式
            [_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOMAIN]];
        }
        _iFlySpeechRecognizer.delegate = self;

        if (_iFlySpeechRecognizer != nil) {
            IATConfig *instance = [IATConfig sharedInstance];

            //设置最长录音时间
            [_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:@"2000"];
            //设置后端点
            [_iFlySpeechRecognizer setParameter:instance.vadEos forKey:@"1000"];
            //设置前端点
            [_iFlySpeechRecognizer setParameter:instance.vadBos forKey:@"1000"];
            instance.vadBos = @"1000";
            instance.vadEos = @"1000";
            //网络等待时间
            [_iFlySpeechRecognizer setParameter:@"10000" forKey:[IFlySpeechConstant NET_TIMEOUT]];

            //设置采样率,推荐使用16K
            [_iFlySpeechRecognizer setParameter:instance.sampleRate forKey:[IFlySpeechConstant SAMPLE_RATE]];
            //设置语言
            [instance setLanguage:[IATConfig english]];
            if ([instance.language isEqualToString:[IATConfig chinese]]) {
                //设置语言
                [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
                //设置方言
                [_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechConstant ACCENT]];
            }else if ([instance.language isEqualToString:[IATConfig english]]) {
                [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechConstant LANGUAGE]];
            }
            //设置是否返回标点符号
            [_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant ASR_PTT_NODOT]];
            instance.dot = [IFlySpeechConstant ASR_PTT_NODOT];
        }

        //初始化录音器
        if (_pcmRecorder == nil)
        {
            _pcmRecorder = [IFlyPcmRecorder sharedInstance];
        }

        _pcmRecorder.delegate = self;

        [_pcmRecorder setSample:[IATConfig sharedInstance].sampleRate];

        [_pcmRecorder setSaveAudioPath:nil];    //不保存录音文件

}
/**
 音量回调函数
 volume 0-30
 ****/
- (void) onVolumeChanged: (int)volume
{
    if (self.isCanceled) {
        return;
    }

    NSString * vol = [NSString stringWithFormat:@"音量:%d",volume];
    NSLog(@"音量回调 : %@",vol);
}
/**
 开始识别回调
 ****/
- (void) onBeginOfSpeech
{
    NSLog(@"onBeginOfSpeech");

}

/**
 停止录音回调
 ****/
- (void) onEndOfSpeech
{
    NSLog(@"停止录音");

    [_pcmRecorder stop];
     NSLog(@"停止录音");
}
/**
 听写结束回调(注:无论听写是否正确都会回调)
 error.errorCode =
 0     听写正确
 other 听写出错
 ****/
- (void) onError:(IFlySpeechError *) error
{
    NSLog(@"%s",__func__);

    if ([IATConfig sharedInstance].haveView == NO ) {



        NSString *text ;

        if (self.isCanceled) {
            text = @"识别取消";

        } else if (error.errorCode == 0 ) {
            if (_result.length == 0) {
                text = @"无识别结果";
            }else {
                text = @"识别成功";
                //清空识别结果
                _result = nil;
            }
        }else {
            text = [NSString stringWithFormat:@"发生错误:%d %@", error.errorCode,error.errorDesc];
            NSLog(@"%@",text);
        }

        NSLog(@"%@",text);

    }else {
//        NSLog(@"识别结束");

        NSLog(@"errorCode:%d",[error errorCode]);
    }

 }
/**
 无界面,听写结果回调
 results:听写结果
 isLast:表示最后一次
 ****/
- (void) onResults:(NSArray *) results isLast:(BOOL)isLast
{


    GetJSONResult *result = [[GetJSONResult alloc]init];

    NSString * resultFromJson =  [result onResultsOC:results isLastOC:isLast];


    NSLog(@"识别结果 --  %@",resultFromJson);
}

GetJSONResult 关于这个文件是从原文抽离的。是对返回的结果,进行解析,已到达显示的目的。
如下:

#import <Foundation/Foundation.h>

@interface GetJSONResult : NSObject
- (NSString *) onResultsOC:(NSArray *) results isLastOC:(BOOL)isLast;
@end
//
//  GetJSONResult.m
//  WordLightFSK
//
//  Created by fsk-0-1-n on 16/10/31.
//  Copyright © 2016年 Xoxo. All rights reserved.
//

#import "GetJSONResult.h"
#import "ISRDataHelper.h"

@implementation GetJSONResult{
    NSString *result;
}
- (instancetype)init{
    self = [super init];
    return self;
}
- (NSString *) onResultsOC:(NSArray *) results isLastOC:(BOOL)isLast
{

    NSMutableString *resultString = [[NSMutableString alloc] init];
    NSDictionary *dic = results[0];
    for (NSString *key in dic) {
        [resultString appendFormat:@"%@",key];
    }

    result =[NSString stringWithFormat:@"%@%@", result,resultString];
    NSString * resultFromJson =  [ISRDataHelper stringFromJson:resultString];

    if (isLast){
        NSLog(@"听写结果(json):%@测试",  result);
    }
    NSLog(@"_result=%@",result);
    NSLog(@"resultFromJson=%@",resultFromJson);
    return resultFromJson;

}
@end

IATConfig 是语音识别的配置文件,可以设置前端点,后端点,语种,是否返回标点符号,网络连接等待时间等。

ISRDataHelper 是解析json数据的

/**
 解析听写json格式的数据
 params例如:
 {"sn":1,"ls":true,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"w":"白日","sc":0}]},{"bg":0,"cw":[{"w":"依山","sc":0}]},{"bg":0,"cw":[{"w":"尽","sc":0}]},{"bg":0,"cw":[{"w":"黄河入海流","sc":0}]},{"bg":0,"cw":[{"w":"。","sc":0}]}]}
 ****/
+ (NSString *)stringFromJson:(NSString*)params
{
    if (params == NULL) {
        return nil;
    }

    NSMutableString *tempStr = [[NSMutableString alloc] init];
    NSDictionary *resultDic  = [NSJSONSerialization JSONObjectWithData:    //返回的格式必须为utf8的,否则发生未知错误
                                [params dataUsingEncoding:NSUTF8StringEncoding] options:kNilOptions error:nil];

    if (resultDic!= nil) {
        NSArray *wordArray = [resultDic objectForKey:@"ws"];

        for (int i = 0; i < [wordArray count]; i++) {
            NSDictionary *wsDic = [wordArray objectAtIndex: i];
            NSArray *cwArray = [wsDic objectForKey:@"cw"];

            for (int j = 0; j < [cwArray count]; j++) {
                NSDictionary *wDic = [cwArray objectAtIndex:j];
                NSString *str = [wDic objectForKey:@"w"];
                [tempStr appendString: str];
            }
        }
    }
    return tempStr;
}

log信息:

2017-02-22 21:58:58.404424 IFlyDemo[9843:3111103] _result=(null){"sn":1,"ls":false,"bg":0,"ed":0,"ws":[{"bg":0,"cw":[{"sc":0.00,"w":"Good"}]}]}
2017-02-22 21:58:58.404567 IFlyDemo[9843:3111103] resultFromJson=Good
2017-02-22 21:58:58.404663 IFlyDemo[9843:3111103] 识别结果 --  Good
2017-02-22 21:58:58.405082 IFlyDemo[9843:3111103] 音量回调 : 音量:0
2017-02-22 21:58:58.406661 IFlyDemo[9843:3111103] 音量回调 : 音量:0
2017-02-22 21:58:58.409720 IFlyDemo[9843:3111103] 音量回调 : 音量:0
2017-02-22 21:58:58.412686 IFlyDemo[9843:3111103] 音量回调 : 音量:0

识别结果 – Good。成功识别了英语。

本文介绍到此结束。

Demo 地址:https://git.coding.net/Xoxo_x/IFlyDemo.git

2016-07-30 18:22:51 qq_15267341 阅读数 17373
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

今天我给大家讲的是如何在Unity中利用讯飞语音开放平台做语音识别,也就是可以快速的将我们的声音变成文字,讯飞就做到了并且做的很好


首先在讯飞开放平台上注册一个账号,然后登陆进去,讯飞开放平台的官方网址是:http://www.xfyun.cn/

下载自己所需要的SDK,两种方式都可以下载

方式一:


这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述


通过以上简单的几步,就轻松从讯飞开放平台下载自己需要的SDK包


方式二:


这里写图片描述


这里写图片描述


通过上面两种方式的任何一种方式下载的SDK包如下:


这里写图片描述


这里写图片描述


这里写图片描述


有了讯飞提供的语音识别的SDK包,接下来就开始开发了


这里写图片描述


接入将unity的classes.jar包导入到安卓工程中得bin目录下,然后在添加到构建路径中去


这里写图片描述


这里写图片描述


接着讲讯飞提供的SDK中libs文件下的部分jar包引入进来

补充说明
ARM处理器是Acorn有限公司面向低预算市场设计的第一款RISC微处理器。全称为Acorn RISC Machine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。

armeabi就是针对普通的或旧的arm cpu,armeabi-v7a是针对有浮点运算或高级扩展功能的arm cpu,我使用的手机是华为P9,你可以将armeabi和armeabi-v7a两个文件夹都拖进来,也可以只拖armeabi-v7a这个文件夹进来,拖到安卓工程的libs文件夹下即可


这里写图片描述


下面看看MainActivity


这里写图片描述


这里写图片描述


这里写图片描述


这里写图片描述


然后我们接着就导出Jar


这里写图片描述


这里写图片描述


这里写图片描述


下面就开始Unity的部分,新建一个unity工程
这里写图片描述


这里写图片描述


新建一个脚本test.cs,并拖到主摄像机下


这里写图片描述


这里写图片描述


然后在场景中创建一个按钮和一个文本输入框,为按钮绑定kaishi方法
这里写图片描述


这里写图片描述


这里写图片描述


最后发布的应用手机截图:
这里写图片描述


我点击开始按钮,然后说了一句:大家好,我是徐海涛,然后手机截图如下:


这里写图片描述


FR:海涛高软(QQ群:386476712)

2016-08-29 16:56:24 qq_25824197 阅读数 4392
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

         最近在研究语音识别,前段时间使用了百度语音识别,最近公司又突然让转用科大讯飞的SDK,感觉有点坑。不过 也算是学习了使用新的SDK了吧。在这里将集成SDK以及一些使用方法写一下。

第一步:获取APPid

先在科大讯飞语音识别开发者网站注册,获取APPid。

第二步:集成SDK

导入科大讯飞的iflyMSC.framework;然后再导入相关的依赖库:

第三步:初始化启动服务


在app delegate里面写入如下代码初始化

NSLog(@"%@",[IFlySetting getVersion]);

    //设置sdklog等级,log保存在下面设置的工作路径中

    [IFlySetting setLogFile:LVL_ALL];

    

    //打开输出在consolelog开关

    [IFlySetting showLogcat:NO];

    

    //设置sdk的工作路径

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUser DomainMask, YES);

    NSString *cachePath = [paths objectAtIndex:0];

    [IFlySetting setLogFilePath:cachePath];

    

    //创建语音配置,appid必须要传入,仅执行一次则可

    NSString *initString = [[NSString alloc] initWithFormat:@"appid=%@",APPID_VALU E];

    

    //所有服务启动前,需要确保执行createUtility

    [IFlySpeechUtility createUtility:initString];

在使用的页面

- (void)viewWillAppear:(BOOL)animated

{

    NSLog(@"%s",__func__);

    [super viewWillAppear:animated];

   

    [self initRecognizer];


}


- (void)viewWillDisappear:(BOOL)animated

{

    NSLog(@"%s",__func__);

    [super viewWillDisappear:animated];

    [_iFlySpeechRecognizer cancel];

    [_iFlySpeechRecognizer setDelegate:nil];

    [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];


}


//初始化识别参数

- (void)initRecognizer

{

    NSLog(@"%s",__func__);

    

    //单利模式 UI的实例

    if (self.iFlySpeechRecognizer==nil) {

        _iFlySpeechRecognizer=[IFlySpeechRecognizer sharedInstance];

        [_iFlySpeechRecognizer setParameter:@"" forKey:[IFlySpeechConstant PARAMS]];

        

        //设置听写模式

        [_iFlySpeechRecognizer setParameter:@"iat" forKey:[IFlySpeechConstant IFLY_DOM AIN]];

        

    }

    _iFlySpeechRecognizer.delegate=self;

    

    if (_iFlySpeechRecognizer!=nil) {

        IATConfig *instance=[IATConfig sharedInstance];

        

        //设置最长录音时间

        [_iFlySpeechRecognizer setParameter:instance.speechTimeout forKey:[IFlySpeechC onstant SPEECH_TIMEOUT]];

        

        //设置后端点

        [_iFlySpeechRecognizer setParameter:instance.vadEos forKey:[IFlySpeechConstant VAD_EOS]];

        

        //设置前端点

        [_iFlySpeechRecognizer setParameter:instance.vadBos forKey:[IFlySpeechConstant VAD_BOS]];

        

        //网络等待时间

        [_iFlySpeechRecognizer setParameter:@"20000" forKey:[IFlySpeechConstant NET_TI MEOUT]];

        

        //设置采样率,推荐16K

        [_iFlySpeechRecognizer setParameter:IATConfig.lowSampleRate forKey:[IFlySpeech Constant SAMPLE_RATE]];

        if ([instance.language isEqualToString:[IATConfig chinese]]) {

            //设置语言

            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechCo nstant LANGUAGE]];

            //设置方言

            [_iFlySpeechRecognizer setParameter:instance.accent forKey:[IFlySpeechCons tant ACCENT]];

            

        }else if([instance.language isEqualToString:[IATConfig english]]){

            [_iFlySpeechRecognizer setParameter:instance.language forKey:[IFlySpeechCo nstant LANGUAGE]];

        }

        //设置是否返回标点符号

        [_iFlySpeechRecognizer setParameter:instance.dot forKey:[IFlySpeechConstant AS R_PTT]];

    }

    

}

- (void)startButtonClick

{

    NSLog(@"start");

    [_textView setText:@""];

    [_textView resignFirstResponder];

    self.isCanceled=NO;

    if (_iFlySpeechRecognizer==nil) {

        [self initRecognizer];

    }

    [_iFlySpeechRecognizer cancel];

    

    //设置音频来源为麦克风

    [_iFlySpeechRecognizer setParameter:IFLY_AUDIO_SOURCE_MIC forKey:@"audio_sourc e"];

    

    //设置听说结果格式为json

    [_iFlySpeechRecognizer setParameter:@"json" forKey:[IFlySpeechConstant RESULT_ TYPE]];

    

    //保存录音文件,保存在sdk工作路径中,如未设置工作路径,则默认保存在library/cache下(为了测 试音频流识别用的)

    [_iFlySpeechRecognizer setParameter:@"asr.pcm" forKey:[IFlySpeechConstant ASR_ AUDIO_PATH]];

    

    [_iFlySpeechRecognizer setDelegate:self];

    

    BOOL ret=[_iFlySpeechRecognizer startListening];

    if (ret) {

        NSLog(@"启动成功");

    }else{

        [_popUpView showText:@"启动失败"];

    }

}


//停止录音

- (void)stopButtonClick

{

    NSLog(@"stop");

    [_iFlySpeechRecognizer stopListening];

    [_textView resignFirstResponder];

}

//取消录音

- (void)cancelButtonClick

{

    NSLog(@"cancel");

    [_iFlySpeechRecognizer cancel];

    [_textView resignFirstResponder];

}


回调方法

#pragma mark - IFlySpeechRecognizerDelegate


/**

  音量回调函数

  volume 030

  ****/

- (void) onVolumeChanged: (int)volume

{

    if (self.isCanceled) {

        [_popUpView removeFromSuperview];

        return;

    }

    

    NSString * vol = [NSString stringWithFormat:@"音量:%d",volume];

    [_popUpView showText: vol];

}


/**

  开始识别回调

  ****/

- (void) onBeginOfSpeech

{

    NSLog(@"onBeginOfSpeech");

    [_popUpView showText: @"正在录音"];

}


/**

  停止录音回调

  ****/

- (void) onEndOfSpeech

{

    NSLog(@"onEndOfSpeech");

    

    [_popUpView showText: @"停止录音"];

}


/**

  听写结束回调(注:无论听写是否正确都会回调)

  error.errorCode =

  0     听写正确

  other 听写出错

  ****/

- (void)onError:(IFlySpeechError *)error

{

    NSLog(@"%s",__func__);

    NSString *text;

    

    if (self.isCanceled) {

        text=@"识别取消";

    }else if (error.errorCode==0){

        if (self.result.length==0) {

            text=@"无识别结果";

        }else{

            text=@"识别成功";

        }

    }else{

        text=[NSString stringWithFormat:@"发生错误:%d %@",error.errorCode,error .errorDesc];;

        NSLog(@"%@",text);

    }

    

}


/**

 无界面,听写结果回调

  results:听写结果

  isLast:表示最后一次

  ****/


- (void)onResults:(NSArray *)results isLast:(BOOL)isLast

{

    NSMutableString *resultString=[[NSMutableString alloc]init];

    NSDictionary *dic=results[0];

    for (NSString *key in dic) {

        [resultString appendFormat:@"%@",key];

    }

    self.result=[NSString stringWithFormat:@"%@%@",self.textView.text,resultString ];

    NSString *resultFromJson=[ISRDataHelper stringFromJson:resultString];

    self.textView.text=[NSString stringWithFormat:@"%@%@",_textView.text,resultFro mJson];

    if (isLast) {

        NSLog(@"听说结果(json:%@测试",self.result);

    }

    NSLog(@"_result=%@",_result);

    NSLog(@"resultFromJson=%@",resultFromJson);

    NSLog(@"isLast=%d,_textView.text=%@",isLast,_textView.text);

    

}


/**

  听写取消回调

  ****/

- (void) onCancel

{

    NSLog(@"识别取消");

}



对比百度语音识别的SDK,科大讯飞的SDK更新比较快速,百度语音识别的SDK最新版本还是15年更新的, 并且给的实例Demo用的全是自动内存管理,文档上的集成方式也不一样,当时集成百度语音识别时候也出现 各种问题,相对还是科大讯飞的使用起来简单粗暴,官方下载的Demo看起来也比较有条理。不过百度语音识 别可以在边说话边识别出结果,而科大讯飞的必须要说完之后才能把结果全部返回。


2016-07-06 16:37:35 victor_barnett 阅读数 3500
  • C++语音识别开篇

    本篇mark老师将教大家使用第三方库的调用来简单的实现语音识别。随着机器学习和人工智能的热闹,国内语音行业也可谓是百花齐放。 语音识别一个伟大的时代已在我们身边悄悄走来。

    5926 人正在学习 去看看 杨波

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

1.什么是OpenEars?

        OpenEars是面向iOS平台的一个离线的语音识别和text-to-speech(文字语音转换)开发工具包.OpenEars主要是针对英语,也支持中文的语言包,但是我感觉它的识别性不是太好.最重要的是,这是一款免费的工具包,除了基本的免费功能,它还提供了可以用来扩展基本功能的付费插件.今天主要介绍的是它的免费功能,即简单的语音识别功能.


        当前OpenEars的最新版本为2.5,下载地址为http://www.politepix.com/wp-content/uploads/OpenEarsDistribution.tar.bz2


2.详细配置OpenEars的步骤

(1)点击上方链接下载OpenEars的扩展包,打击打开扩展包,里面有一个Framework的文件夹,将这个文件拖进你的工程文件中.然后检查这个文件的路径(正常情况下Xcode会为你自动添加好文件的路径),点击你的工程文件,然后点击Build Settings,在搜索输入框输入Framework Search Paths,右键点击刚刚添加的Framework文件夹,然后show in finder即可查看文件的路径,核对两个路径是否正确.不正确或者不存在,手动添加即可.见图


核对检查好路径之后,为了添加二进制文件的存储,需要将Build Settings里的Deployment Postprocessing设置为YES.然后添加AudioToolbox库和AVFoundation库到你的项目里边.



(2)在你需要进行语音识别的.m文件下引入头文件,需引入头文件如下:


在你需要进行语音识别的.h文件下引入头文件,需引入头文件如下:


然后跟你需要实现语音识别的文件下引入协议(绿色<>部分为需要引入的协议),例如


并将OEEventsObserver属性添加到您的其他类属性(OEEventsObserver必须您的类的属性,否则它不会工作):



然后在viewDidLoad或者你需要的地方进行初始化观察者并签订协议:



下一步是创建你需要使用到的语音类文件,这决定你将使用什么语言进行识别,在viewDidLoad或者其他地方均可,具体实现如下:


其中的words是你创建的需要识别的单词.

最后在你需要开启语音识别的地方添加如下方法,开启语音识别:



其中你注册的观察者签订的协议方法如下所示



包含中文和英文声学模型的demo地址:Demo地址



首先导入科大讯飞工具包

博文 来自: u012809352

语音聊天机器人

阅读数 4014

没有更多推荐了,返回首页