科大讯飞语音识别使用过程中踩过的坑

眨眼之间又是好久没有写博客了,佩服那些写了很多博客的大神,坚持和耐心值得我学习

 

这次写的是一个知名的语音识别sdk,就是科大讯飞的语音识别,其实也没有多复杂,但是由于我是用swift语言,期间出了很多差错 ,搞了好久,在这里就慢慢记录下来吧。

使用步骤: (有很多步骤网上都已经有了,我大概写一下主要的步骤,最主要还是把自己遇到的问题说出来,供大家参考)

1、首先是去讯飞官网创建应用,下载SDK,这些都不复杂,百度一大堆


2、下载好之后,把 iflyMSC.framework 拖入到项目中,这地方推荐是把它拷贝到项目文件夹下,然后在工程中add进去。


3、很重要的一个步骤,就是要添加很多相关的库,如果添加不全,就会报很奇葩的错误,而且找不到头绪,本人就是傻傻的在这里出了好多错……


4、添加完文件之后,由于是swift语言,还要创建一个桥接文件,然后把SDK的头文件包含进去:

 

 

#import "iflyMSC/IFlySpeechRecognizerDelegate.h"
#import "iflyMSC/IFlySpeechRecognizer.h"
#import "iflyMSC/IFlyRecognizerViewDelegate.h"
#import "iflyMSC/IFlyRecognizerView.h"
#import "iflyMSC/IFlyContact.h"
#import "iflyMSC/IFlyUserWords.h"

#import "iflyMSC/IFlyDataUploader.h"

#import "iflyMSC/IFlySpeechSynthesizerDelegate.h"
#import "iflyMSC/IFlySpeechSynthesizer.h"

#import "iflyMSC/IFlySpeechUtility.h"
#import "iflyMSC/IFlySpeechConstant.h"
#import "iflyMSC/IFlySpeechError.h"

#import "iflyMSC/IFlySpeechUnderstander.h"
#import "iflyMSC/IFlyTextUnderstander.h"

#import "iflyMSC/IFlySetting.h"


5、做完这些之后,就可以在你的项目中放心使用了,它分为两种界面,一种是无语音识别界面,一种是有语音识别界面。两种的使用方法都差不多相同

无界面:

 

class ViewController: UIViewController,<span style="color:#33cc00;">IFlySpeechRecognizerDelegate</span>,UITextViewDelegate {
    
    
    var iflySpeechRecognizer:<span style="color:#33cc00;">IFlySpeechRecognizer</span>!
    var resultText = ""
    var textView = UITextView()
    var backView:UIView!
    var VoiceTextView:UITextView!
    var voiceView:UIView!
    
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        var initString:String!
        initString = "appid=575fb8bb"
        IFlySpeechUtility.createUtility(initString)
        
        self.iflySpeechRecognizer = IFlySpeechRecognizer.sharedInstance() as IFlySpeechRecognizer
        self.iflySpeechRecognizer.delegate = self
        self.iflySpeechRecognizer.setParameter("iat", forKey: IFlySpeechConstant.IFLY_DOMAIN())
        self.iflySpeechRecognizer.setParameter("16000", forKey: IFlySpeechConstant.SAMPLE_RATE())
        self.iflySpeechRecognizer.setParameter("plain", forKey: IFlySpeechConstant.RESULT_TYPE())
        self.iflySpeechRecognizer.setParameter("-1", forKey: IFlySpeechConstant.SPEECH_TIMEOUT())
        self.iflySpeechRecognizer.setParameter("8000", forKey: IFlySpeechConstant.VAD_EOS())
        self.iflySpeechRecognizer.setParameter("8000", forKey: IFlySpeechConstant.VAD_BOS())
        self.iflySpeechRecognizer.setParameter("500000", forKey: IFlySpeechConstant.SPEECH_TIMEOUT())
        self.iflySpeechRecognizer.setParameter("50000", forKey: IFlySpeechConstant.NET_TIMEOUT())
        
        
        textView.frame = CGRectMake(50, 200, 200, 100)
        textView.textColor = UIColor.whiteColor()
        textView.text = "lllllll"
        self.view.addSubview(textView)
        
        let btn:UIButton = UIButton(frame:CGRectMake(100,100,100,100))
        btn.backgroundColor = UIColor.redColor()
        btn.setTitle("语音识别", forState: UIControlState.Normal)
        btn.addTarget(self, action: #selector(startVoiceBtn), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(btn)
    }
<p class="p1"><span class="s1">func</span><span class="s2"> startVoiceBtn() {</span></p><p class="p1"><span class="s2"></span></p><p class="p1"><span class="s1"><span style="white-space:pre">	</span>iflySpeechRecognizer</span><span class="s2">.</span><span class="s3">startListening</span><span class="s2">()</span></p><p class="p1"><span style="font-family: Arial, Helvetica, sans-serif;">}</span></p><p class="p1"><span style="font-family: Arial, Helvetica, sans-serif;"></span></p><p class="p1"><span class="s1">    </span><span class="s2">func</span><span class="s1"> onResults(results: [</span><span class="s3">AnyObject</span><span class="s1">]!, isLast: </span><span class="s3">Bool</span><span class="s1">) {</span></p><p class="p2"><span class="s1">        </span></p><p class="p1"><span class="s1">        </span><span class="s2">var</span><span class="s1"> resultStr : </span><span class="s3">String</span><span class="s1"> = </span><span class="s4">""</span></p><p class="p1"><span class="s1">        </span><span class="s2">if</span><span class="s1"> results != </span><span class="s2">nil</span><span class="s1"> {</span></p><p class="p1"><span class="s1">            </span><span class="s2">let</span><span class="s1"> resultDic : </span><span class="s3">Dictionary</span><span class="s1"><</span><span class="s3">String</span><span class="s1">, </span><span class="s3">String</span><span class="s1">> = results[</span><span class="s5">0</span><span class="s1">] </span><span class="s2">as</span><span class="s1">! </span><span class="s3">Dictionary</span><span class="s1"><</span><span class="s3">String</span><span class="s1">, </span><span class="s3">String</span><span class="s1">></span></p><p class="p2"><span class="s1">            </span></p><p class="p1"><span class="s1">            </span><span class="s2">for</span><span class="s1"> key </span><span class="s2">in</span><span class="s1"> resultDic.</span><span class="s3">keys</span><span class="s1"> {</span></p><p class="p1"><span class="s1">                resultStr += key</span></p><p class="p1"><span class="s1">            }</span></p><p class="p1"><span class="s1">        }</span></p><p class="p2"><span class="s1">        </span></p><p class="p1"><span class="s1">        </span><span class="s2">if</span><span class="s1"> </span><span class="s6">resultText</span><span class="s1"> != </span><span class="s4">""</span><span class="s1"> {</span></p><p class="p1"><span class="s1">            </span><span class="s2">if</span><span class="s1"> (</span><span class="s6">resultText</span><span class="s1"> </span><span class="s2">as</span><span class="s1"> </span><span class="s3">NSString</span><span class="s1">).</span><span class="s7">substringWithRange</span><span class="s1">(</span><span class="s7">NSMakeRange</span><span class="s1">( </span><span class="s6">resultText</span><span class="s1">.</span><span class="s3">characters</span><span class="s1">.</span><span class="s3">count</span><span class="s1"> - </span><span class="s5">1</span><span class="s1">, </span><span class="s5">1</span><span class="s1">)) != </span><span class="s4">","</span><span class="s1"> {</span></p><p class="p1"><span class="s1">                </span><span class="s6">resultText</span><span class="s1"> += </span><span class="s4">","</span></p><p class="p1"><span class="s1">            }</span></p><p class="p1"><span class="s1">        }</span></p><p class="p1"><span class="s1">        </span><span class="s6">resultText</span><span class="s1"> += resultStr</span></p><p class="p3"><span class="s8">        </span><span class="s1">VoiceTextView</span><span class="s8">.</span><span class="s3">text</span><span class="s8"> = </span><span class="s1">resultText</span></p><p class="p1"><span class="s1">    }</span></p><p class="p2"><span class="s1">    </span></p><p class="p1"><span class="s1">    </span><span class="s2">func</span><span class="s1"> onError(errorCode: </span><span class="s6">IFlySpeechError</span><span class="s1">!) {</span></p><p class="p1"><span class="s1">        </span><span class="s7">print</span><span class="s1">(</span><span class="s4">"</span><span class="s9">识别出错:</span><span class="s1">\</span><span class="s4">(</span><span class="s1">errorCode.</span><span class="s6">errorCode</span><span class="s4">)"</span><span class="s1">)</span></p><p class="p1"><span class="s1">        </span><span class="s2">if</span><span class="s1"> errorCode.</span><span class="s6">errorCode</span><span class="s1"> == </span><span class="s5">0</span><span class="s1"> {</span></p><p class="p3"><span class="s8">            </span><span class="s1">iflySpeechRecognizer</span><span class="s8">.</span><span class="s10">startListening</span><span class="s8">()</span></p><p class="p1"><span class="s1">        }</span></p><p class="p1"><span class="s1">    }</span></p>

 

其实没有多少注意的地方,就是遵循那个代理,然后实现两个代理方法就行了,真机测试之后就会发现,在onReaults中就能打印出识别的文字了,然后根据自己的需求不同来对字符串进行处理,这里特别注意的是联网,真机测试,然后用普通话说出想要识别的文字,如果光发出声响,他就会一直报识别错误的错。

有界面:

 

import UIKit

class voiceViewController: UIViewController,IFlyRecognizerViewDelegate {

    var iflyRecognizerView:IFlyRecognizerView!
    
    var isRecongnizer = false
    var resultText = ""
    var textView = UITextView()
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        
        
        var initString:String!
        initString = "appid=575fb8bb"
        IFlySpeechUtility.createUtility(initString)
        
        self.iflyRecognizerView = IFlyRecognizerView.init(center: self.view.center)as IFlyRecognizerView
        self.iflyRecognizerView.delegate = self
        self.iflyRecognizerView.setParameter("iat", forKey: IFlySpeechConstant.IFLY_DOMAIN())
        self.iflyRecognizerView.setParameter("16000", forKey: IFlySpeechConstant.SAMPLE_RATE())
        // | result_type   | 返回结果的数据格式 plain,只支持plain
        self.iflyRecognizerView.setParameter("plain", forKey: IFlySpeechConstant.RESULT_TYPE())
        
        
        textView.frame = CGRectMake(50, 200, 200, 100)
        textView.backgroundColor = UIColor.grayColor()
        textView.textColor = UIColor.whiteColor()
        textView.text = "lllllll"
        self.view.addSubview(textView)
        
        let btn:UIButton = UIButton(frame:CGRectMake(100,100,100,100))
        btn.backgroundColor = UIColor.redColor()
        btn.setTitle("语音识别", forState: UIControlState.Normal)
        btn.addTarget(self, action: #selector(startVoiceBtn), forControlEvents: UIControlEvents.TouchUpInside)
        self.view.addSubview(btn)

    }
    
    func startVoiceBtn() {
        print("开始识别")
        iflyRecognizerView.start()
        
    }
    
    func onResult(results: [AnyObject]!,isLast: Bool) {
        var resultStr : String = ""
        if results != nil {
            let resultDic : Dictionary<String, String> = results[0] as! Dictionary<String, String>
            
            for key in resultDic.keys {
                resultStr += key
            }
        }
        
        if resultText != "" {
            if (resultText as NSString).substringWithRange(NSMakeRange( resultText.characters.count - 1, 1)) != "," {
                resultText += ","
            }
        }
        
        resultText += resultStr
        textView.text = resultText
        
        if isRecongnizer {
            iflyRecognizerView.start()
        } else {
            iflyRecognizerView.cancel()
            if resultText != "" {
                resultText = (resultText as NSString).substringWithRange(NSMakeRange( 0, resultText.characters.count - 1)) + "。"
                textView.text = resultText
            }
        }
    }
    
    func onError(error: IFlySpeechError!) {
        print("识别出错:\(error.errorCode)")
    }
    

 

 

6、两种方法就是遵循的代理不同,然后用到的类不同,其实也没有多复杂的地方,只是刚开始的时候有点蒙,用起来就好了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值