圖片翻譯 IOS SDK 簡介
概述
(1) 概念解釋
圖片翻譯:基于文字識別與文本翻譯技術(shù),結(jié)合組段和渲染技術(shù),滿足用戶翻譯圖片文字的需求,提升輸入效率
(2) 說明
Hi,您好,歡迎使用有道智云圖片翻譯iOS SDK。
如果您想快速體驗服務(wù),建議您前往官網(wǎng)體驗中心 或者在體驗中心右下側(cè)找到小程序二維碼,掃描進(jìn)行體驗。
本文檔主要針對需要集成圖片翻譯服務(wù)iOS SDK的開發(fā)工程師,詳細(xì)描述有道智云圖片翻譯能力及集成過程。
如果您有與我們商務(wù)合作的需求,可以通過以下方式聯(lián)系我們:
商務(wù)郵箱: AIcloud_Business@corp.youdao.com
如果您對文檔內(nèi)容有任何疑問,可以通過以下幾種方式聯(lián)系我們:
客服QQ:1906538062
智云翻譯技術(shù)交流QQ 1群: 652880659
智云翻譯技術(shù)交流QQ 2群: 669384425
智云翻譯技術(shù)交流QQ 3群: 807539209
智云翻譯技術(shù)交流QQ 4群: 936752411
聯(lián)系郵箱: zhiyun@corp.youdao.com
溫馨提示:
本文檔主要針對開發(fā)人員,接入測試前需要在后臺創(chuàng)建iOS應(yīng)用,并綁定圖片翻譯實例;如果您還沒有,請按照新手指南 操作。
平臺向每個賬戶贈送50元的體驗金,供用戶集成前測試所用,具體資費規(guī)則詳見圖片翻譯服務(wù)報價 。
功能介紹
有道圖片翻譯 SDK 是有道智云開放平臺提供的云服務(wù)之一,是有道在線圖片翻譯接口的一種實現(xiàn),支持在線圖片翻譯。
兼容性
支持設(shè)備:運行了iOS 8.0及以上系統(tǒng)的 iOS 設(shè)備
圖片翻譯SDK集成指南
集成前提
開始集成SDK之前開發(fā)者需要登錄有道智云平臺 ,創(chuàng)建應(yīng)用獲取應(yīng)用ID(或者通過運營人員獲取應(yīng)用ID),以便使用翻譯服務(wù)。
集成步驟
SDK包導(dǎo)入
翻譯SDK由如下幾個SDK組成,用戶可根據(jù)需要組合使用:
文件 | 說明 |
---|
FanYiSDK.h | 頭文件(必選) |
libbase.a | 圖片翻譯相關(guān)sdk基礎(chǔ)庫(必選) |
libocrtrans.a | 在線圖片翻譯 SDK(必選,使用在線圖片翻譯時使用) |
- 添加頭文件和庫文件:將 translateSDK 添加到工程中,包括 FanYiSDK.h 頭文件和 libFanYiSDK.a 文件。可以直接將 translateSDK 文件夾拖動到工程中,也可以選擇File “Add files to ‘Project Name’…”
- 設(shè)置工程 Other Linker Flags 為 -ObjC
- 若使用離線功能,修改工程中任意一個類后綴名為
.mm
,參見 demo 中 ViewController.mm,Xcode 10.0之前的版本需要添加libstc++.6.0.9.tbd,Xcode 10.0及以上版本需要設(shè)置C++ Standard Library為libc++;若未使用離線功能可跳過此步驟;
- 在工程build Phases – Link Binary With Libraries中添加libFanYiSDK.a, AdSupport.framework, CoreTelephony.framework, SystemConfiguration, libz.tbd和libsqlite3.tbd。如下:
SDK初始化
說明:所有的查詢都需要初始化appKey(應(yīng)用ID),只執(zhí)行初始化一次即可。
注:appKey即應(yīng)用ID
//初始化appKey(應(yīng)用ID)
YDTranslateInstance *yd = [YDTranslateInstance sharedInstance];
yd.appKey = @"your appkey";
功能集成
說明:請參考 demo 中 OCRTransController 的使用
- 構(gòu)造查詢器
YDOCRTransRequest *request = [YDOCRTransRequest request];
YDOCRTransParameter *param = [YDOCRTransParameter param];
param.from = @"en"; //設(shè)置源語言
param.to = @"zh-CHS"; //設(shè)置目標(biāo)語言
param.serverRenderImage = YES; //設(shè)置服務(wù)端渲染
request.param = param;
- 將圖片轉(zhuǎn)化為base64編碼
NSString *base64Str = [self image2DataURL:self.imgView.image];
- 執(zhí)行翻譯過程
識別返回兩種情況,一種是成功,相關(guān)結(jié)果存儲在 result
參數(shù)中,另外一種是失敗,失敗信息放在 error
,可根據(jù) 錯誤代碼列表 查詢。整個識別是異步的。
request lookup:base64Str WithCompletionHandler:^(YDOCRTransRequest *request, NSDictionary *info, NSError *error) {
if (error) {
//失敗
NSLog(@"error:%@", error);
[HUDUtil show:self.view text:@"識別失敗"];
}else {
//成功
YDOCRTransResult *result = [YDOCRTransResult mj_objectWithKeyValues:info];
NSLog(@"%@", result);
[HUDUtil show:self.view text:@"識別成功"];
[self handleOCRTransReuslt:result];
}
}];
翻譯結(jié)果說明
對于在線圖片翻譯,服務(wù)器查詢結(jié)果返回數(shù)據(jù)如下:
{
"orientation": "Up",
"lanFrom": "en",
"textAngle": "0.0",
"errorCode": "0",
"lanTo": "zh-CHS",
"render_image": "...."
"resRegions": [{
"boundingBox": "134,0,1066,249",
"linesCount": 7,
"lineheight": 28,
"context": " There are two ways to cope with the problem in government. One (dis cussed in the preceding chapter) is to supply the service or product in a marketlike environment. Shift the burden of evaluation off the shoulders of professional evaluators and onto the shoulders of clients and customers, and let the latter vote with their feet. The \"client\" in these cases can be individual citizens or government agencies; what is important is that the client be able to choose from among rival suppliers.",
"linespace": 7,
"tranContent": "有兩種方法可以在政府應(yīng)對的問題。一個(在前一章討論)是提供的服務(wù)或產(chǎn)品marketlike環(huán)境。肩上的負(fù)擔(dān),轉(zhuǎn)變評價專業(yè)評估和客戶的肩膀上,并讓后者用腳投票?!翱蛻簟痹谶@些情況下可以公民個人或政府機構(gòu);重要的是客戶端可以選擇從競爭對手的供應(yīng)商。"
}, {
"boundingBox": "116,253,1100,354",
"linesCount": 10,
"lineheight": 28,
"context": " But some public services cannot be supplied, or arc never going to be sup plied, by a market. We can imagine allowing parents to choose among schools but we cannot imagine letting them choose (at least for most purposes) among police departments or armies. In that case one should adopt the second way of evaluating a public service: carry out a demonstration project or conduct a field experiment. (I will use the two ideas interchangeably, though some schol ars distinguish between them.7) An experiment is a planned alteration in a state of affairs designed to measure the effect of the intervention. It involves asking the question, \"If I change X, what will happen to Y, having first made certain that everything else stays the same?\" It sounds easy, but it is not.",
"linespace": 5,
"tranContent": "但是一些公共服務(wù)不能提供,或弧永遠(yuǎn)不會一口招搖撞騙,由一個市場。我們可以想象允許父母選擇在學(xué)校但是我們無法想象讓他們選擇(至少在大多數(shù)情況下)在警察部門或軍隊。在這種情況下應(yīng)該采用第二種方法評價公共服務(wù):開展示范項目或進(jìn)行現(xiàn)場試驗。(我將使用兩個概念互換,盡管有些schol ars區(qū)分them.7)一個實驗計劃變更的狀態(tài)設(shè)計測量干預(yù)的效果。它涉及到問這個問題:“如果我改變X,Y,會發(fā)生什么在第一次確信一切保持不變嗎?”這聽起來容易,但事實并非如此。"
}, {
"boundingBox": "101,609,1141,152",
"linesCount": 4,
"lineheight": 28,
"context": " A good experiment (bad ones are worse than no experiment at all) requires that one do the following: First, identify a course of action to be test ed; call it the treatment. A \"treatment\" can be a police tactic, a school cur riculum, or a welfare program. Second, decide what impact the treatment is",
"linespace": 5,
"tranContent": "一個好的實驗(壞的比任何實驗)要求執(zhí)行以下操作:首先,確定一個測試ed的行動;叫它治療?!爸委煛笨梢允且粋€警察戰(zhàn)術(shù),一個學(xué)校cur riculum,或福利計劃。第二,決定什么是影響治療"
}]
}
render_image 是服務(wù)端渲染過的翻譯圖片
服務(wù)器是按照區(qū)域,行,字的格式返回的,即一張圖片會識別出圖片對應(yīng)的 Result,其上可能有多個區(qū)域 Region,每個區(qū)域會包含一行或多行 Line,boundingBox 字段返回坐標(biāo)和大小。 SDK 對上述 json 數(shù)據(jù)解析封裝為 YDOCRTransResult 對象,如下:
@interface YDOCRTransResult : NSObject
/* 錯誤碼 */
@property (nonatomic, copy) NSString *errorCode;
/* ocr所識別出來認(rèn)為的圖片中的語言 */
@property (nonatomic, copy) NSString *lanFrom;
/* 目標(biāo)語言 */
@property (nonatomic, copy) NSString *lanTo;
/* 圖片所對應(yīng)的方向 */
@property (nonatomic, copy) NSString *orientation;
/* 圖片翻譯的具體內(nèi)容 */
@property (nonatomic, strong) NSArray *resRegions;
/* 圖片的傾斜角度 */
@property (nonatomic, copy) NSString *textAngle;
/* 原始數(shù)據(jù) */
@property (nonatomic, strong) NSDictionary *info;
+ (instancetype)initWithDict:(NSDictionary *)info;
@end
@interface YDOCRTransRegion : NSObject
/* 區(qū)域范圍,四個值:左上角的x值,左上角的y值,區(qū)域的的寬,區(qū)域的高,例如:134,0,1066,249 */
@property (nonatomic, copy) NSString *boundingBox;
/* 該區(qū)域的原文 */
@property (nonatomic, copy) NSString *context;
/* 行高 */
@property (nonatomic, copy) NSString *lineheight;
/* 行數(shù)(用于前端排版) */
@property (nonatomic, copy) NSString *linesCount;
/* 翻譯結(jié)果 */
@property (nonatomic, copy) NSString *tranContent;
/* 行間距 */
@property (nonatomic, copy) NSString *linespace;
+ (instancetype)initWithDict:(NSDictionary *)info;
@end
支持語言
語言 | 代碼 |
---|
中文 | zh-CHS |
日文 | ja |
英文 | en |
韓文 | ko |
法文 | fr |
俄文 | ru |
葡萄牙文 | pt |
西班牙文 | es |
越南文 | vi |
德文 | de |
阿拉伯文 | ar |
印尼文 | id |
自動識別 | auto |
錯誤代碼列表
錯誤碼 | 含義 |
---|
101 | 缺少必填的參數(shù) |
102 | 不支持的語言類型 |
103 | 翻譯文本過長 |
104 | 不支持的API類型 |
105 | 不支持的簽名類型 |
106 | 不支持的響應(yīng)類型 |
107 | 不支持的傳輸加密類型 |
108 | 應(yīng)用ID無效,注冊賬號,登錄后臺創(chuàng)建應(yīng)用和實例并完成綁定,可獲得應(yīng)用ID和應(yīng)用密鑰等信息 |
109 | batchLog格式不正確 |
110 | 無相關(guān)服務(wù)的有效實例 |
111 | 開發(fā)者賬號無效 |
113 | q不能為空 |
114 | 不支持的圖片傳輸方式 |
201 | 解密失敗,可能為DES,BASE64,URLDecode的錯誤 |
202 | 簽名檢驗失敗 |
203 | 訪問IP地址不在可訪問IP列表 |
205 | 請求的接口與應(yīng)用的平臺類型不一致,如有疑問請參考入門指南 |
206 | 因為時間戳無效導(dǎo)致簽名校驗失敗 |
207 | 重放請求 |
301 | 辭典查詢失敗 |
302 | 翻譯查詢失敗 |
303 | 服務(wù)端的其它異常 |
304 | 會話閑置太久超時 |
401 | 賬戶已經(jīng)欠費停 |
402 | offlinesdk不可用 |
411 | 訪問頻率受限,請稍后訪問 |
412 | 長請求過于頻繁,請稍后訪問 |
1001 | 無效的OCR類型 |
1002 | 不支持的OCR image類型 |
1003 | 不支持的OCR Language類型 |
1004 | 識別圖片過大 |
1201 | 圖片base64解密失敗 |
1301 | OCR段落識別失敗 |
1411 | 訪問頻率受限 |
1412 | 超過最大識別字節(jié)數(shù) |
2003 | 不支持的語音聲道 |
2004 | 不支持的語音上傳類型 |
2005 | 不支持的語言類型 |
2006 | 不支持的識別類型 |
2201 | 識別音頻文件過大 |
2301 | 識別音頻時長過長 |
2411 | 不支持的音頻文件類型 |
2412 | 不支持的發(fā)音類型 |
3001 | 不支持的語音格式 |
3002 | 不支持的語音采樣率 |
3003 | 不支持的語音聲道 |
3004 | 不支持的語音上傳類型 |
3005 | 不支持的語言類型 |
3006 | 不支持的識別類型 |
3007 | 識別音頻文件過大 |
3008 | 識別音頻時長過長 |
3009 | 不支持的音頻文件類型 |
3010 | 不支持的發(fā)音類型 |
3201 | 解密失敗 |
3301 | 語音識別失敗 |
3302 | 語音翻譯失敗 |
3303 | 服務(wù)的異常 |
3411 | 訪問頻率受限,請稍后訪問 |
3412 | 超過最大請求字符數(shù) |
5001 | 無效的OCR類型 |
5002 | 不支持的OCR image類型 |
5003 | 不支持的語言類型 |
5004 | 識別圖片過大 |
5005 | 不支持的圖片類型 |
5006 | 文件為空 |
5201 | 解密錯誤,圖片base64解密失敗 |
5301 | OCR段落識別失敗 |
5411 | 訪問頻率受限 |
5412 | 超過最大識別流量 |
9001 | 不支持的語音格式 |
9002 | 不支持的語音采樣率 |
9003 | 不支持的語音聲道 |
9004 | 不支持的語音上傳類型 |
9005 | 不支持的語音識別 Language類型 |
9301 | ASR識別失敗 |
9303 | 服務(wù)器內(nèi)部錯誤 |
9411 | 訪問頻率受限(超過最大調(diào)用次數(shù)) |
9412 | 超過最大處理語音長度 |
10001 | 無效的OCR類型 |
10002 | 不支持的OCR image類型 |
10004 | 識別圖片過大 |
10201 | 圖片base64解密失敗 |
10301 | OCR段落識別失敗 |
10411 | 訪問頻率受限 |
10412 | 超過最大識別流量 |
13001 | 不支持的角度類型 |
13002 | 不支持的文件類型 |
13003 | 表格識別圖片過大 |
13004 | 文件為空 |
13301 | 表格識別失敗 |
17001 | 需要圖片 |
17002 | 圖片過大(1M) |
17003 | 識別類型未找到 |
17004 | 不支持的識別類型 |
17005 | 服務(wù)調(diào)用失敗 |
-1000 | 未知錯誤 |
-2000 | 查詢輸入為空 |
常見問題及注意事項
1.運行程序崩潰?
檢查下是否對應(yīng)的 SDK靜態(tài)庫包
是否放到當(dāng)前工程目錄下。
2.翻譯沒結(jié)果?
檢查下翻譯接口回調(diào)的錯誤信息,保證申請的應(yīng)用ID是有效且提前綁定了。
3.添加翻譯 SDK 之后審核沒有通過?
翻譯 SDK 使用了 AdSupport 框架獲取設(shè)備 IDFA 信息用以統(tǒng)計計費,提交審核時對應(yīng)用是否有廣告選項請選擇“是”。
版本更新記錄
上線日期 | 版本號 | 更新內(nèi)容 |
---|
2017.05.08 | v1.0.0 | 有道智云翻譯 iOS SDK上線,支持在線離線翻譯 |
2017.06.07 | v1.1.0 | 1. 拆分翻譯 SDK,SDK 拆分為多個文件,用戶可根據(jù)需要引用 2. 修復(fù)已知 bug |
2017.06.30 | v1.2.0 | 修復(fù)已知 bug |
2017.07.24 | v1.3.0 | 1. 修復(fù) deeplink 相關(guān) bug |
2017.08.16 | v1.4.0 | 1. 修復(fù)已知 bug |
2018.02.09 | v1.7.0 | 支持在線語音翻譯 |
2018.05.16 | v1.7.2 | 支持在線圖片翻譯 |