一、背景
最近衙傀,我在負(fù)責(zé)做一個圖像識車的SDK抬吟,涉及到圖片壓縮,圖片旋轉(zhuǎn)统抬,pods和靜態(tài)庫的結(jié)合火本。所以我調(diào)研了幾個相關(guān)做圖像識別的2個大廠做出來的SDK,借此分享一下聪建,以及我們要借鑒他們設(shè)計產(chǎn)品的思路以及SDK的封裝钙畔。
二、 競品分析工程化案例
? ? 1. 百度文字識別(OCR)
? ? ?關(guān)于Optical Character Recognition(OCR)的基礎(chǔ)知識金麸,大家有興趣的可以先去了解一下擎析,這里就不便多做介紹。與OCR相結(jié)合的app 比較好的就有 名片全能王這款app 下面兩張圖片如下
圖像識別的交互功能挥下,可以借鑒一下如上揍魂。
1.SDK分析
接下來挪鹏,讓我們看一下百度OCRS,是怎么封裝愉烙,怎么讓這些廠家調(diào)用的讨盒。
1.1 OCR服務(wù)SDK 包含什么
首先這個百度OCR服務(wù) ,包含了三個framework步责,如下:
AipBase.framework中包含了OCR服務(wù)相關(guān)基礎(chǔ)類返顺,必須引入。
IdcardQuality.framework包含了身份證質(zhì)量控制的功能蔓肯,按需引入遂鹊。
AipOcrSdk工程包含了相機相關(guān)操作,如果需要相機接口蔗包,需要引入
1.2 第一步驟秉扑,SDK集成與接口調(diào)用
使用SDK時,需要將AipBase.framework和AipOcrSdk.framework嵌入工程(Embed Binary方式调限,可參考AipOcrDemo工程),并導(dǎo)入相關(guān)頭文件
1.3 授權(quán)
按照自己的業(yè)務(wù)需求舟陆,引入完畢之后,接下來第一個重點就是需要授權(quán)耻矮,就是在工程里面授權(quán)
1.3.1 第一種方式,復(fù)制應(yīng)用的Api Key(簡稱AK) 和 Secret Key(簡稱SK)秦躯,初始化AipOcrService單例:
// 示例
[[AipOcrService shardService]authWithAK:@"Api Key"andSK:@"Secret Key"];
1.3.2第二種方式,下載對應(yīng)應(yīng)用的授權(quán)文件(默認(rèn)名字為aip.license):
1.在官網(wǎng)中配置應(yīng)用
2.下載對應(yīng)應(yīng)用的授權(quán)文件(默認(rèn)名字為aip.license)
3.將授權(quán)文件添加至XCode工程(配置為資源并拷貝裆装,Target -> Build Phases -> Copy Bundle Resource 中添加該文件)
4.讀取授權(quán)文件原始字節(jié)踱承,NSData格式,初始化AipOcrService單例:
?2.相機接口
2.1 在工程Info.plist中添加NSCameraUsageDescription哨免,相機權(quán)限說明
2.2 調(diào)啟相機
初始化ViewController茎活,其中
通用文字識別:UIViewController* vc = [AipGeneralVC ViewControllerWithDelegate:self]
銀行卡識別UIViewController * vc = [AipCaptureCardVCViewControllerWithCardType:CardTypeBankCardandDelegate:self]
身份證識別
正面:UIViewController * vc = [AipCaptureCardVCViewControllerWithCardType:CardTypeIdCardFontandDelegate:self]
背面:UIViewController * vc = [AipCaptureCardVCViewControllerWithCardType:CardTypeIdCardFontandDelegate:self]
在合適的地方啟動ViewController: 如[selfpresentViewController:vcanimated:YEScompletion:nil]
2.3 該調(diào)用方法將會自動打開相機,用戶拍照琢唾、確認(rèn)载荔,完成識別之后, 使用delegate直接返回識別結(jié)果。
內(nèi)部使用了[AipOcrService shardService]進行數(shù)據(jù)調(diào)用慧耍。
操作步驟:
身份驗證:調(diào)用[[AipOcrService shardService]authWithAK:SK或其他驗證方法身辨;
在需要回調(diào)的類中實現(xiàn)AipOcrDelegate的接口(按需實現(xiàn)即可)∩直蹋可在這些方法中pop出OCR的View,具體參考Demo工程煌珊。
通用文字識別成功:- (void) ocrOnGeneralSuccessful:(id)result
銀行卡識別成功:- (void) ocrOnBankCardSuccessful:(id)result
身份證識別成功:- (void) ocrOnIdCardSuccessful:(id)result
識別失敗:- (void) ocrOnFail:(NSError *)error
3.數(shù)據(jù)接口
這寫接口都是在AipBase.framework 中的泌豆,也就是說要想實現(xiàn)OCR服務(wù)定庵,就必須引用這個AipBase.framework。
該調(diào)用方法傳入需要識別的UIImage,異步識別蔬浙,識別完成之后猪落,回調(diào)返回識別結(jié)果。
主要類為AipOcrService類畴博,使用單例[AipOcrService sharedService]來調(diào)用相關(guān)接口即可笨忌。
操作步驟:
身份驗證:調(diào)用[[AipOcrService shardService]authWithAK:SK或其他驗證方法;
調(diào)用以下相應(yīng)接口
通用文字識別detectTextFromImage
通用文字識別(不帶位置信息)detectTextBasicFromImage
通用文字識別 (含生僻字)detectTextEnhancedFromImage
網(wǎng)圖識別detectWebImageFromImage
身份證正面detectIdCardFrontFromImage
身份證背面detectIdCardBackFromImage
銀行卡detectBankCardFromImage
4:總結(jié)
基本上實現(xiàn)百度的OCR 服務(wù)俱病,是必須要引入AipBase.framework官疲,這里面包含識別一些接口實現(xiàn),AipOcrSdk.framework亮隙,即AipOcr工程包含了相機相關(guān)操作代碼途凫,如開發(fā)者想直接使用,無需引用AipOcrSdk工程溢吻,直接引入AipOcrSdk.framework即可维费。若需要修改相機操作相關(guān)UI,可引入AipOcrSdk工程促王,編輯相關(guān)UI代碼即可犀盟。
??