## 產品概述
圖靈機器人SDK IOS 版是運行在IOS系統上的語音識別、語義理解及語音合成一體化解決方案,基于該方案,開發者可以輕松構建功能完備、交互性強的語音識別和語義理解應用程序,而且如果只使用語義理解引擎也是可以的。
#### 概念解釋
(1)語音識別:Automatic Speech Recognition(ASR),也稱自動語音識別,其目標是將人類的語音中的詞匯內容轉換相應的文本。
(2)自然語言理解:Natural Language Understanding(NLU),俗稱人機對話,是人工智能的分支學科。本學科通過電子計算機模擬人的語言交際過程,從而使計算機能理解和運用人類社會的自然語言,實現人機之間的自然語言通信,進而代替人的部分腦力勞動,包括查詢資料、解答問題、摘錄文獻、匯編資料以及一切有關自然語言信息的加工處理。
#### 功能介紹
(1)語音識別:將語音識別成相應的文本。
(2)語義理解:將文本識別成領域相關的語義結果。
(3)語音合成 : 將文本轉化成語音讀出。
#### 應用場景
(1)產品需要流暢自然的中文聊天能力。我們提供精準的語義分析,可正確識別用戶意圖;支持多種上下文結構,滿足連續對話和多重對話的需要。
(2)產品需要自定義語義庫。支持可自定義的NLP智能知識庫系統,滿足用戶特殊語義處理需求。
(3)產品需要廣泛的知識庫。支持上百個使用場景功能,以及豐富的百科知識。
## 使用說明
#### 適用環境
網絡:支持 NET、Wifi 網絡環境
#### 支持版本
系統:支持 iOS 5.0 及以上系統
#### 兼容性
架構:armv7、armv7s、arm64、i386、x86_64;
機型:iPhone 4+,iPad 2+和 iPod 5+;
硬件要求:需要有麥克風,用于支持語音錄入
#### 開發包說明
| 文件名稱 | 用途 |
| --- | --- |
| TRRTuringAPI.h | 圖靈SDK API的通用頭文件 |
| TRRTuringAPIConfig.h | 圖靈SDK API的配置工具類頭文件 |
| TRRTuringRequestManager.h | 圖靈SDK API的請求管理器頭文件 |
| TRRVoiceRecognitionManager.h | 圖靈SDK的語音識別管理器頭文件 |
| TRRSpeechSythesizer.h | 圖靈SDK的語音合成管理器頭文件 |
| BDVoiceRecognitionClient.h | 百度語音識別功能頭文件 |
| libTuringSDK.a | 圖靈SDK的靜態鏈接庫文件 |
| Localizable.strings | 語音識別接口的字符本地化文件(中文簡體) |
#### 集成指南
###### 使用條件
(1)使用圖靈開放API SDK,需要注冊圖靈API開發者帳號,在個人中心的“我的機器人》機器人詳情》接入”頁獲取圖靈APIKEY。
(2)由于語音識別和語音合成接口底層會調用Baidu相關接口。因此使用圖靈IOS SDK,需 要開發者提前獲取Baidu開發者帳號,并創建應用,獲得AppID、APIKey、Secret Key。具體請參考http://yuyin.baidu.com/
###### 框架依賴
以下9個是本SDK可能用到的Framework,部分依賴關系來自于BaiduSDK。
~~~
1. SystemConfiguration.framework
2. Foundation.framework
3. AVFoundation.framework
4. GLKit.framework
5. OpenGLES.framework
6. libz.1.dylib
7. Security.framework
8. CFNetwork.framework
9. CoreLocation.framework
~~~
###### 第三方庫
IOS SDK依賴以下第三方庫(SDK包中已提供,請集成到應用工程中)
1.OpenUDID
2.JSONKit
3.TTTAttributedLabel
4.CoreAudioUtility(蘋果Audio庫)
對于采用ARC內存管理方式的工程,需要利用Non-ARC方式表姨OpenUDID和JSONKit(對相應文件添加CompilerFlags為-fno-objc-arc)
###### 其他集成準備事項
因為SDK包中采用Objective C++實現,因此需要保證工程中引用靜態庫頭文件的實現文件的擴展名必須為.mm。
###### IOS9適配事項
(1)HTTP訪問
IOS9系統默認使用HTTPS網絡協議。由于百度和圖靈SDK目前都只采用HTTP協議,因 此基于圖靈SDK的應用程序也要允許HTTP訪問。
~~~
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
~~~
(2)BITCODE問題由于底層的百度SDK編譯時采用ENABLE_BITCODE模式,因此基于圖靈SDK的應用程序也不能采用ENABLE_BITCODE模式
#### 語義理解
###### 獲取語義理解設置對象
圖靈API使用需要APIKEY(注冊激活圖靈帳號獲取)和UserID(由SDK根據用戶信息生成)。TRRTuringAPIConfig類會協助用戶獲得這兩個屬性,用來完成圖靈API的設置
1. 利用圖靈API KEY初始化TRRTuringAPIConfig對象。
~~~
- (instancetype)initWithAPIKey:(NSString *)apikey;
~~~
2. 該初始化過程中,SDK將讀取本地是否緩存了UserID信息。用戶可以檢查 TRRTuringAPIConfig對象的UserID屬性,如UserID等于nil,用戶需要調用以下接口,聯網獲取UserID
~~~
- (void)request_UserIDwithSuccessBlock:(SuccessStringBlock)success failBlock:(FailBlock)failed;
~~~
由于聯網獲取UserID是異步操作,用戶可以通過設置參數success和failed兩個Block, 來處理操作成功和失敗場景。 其中success Block的參數是成功獲得的UserID,failed Block的參數是API失敗類型,或相關信息字符串。>
###### 使用語義理解接口
1.首先要獲得TRRTuringAPIConfig對象,并用該對象完成語義分析接口的設置;
~~~
- (instancetype)initWithConfig:(TRRTuringAPIConfig *)config;
~~~
2.調用語義分析接口
~~~
- (void)request_OpenAPIWithInfo:(NSString *)info successBlock: (SuccessDictBlock)success failBlock:(FailBlock)failed;
~~~
由于語義分析接口是異步操作,用戶可以通過設置參數success和failed兩個Block,來 處理操作成功和失敗場景。其中success Block的參數是語義分析接口返回的JSON數 據轉換成的Dictionary類型,failedBlock的參數是API失敗類型,或相關信息字符串。
代碼示例如下:
~~~
//初始化TRRTuringAPIConfig對象
TRRTuringAPIConfig *apiConfig = [[TRRTuringAPIConfig alloc]initWithAPIKey:@"TuringApiKey"];
TRRTuringRequestManager apiRequest = [[TRRTuringRequestManager alloc] initWithConfig:apiConfig];
//如userID==nil,需要調?用request_UserIDwithSuccessBlock:failBlock:接?口獲
取UserID
if (apiConfig.userID == nil) {
[apiConfig request_UserIDwithSuccessBlock:^(NSString *str) {
//獲取UserID成功,繼續調用OpenAPI接?
[apiRequest request_OpenAPIWithInfo:self.inputTextView.text successBlock:^(NSDictionary *dict) {
//處理語義分析接口的返回結果
_outputTextView.text = [dict objectForKey:@"text"];
} failBlock:^(TRRAPIErrorType errorType, NSString
*infoStr) {
//處理語義分析失敗結果
_outputTextView.text = infoStr;
}];
}
failBlock:^(TRRAPIErrorType errorType, NSString *infoStr) {
//處理獲取UserID失敗的場景
_outputTextView.text = infoStr;
NSLog(@"erroresult = %@", infoStr);
}];
} else {
//如本地緩存了UserID,則直接調用OpenAPI接?
[apiRequest request_OpenAPIWithInfo:self.inputTextView.text successBlock:^(NSDictionary *dict) {
NSLog(@"apiResult =%@",dict);
_outputTextView.text = [dict objectForKey:@"text"];
} failBlock:^(TRRAPIErrorType errorType, NSString
*infoStr) {
_outputTextView.text = infoStr;
NSLog(@"errorinfo = %@", infoStr);
}];
}
~~~
#### 語音合成
圖靈語音合成API底層會調用Baidu語音合成API,因此使用圖靈SDK時需要獲得Baidu語音合成API所需的APIKEY和SecretKey。
###### 初始化語音合成對象
初始化語音合成對象,并設置APIKEY和SecretKey。
~~~
- (instancetype)initWithAPIKey:(NSString *)apikey secretKey:(NSString*)secretkey;
~~~
###### 設置語音合成參數
通過以下接口設置語音合成參數,參數Key-Value取值參考Baidu SDK中的 BDSSpeechSynthesizer.h文件。
~~~
- (int)setParamForKey:(NSString *)key value:(NSString *)value;
~~~
如果不進行參數設置,圖靈SDK將采用默認的參數進行語音合成,默認參數如下
(1)文本編碼,默認編碼類型為UTF8;
(2)發音人,默認為女聲;
(3)發音音量、語速、音調采取[0-9]的中間值5;
(4)音頻格式,默認為amr;
(5)音頻比特率,默認為15.85k比特率;
###### 控制語音合成操作
利用以下接口可以完成語音合成操作的開始、暫停、恢復、停止等操作。除停止操作外,其他 三個操作都會返回int類型的返回值,其錯誤值含義請參考BDSSpeechSynthesizer.h文件
~~~
- (int)start:(NSString *)text;
- (int)pause;
- (int)resume;
- (void)stop;
~~~
#### 語音識別
圖靈語音識別API底層會調用Baidu語音識別API,因此使用圖靈SDK時需要獲得Baidu語音識別API所需的APIKEY和Secret Key。
###### 獲取語音識別單例句柄
語音識別結果為單例實現,在使用過程中可以調用以下接口獲得單例句柄:
~~~
+ (TRRVoiceRecognitionManager *)sharedInstance;
~~~
###### 獲取語音識別單例句柄
~~~
- ( void)setApiKey:(NSString *)apiKey secretKey:(NSString *)secretKey;
~~~
###### 控制語音識別操作
通過以下接口可以完成對語音識別操作的啟動、關閉和取消功能
~~~
//啟動語音識別操作, 返回值參考BDVoiceRecognitionClient.h中
TVoiceRecognitionStartWorkResult
- (int)startVoiceRecognition;
//停止語音識別操作,代表手動觸發用戶發音結束事件
- (void)stopRecognize;
//取消正在進行的語音識別操作
- (void)cancleRecognize;
~~~
###### 通過Delegate接收語音識別結果
~~~
通過實現TRRVoiceRecognitionManagerDelegate協議,應用程序可以接收語音識別的結果信息,包括正確的結果信息和發生錯誤時的錯誤信息。通過實現TRRVoiceRecognitionManagerDelegate協議,開發人員可以捕獲識別引擎開始工作,檢測到用戶已說話,檢測到用戶已停止說話等事件。
@protocol TRRVoiceRecognitionManagerDelegate
<MVoiceRecognitionClientDelegate>
//接收語音識別結果的代理函數
- (void)onRecognitionResult:(NSString *)result;
//接收語音識別錯誤信息的代理函數。
- (void)onRecognitionError:(NSString *)errStr;
//已啟動語音識別的事件處理函數。
- (void)onStartRecognize;
//檢測到用戶已說話的事件處理函數。
- (void)onSpeechStart;
//檢測到用戶已停止說話的事件代理函數。
- (void)onSpeechEnd;
@end
開發人員需要操作TRRVoiceRecognitionManager對象的屬性delegate來設置代理
@property (nonatomic, weak) id delegate;
~~~
###### 設置語音識別參數
~~~
//獲取采樣速率信息
- (int)getCurrentSampleRate;
// 獲取當前音量級別
- (int)getCurrentDBLevelMeter;
//當前識別類型數組,參見BDVoiceRecognitionClient.h
@property (nonatomic, strong) NSArray *recognitionPropertyList;
//設置城市信息
- (void)setCityID: (NSInteger)cityID;
//進行功能設置,具體參數及取值參考BDVoiceRecognitionClient.h
- (void)setConfig:(NSString *)key withFlag:(BOOL)flag;
//設置識別語言,具體參數及取值參考BDVoiceRecognitionClient.h
- (void)setLanguage:(int)language;
//關閉標點
- (void)disablePuncs:(BOOL)flag;
//設置是否需要對錄音數據進行端點檢測
- (void)setNeedVadFlag: (BOOL)flag;
//設置是否需要對錄音數據進行壓縮
- (void)setNeedCompressFlag: (BOOL)flag;
~~~