腾讯云语音识别iOS SDK 开发代码模块分析

2020-04-03 17:57:27 浏览数 (1)

项目需求:开发一个可以调用腾讯云语音识别接口的iOS应用

以使用 iOS SDK 方式接入,以一句话识别为例,展开对官当demo代码模块的分析。

一句话语音识别,即对60秒之内的短音频文件进行识别,可应用于语音消息转写等场景

接入准备

SDK 获取

一句话识别的 iOS SDK 以及 Demo 的下载地址:iOS SDK。

接入须知

· 开发者在调用前请先查看实时语音识别的 接口说明 ,了解接口的使用要求使用步骤

· 该接口需要手机能够连接网络(GPRS、3G 或 Wi-Fi 网络等),且系统为 iOS 9.0及以上版本。

1. 功能分析

总体来说,功能分为语音数据获取,语音识别

2. 模块划分

2.1 首先要配置安全策略和麦克风的权限

2.1.1安全策略的配置Info.plist:

使用的是 Info.plist 这个文件。

在工程info.plist 添加以下设置:

代码语言:javascript复制
  <key>NSAppTransportSecurity</key>
  <dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>zijiebao.com</key>
        <dict>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSIncludesSubdomains</key>
            <true/>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
    </dict>
2.1.2申请系统麦克风权限,添加如下内容:
代码语言:javascript复制
 <key>NSMicrophoneUsageDescription</key>
 <string>需要使用了的麦克风采集音频</string>

2.2 编写代码,发送请求,实现接口调用

配置完成后,就编写代码,通过发送请求,获取我们要是识别的结果,

2.2.1 初始化识别器

1) 该QDDefine_h.m文件下,添加腾讯的APPID信息和密钥信息的配置,根据这个配置再初始化识别器。

代码语言:javascript复制
#ifndef QDDefine_h
#define QDDefine_h
//#error please replace with your own info
#define kQDAppId @""
#define kQDSecretId @""
#define kQDSecretKey @""
#define kQDProjectId @""

2) 第二种初始化方法

在文件QDOneSentenceRecognizeViewController.m下配置

代码语言:javascript复制

/**
 * 通过 appId secretId secretKey 初始化
 * @param appid 腾讯云 appId
 * @param secretId 腾讯云 secretId
 * @param secretKey 腾讯云 secretKey
 */
(instancetype)initWithAppId:(NSString *)appid secretId:(NSString *)secretId secretKey:(NSString *)secretKey;

1) 创建 QCloudSentenceRecognizer 实例

代码语言:txt复制
 QCloudSentenceRecognizer *recognizer = [[QCloudSentenceRecognizer alloc] initWithAppId:appId 
                                              secretId:secretId 
                                           secretKey:secretKey];
  //设置delegate,相关回调方法见QCloudOneSentenceRecognizerDelegate定义
 recognizer.delegate = self;

2)实现此 QCloudSentenceRecognizerDelegate 协议方法

2.2.2调用示例

然后就可以进行相应的语音识别,目前有四种获取数据的方式,分别为a. 通过语音 URL; b. 通过语音数据; c. 通过指定参数调用; d. 通过 SDK 内置录音器调用

· a. 通过语音 URL 调用

代码语言:txt复制
- (void)recognizeWithUrl {
//语音数据url
NSString *url = @"http://liqiansunvoice-1255628450.cosgz.myzijiebao.com/30s.wav";
  //指定语音数据url 语音数据格式 采样率
  [_recognizer recoginizeWithUrl:url voiceFormat:kQCloudVoiceFormatWAV frequence:kQCloudEngSerViceType16k];
}

· b. 通过语音数据调用

代码语言:txt复制
  - (void)recognizeWithAudioData {
   //语音数据
   NSString *filePath = [[NSBundle mainBundle] pathForResource:@"recordedFile" ofType:@"wav"];
   NSData *audioData = [[NSData alloc] initWithContentsOfFile:filePath];
   //指定语音数据 语音数据格式 采样率
   [_recognizer recoginizeWithData:audioData voiceFormat:kQCloudVoiceFormatWAV frequence:kQCloudEngSerViceType16k];
}

· c. 通过指定参数调用

代码语言:txt复制
- (void)recognizeWithParams {
   NSString *url = @"http://liqiansunvoice-1255628450.cosgz.myzijiebao.com/30s.wav";
   //获取一个已设置默认参数params
   QCloudOneSentenceRecognitionParams *params = [_recognizer defaultRecognitionParams];    
   //通过语音url请求, 此4个参数必须设置
   params.url = url;                           
   //设置语音频数据格式,见kQCloudVoiceFormat定义
   params.voiceFormat = kQCloudVoiceFormatWAV;
   //设置语音数据来源,见QCloudAudioSourceType定义
   params.sourceType = QCloudAudioSourceTypeUrl;
   //设置采样率,见kQCloudEngSerViceType定义
   params.engSerViceType = kQCloudEngSerViceType16k; 
   [_recognizer recognizeWithParams:params];

· d. 通过 SDK 内置录音器调用

代码语言:txt复制
- (void)recognizeWithRecorder {
   [_recognizer startRecognizeWithRecorder];
}

0 人点赞