IOS10 语音转文字

IOS10新出的speech(演讲,讲话)框架,可以方便的将语音转化为文字 。

IOS10 语音转文字_第1张图片

在使用之前,首先介绍几个需要用的类 ,使用方法类似webView

SFSpeechRecognizer (Speech:演讲  Recognizer:识别)

SFSpeechRecognitionRequest (识别请求)

SFTranscription (Transcription:译文)

SFTranscriptionSegment (Segment :段)

先创建一个SFSpeechRecognizer     类似创建一个webView

然后传入求个识别请求                      类似webView的网络请求

然后设置代理,监听返回结果。

在使用之前语音之前 先在info.plist里面添加这个key,否则会崩溃

NSSpeechRecognitionUsageDescription

测试语音  

这个是使用录音功能添加的  语音不需要

NSMicrophoneUsageDescription

测试录音

- (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didFinishRecognition:(SFSpeechRecognitionResult *)recognitionResult{}

这个代理方法里面返回recognitionResult :

recognitionResult的两个属性

@property (nonatomic, readonly, copy) SFTranscription *bestTranscription;

// Hypotheses for possible transcriptions, sorted in decending order of confidence (more likely first)

@property (nonatomic, readonly, copy) NSArray*transcriptions;

bestTranscription : 返回了最可能的一条表达译文数据

transcriptions:所有的可能的识别数据

SFTranscription的一个属性

@property(nonatomic,readonly,copy)NSArray*segments;

你所说的一句话,可能是有好几个词语拼成的,transcription就是你所说的那句话,segments就是你所说的你那句话的组成每个单词的集合。SFTranscriptionSegment包含该每个单词信息,比如说这个单词所用的时间。

录音:(好像文章结构有点乱)

录音使用 AVAudioRecorder

录音后的文件 这里保存在了 这个路径里面

NSString *documentPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0];

return [documentPath stringByAppendingPathComponent:@"test.aac"];

关于录音里面的一些参数的设置,demo里面给了较多的注释和讲解。

这里面的录音,每次新录的会覆盖原来的录音

录音完成后转化为文字:

- (void)speechRecognitionTask:(SFSpeechRecognitionTask *)task didFinishRecognition:(SFSpeechRecognitionResult *)recognitionResult 

录音转化完成会调用这个方法。

NSLog(@"完成录音转换  %@",recognitionResult.bestTranscription);

取这个recognitionResult.bestTranscription 就是转化完成的语句。不过这个转化完成的语句有个缺点就是它只是一长句话,中间没有什么标点符号。并不像微信里面的那么智能。

对转化后的文字的处理:

这个我也没有什么好的办法。百度上找了好多,介绍的文章也就是到此为止。

这里笔者就是把转化后的每句话做了判断:

如果一句话中的某个片段,时间大于0.6秒 后面就需要拼接标点

根据这个片段的最后一个字,拼接相应的标点

if (speechString.length == 0) return @"";

NSString *lastString = [speechString substringFromIndex:speechString.length  - 1];

if ([lastString isEqualToString:@"啊"]) {

return @"!";

}else if ([lastString isEqualToString:@"吧"])

{

return @"~";

}else if ([lastString isEqualToString:@"呢"]){

return @"?";

}else if ([lastString isEqualToString:@"哈"]) {

return @"~~";

}else {

return @",";

}

最后希望有大神能对文章以及后面的这个标点符号的处理多多指正 ~~~~非常感激

demo:地址

你可能感兴趣的:(IOS10 语音转文字)