移動端OCR識別SDK開發(fā)手冊
(三證一卡、Vin碼、車牌)
文件版本:V3.0.2
修改時(shí)間:2021-07-27
移動端OCR識別SDK開發(fā)手冊
(三證一卡、Vin碼、車牌)
文件版本:V3.0.2
修改時(shí)間:2021-07-27
2
目錄
說明....................................................................................................................................................4
1.1 硬件配置......................................................................................................................................4
1.2 授權(quán)..............................................................................................................................................4
1.3 iOS Demo 測試步驟......................................................................................................................4
1.4 Android Demo 測試步驟.............................................................................................................. 5
第一部分 二代證識別............................................................................................................... 10
· 二代證 Android 部分.....................................................................................................................10
· 二代證 iOS 部分............................................................................................................................ 17
二代證錯(cuò)誤碼...................................................................................................................................26
第二部分 銀行卡識別............................................................................................................... 29
· 銀行卡 Android 部分.....................................................................................................................29
· 銀行卡 iOS 部分............................................................................................................................ 34
銀行卡錯(cuò)誤碼...................................................................................................................................41
第三部分 駕駛證識別............................................................................................................... 43
· 駕駛證 Android 部分.....................................................................................................................43
· 駕駛證 iOS 部分............................................................................................................................ 48
駕駛證錯(cuò)誤碼...................................................................................................................................54
第四部分 行駛證識別............................................................................................................... 57
· 行駛證 Android 部分.....................................................................................................................57
· 行駛證 iOS 部分............................................................................................................................ 64
行駛證錯(cuò)誤碼...................................................................................................................................71
第五部分 Vin 碼識別................................................................................................................. 74
· Vin 碼 Android 部分........................................................................................................................74
· Vin 碼 iOS 部分............................................................................................................................... 79
Vin 碼錯(cuò)誤碼.....................................................................................................................................87
第六部分 車牌識別....................................................................................................................89
· 車牌 Android 部分.........................................................................................................................89
· 車牌 iOS 部分................................................................................................................................ 94
車牌錯(cuò)誤碼.......................................................................................................................................99
3
附錄一 Android 接口參數(shù)描述.....................................................................................................101
附錄二 常見問題...........................................................................................................................103
附錄三 權(quán)限說明...........................................................................................................................107
4
說明
1.1 硬件配置
系統(tǒng):支持 Android 4.0(API Level 15)到 Android 11(API Level 30)
支持 iOS 8.0 以上系統(tǒng)
CPU 架構(gòu): Android 支持: arm64-v8a、armeabi-v7a、armeabi、x86、x86_64
iOS 支持: i386、armv7、x86_64、arm64
支持機(jī)型:手機(jī)和平板。
硬件要求:要求設(shè)備上有相機(jī)模塊。
網(wǎng)絡(luò):OCR 本地離線識別,無需網(wǎng)絡(luò)
1.2 授權(quán)
用戶在做測試和集成開發(fā)之前,需要向 SDK 提供商索取相關(guān)授權(quán)文件,授權(quán)
文件的名稱即為授權(quán)碼,將該文件直接添加到工程中編譯即可。
1.3 iOS Demo測試步驟
步驟一:將授權(quán)文件拖入工程中,必須勾選Add to targets,否則會激活失敗
報(bào)錯(cuò)22。
步驟二:修改AppDelegate.m中的AUTHCODE宏定義為當(dāng)前授權(quán)文件名
步驟三:運(yùn)行并測試(如果出現(xiàn)激活報(bào)錯(cuò)24,則需要修改Demo的BundleID為
申請授權(quán)時(shí)提供的BundleID,并清理緩存后運(yùn)行,查看控制臺打印的BundleID來
確認(rèn)BundleID是否修改成功)
5
1.4 Android Demo測試步驟
步驟一: 將授權(quán)文件放入項(xiàng)目中,并且修改配置文件中的授權(quán)文件名稱。
注: PlateInfoConfig為車牌示例配置文件,不同開發(fā)包對應(yīng)不同Config文
件可自行修改配置.
步驟二:
①此文件為核心必備文件,更新需注意,如下圖所示新增文件為:
6
xxx.bin xxx.dic xxx.param 3 種類型文件
nc_obj.bin 和 nc_obj.param 文件
②添加文件后,初始化需要注意的地方,例如:
③API 接口文件添加此參數(shù):
7
④最后更新替換需要注意: 其他授權(quán)文件,以及識別庫等直接替換覆蓋即可.步驟三: 修改包名為授權(quán)綁定對應(yīng)的app包名(若綁定app名以及其他類型可
對應(yīng)修改相應(yīng)的參數(shù)即可)。
步驟四:運(yùn)行測試,如果出現(xiàn)授權(quán)信息失敗 24 或 21,需要檢查步驟 1,2 中是
否正確配置,以及讀寫權(quán)限是否開啟,特別注意授權(quán)類型要配置正確。
8
測試激活失敗錯(cuò)誤碼參考:
錯(cuò)誤碼 描述 備注
0 激活成功
20 未授權(quán)該產(chǎn)品
iOS:
授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該
產(chǎn)品的授權(quán)文件
Android:
1)產(chǎn)品類型值改為附錄2指定的即可
2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包
含該產(chǎn)品的授權(quán)文件
21 未讀取到授權(quán)文件
iOS:
模擬器運(yùn)行會出現(xiàn)該報(bào)錯(cuò),請使用真機(jī)測試
Android:
授權(quán)文件不存在或者讀取不到,詳見任一OCR產(chǎn)品的“配
置授權(quán)文件”步驟
22 公司未授權(quán)
iOS:
1)是否將授權(quán)文件拖入項(xiàng)目中且AppDelegate.m中宏定義
修改為lic文件名
2)刪除授權(quán)重新拖入,拖入必須勾選Add to targets
4)不可修改授權(quán)文件名
23 無效授權(quán)
24 授權(quán)信息驗(yàn)證失敗
iOS:
需要修改Demo的BundleID為申請授權(quán)時(shí)提供給我們的
9
BundleID
Andorid:
需要修改Demo的包名、app名為申請授權(quán)時(shí)提供給我們的
25 授權(quán)到期
1.授權(quán)文件到期,請聯(lián)系我司業(yè)務(wù)人員。
2.若是不久剛出過授權(quán),請確認(rèn)是否替換最新的授權(quán)
30 SDK版本不符
授權(quán)綁定的SDK版本號和當(dāng)前使用的SDK的版本號不一致
1.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)
2.更換授權(quán)綁定的版本號對應(yīng)的SDK
10
第一部分 二代證識別
· 二代證 Android 部分一、接口簡介
(1) public native int SIDCardKernalInit (String szSysPath,String
filePath,String companyName int nProductType,int
nAultType,TelephonyManager telephonyManager,Context context);
功 能 初始化核心資源
參數(shù)
szSysPath 識別核心所在目錄,傳NULL即可
filePath 授權(quán)文件絕對路徑
companyName 授權(quán)公司名稱
nProductType 產(chǎn)品類型號,具體參考附錄2
nAultType 授權(quán)類型號,具體參考附錄1
telephonyManager
Android自帶手機(jī)管理類,在程序中new出一個(gè)
即可
context 傳this
返回值 0 表示成功,其他值失?。ㄒ姵R妴栴}激活失?。?/p>
(2) public native void SIDCardKernalUnInit ();
功 能 釋放核心資源
參 數(shù) 無
返回值 無
(3) public native int SIDCardSetRecogType(int nType);
11
功 能 設(shè)置識別類型
參 數(shù) nType
0表示自動識別二代證面和反面;1表示只識別
二代證正面,2表示只二代證識別反面
返回值 0表示成功,其他值失敗
(4) public native int SIDCardDetectNV21Corner(byte[]data,int nWidth,int
nHeight,int[]line_x,int[]line_y);
功 能 基于NV21字節(jié)流檢測身份證四條邊緣線
參 數(shù)
data NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
nHeight 適配相機(jī)預(yù)覽高度
line_X 一個(gè)長度為4的數(shù)組
line_y 一個(gè)長度為4的數(shù)組
返回值 3 成功,其他值未成功檢測到身份證
(5) public native int SIDCardRecognizeNV21Corner(byte[]data,int
Width,int Height,int[]line_x,int[] line_y);
功 能 基于NV21字節(jié)流檢線識別(和檢線接口配套使用)
參 數(shù)
data NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
nHeight 適配相機(jī)預(yù)覽高度
line_X 一個(gè)長度為4的數(shù)組
line_y 一個(gè)長度為4的數(shù)組
返回值 0成功,其他值識別失敗。
(6) public native int SIDCardRecognizeNV21 (byte[] ImageStreamNV21, int
nWidth, int nHeight, char[] szBuffer, int BufferLen);
12
功 能 基于NV21字節(jié)流識別(單獨(dú)使用)
參 數(shù)
ImageStreamNV21 NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
nHeight 適配相機(jī)預(yù)覽高度
szBuffer 識別結(jié)果緩沖區(qū)
BufferLen 識別結(jié)果緩沖區(qū)長度
返回值 0成功,其他值識別失敗。
(7) public native int SIDCardRecogImgaeFile (String path);
功 能 導(dǎo)入身份證圖像識別
參 數(shù) path 圖像路徑
返回值 0成功,其他值識別失敗。
(8) public native String SIDCardGetResult (int nIndex);
功 能 獲取各字段的識別內(nèi)容
參 數(shù) nIndex 字段索引值,詳細(xì)見結(jié)尾字段索引表
返回值 各字段的識別內(nèi)容。
(9) public native int SIDCardGetRecogType ();
功 能 獲取識別類型
參 數(shù) 無
返回值 1表示識別的是二代證正面,2表示識別的是二代證反面,其他值失敗
(10) public native int SIDCardSaveCardImage(String path);
功 能 保存證件圖像
13
參 數(shù) path 保存圖像路徑
返回值 0表示成功,其他值失敗
(11) public native int SIDCardSaveHeadImage(String path);
功 能 保存身份證頭像圖
參 數(shù) path 保存圖像路徑
返回值 0表示成功,其他值失敗
(12) public native String SIDCardGetEndTime();
功 能 獲取授權(quán)到期的日期
返回值 一個(gè)日期,格式如(“2018-1-1”)
(13) public native int SIDCardCheckLightSpotNV21Corner(byte[] data, int
Width, int Height, int[] line_x, int[] line_y);
功 能 判斷是否反光
參 數(shù)
data NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
nHeight 適配相機(jī)預(yù)覽高度
line_X 一個(gè)長度為4的數(shù)組
line_y 一個(gè)長度為4的數(shù)組
返回值 1為反光 0為不反光
(14) public native int SIDCardCheckIsCopyNV21(byte[]data,int
Width,int Height,int[]line_x,int[] line_y);
功 能 基于NV21字節(jié)流檢線識別(和檢線接口配套使用)
參 數(shù)
data NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
14
nHeight 適配相機(jī)預(yù)覽高度
line_X 一個(gè)長度為4的數(shù)組
line_y 一個(gè)長度為4的數(shù)組
返回值 1為復(fù)印件 0為原件,其他值識別失敗。
(15) public native int SIDCardSaveBaseImage(String path);
功 能 保存身份證原圖
參 數(shù) path 保存圖像路徑
返回值 0表示成功,其他值失敗
二代證字段索引表
索引 字段名稱
0 姓名
1 性別
2 民族
3 出生
4 地址
5 身份證號碼
6 簽發(fā)機(jī)關(guān)
7 有效期限
二、二代證SDK集成步驟
(1)如圖所示:按照集成身份證庫說明文檔集成 IdcardLibrary 庫
15
(2)配置識別庫,配置授權(quán)文件,nc文件。
如圖所示:將授權(quán)文件以及nc文件放到 assets 目錄下
調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity
Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。
可請參考MainActivity。
(3)配置識別庫,配置授權(quán)文件。
如圖所示:找到 IdcardConfig 這個(gè)類,把 licenseId 的值改為自己授權(quán)
文件的名字
16
進(jìn)入識別之前,加上如下代碼:先初始化授權(quán)文件(完成授權(quán)文件配置)
EtopStreamUtil.initLicenseFile(MainActivity.this,IdcardConfig.licenseId);
(4)配置識別庫,配置授權(quán)文件驗(yàn)證信息
如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名
授權(quán)綁定包名說明:
比如授權(quán)綁定的包名為 com.etop.sample ,那么這個(gè)授權(quán)文件就只能用
在應(yīng)用包名為 com.etop.sample 的應(yīng)用上,用在其他包名的 app 上均激活
失敗 ErrorCode 為 24
(5)在工程中配置相應(yīng)的權(quán)限:
請您在自己的工程AndroidManifest.xml文件中添加如下權(quán)限:
<uses-permission android:name=\"android.permission.CAMERA\"/>
<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.VIBRATE\"/>
各個(gè)權(quán)限的用途說明:
17
CAMERA:調(diào)用相機(jī)進(jìn)行相機(jī)預(yù)覽掃描/拍照,識別相機(jī)中預(yù)覽/拍照數(shù)據(jù)
READ_EXTERNAL_STORAGE:從相冊選擇圖片識別,需要讀取SD卡權(quán)限
WRITE_EXTERNAL_STORAGE:保存識別后的裁切圖片,需要寫入SD卡權(quán)限
VIBRATE:掃描識別成功,震動提示,需要震動權(quán)限
· 二代證 iOS 部分一、接口簡介
1.1 二代證SDK接口簡介
(1) - (int)initSIDCard:(NSString *)nsUserID nsReserve:(NSString *)
nsReserve;
功 能 初始化核心資源
參 數(shù)
nsUserID 授權(quán)碼
nsReserve 保留參數(shù),直接傳nil
返回值 0表示成功,其他值失?。ㄒ姼戒?)
注:1.授權(quán)文件名不可更改!SDK會在內(nèi)部校驗(yàn)授權(quán)文件名。
2.此方法讀取授權(quán)文件時(shí),先從沙盒的Documents中讀取,如果找到授權(quán)文件則繼續(xù)激活識
別核心,否則再在項(xiàng)目目錄中尋找([NSBundle mainBundle]),如果找到授權(quán)文件則繼續(xù)激活
識別核心,否則返回22。如圖2.1所示。
18
圖2.1 授權(quán)文件尋找方式
若您采用服務(wù)器端下載/更新授權(quán)文件的方式,請務(wù)必將授權(quán)文件保存至Documents目錄下,
并以”nsUserID.lic”命名文件(例如傳入的nsUserID為7332DBAFD2FD18301EF6,則下載并保存到
沙盒的授權(quán)文件應(yīng)命名為7332DBAFD2FD18301EF6.lic)。如圖2.2所示。
圖2.2 授權(quán)文件路徑示例
建議此方式下,在項(xiàng)目目錄中也放一個(gè)授權(quán)文件,沒網(wǎng)的情況下也能使用。由于是優(yōu)先讀取
網(wǎng)絡(luò)下載的授權(quán)文件,所以項(xiàng)目目錄中的授權(quán)文件存在不會影響讀取從網(wǎng)絡(luò)下載的最新的授
權(quán)。
(2) - (int)freeSIDCard;
功 能 釋放核心資源
參 數(shù) 無
返回值 0表示釋放成功
(3) - (int)setRecognizeType:(int)nType;
功 能 設(shè)置識別類型
參 數(shù) nType 證件類型(0-自動、1-正面、2-背面)
返回值 0成功,其他值失?。ㄒ姼戒?)
19
(4) - (int)recognizeSIDCard:(UInt8 *)buffer Width:(int)width
Height:(int)height;
功 能 視頻預(yù)覽識別
參 數(shù)
buffer 圖像數(shù)據(jù)地址
width 圖像寬度
height 圖像高度
返回值 0為識別成功,-1為識別失?。▽?shí)時(shí)識別,失敗值不作為判斷依據(jù))
(5) - (int)recognizeSIDCardPhoto:(UIImage *)image;
功 能 (視頻流識別使用)拍照識別
參 數(shù) image 圖像實(shí)例
返回值 0為識別成功,-1為識別失敗
(6) - (int)recognizeSIDCardImage:(UIImage *)image;
功 能 系統(tǒng)相機(jī)/相冊導(dǎo)入識別
參 數(shù) image 圖像實(shí)例
返回值 0為識別成功,-1為識別失敗
(7) - (int)getRecognizeType;
功 能 獲取證件類型
參 數(shù) 無
返回值 返回證件類型(1-正面、2-背面)
(8) - (int)getIDCardDirection;
功 能 獲取證件方向
參 數(shù) 無
返回值 返回證件方向(0-0度、1-180度)
(9) - (int)SIDCardCheckIsCopy;
20
功 能 判斷是否為復(fù)印件
參 數(shù) 無
返回值 返回(0-否、1-是、-1-錯(cuò)誤)
(10) -(int)detectSIDCardSideWithImage:(UIImage *)image
lastDetect:(BOOL)bLastDetect corner:(NSMutableArray *)cornerArray;
功 能 圖像檢四邊
參 數(shù)
image 圖像實(shí)例
bLastDetect 是否是最后一幀
cornerArray
返回檢測到的四個(gè)頂點(diǎn)(左上、右上、右下、
左下)
返回值 0成功,其他值失?。ㄒ姼戒?)
(11) - (int)recognizeSIDCard:(UIImage *)image corners:(NSMutableArray *)
corner;
功 能 (視頻流預(yù)覽識別使用)識別(四邊界點(diǎn))
參 數(shù)
image 圖像實(shí)例
corner 傳入檢測到的四個(gè)頂點(diǎn)(左上、右上、右下、
左下)
返回值 0成功,其他值失?。ㄒ姼戒?)。
(12) - (void)configVerifyParam:(int)verifyType;
功 能 配置校驗(yàn)
參 數(shù) verifyType
0-(默認(rèn)值) 所有校驗(yàn)規(guī)則 1-去除地址校驗(yàn)
2-去除簽發(fā)機(jī)關(guān)校驗(yàn) 3-去除地址和簽發(fā)機(jī)關(guān)
校驗(yàn)
返回值 0無。
(13) - (int)checkLightSpot:(UIImage *)image corners:(NSMutableArray *)
corner;
功 能 (視頻流預(yù)覽識別使用)檢測是否有反光
21
參 數(shù)
image 圖像實(shí)例
corner 傳入證件在圖片中的四個(gè)頂點(diǎn)的位置(左上、
右上、右下、左下)
返回值 0無反光,1有反光,-1四個(gè)頂點(diǎn)錯(cuò)誤
參數(shù)列表
參數(shù)類型 參數(shù)名 類型 釋義
OCR字段
nsName NSString 姓名
nsSex NSString 性別
nsNation NSString 民族
nsBirth NSString 出生日期
nsAddress NSString 地址
nsIDNum NSString 身份證號
nsIssuingAuthority NSString 簽發(fā)機(jī)關(guān)
nsExpDate NSString 有效期限
圖像相關(guān)
imageHead UIImage 人像裁切圖
imageCard UIImage 二代證裁切圖
其他
nsEndTime NSString 授權(quán)到期時(shí)間
pathForIDCard NSString
授權(quán)文件/模型文件
讀取地址(插件化使
用)
sdkVersion NSString 核心庫版本號
needIDCardDebugLog BOOL 需要打印調(diào)試信息
1.2 封裝接口簡介
(1) + (instancetype)sharedManager;
功 能 單例全局訪問點(diǎn)
22
參 數(shù) 無
返回值 單例對象
(2) - (void)recognizeIDCardWithImage:(UIImage *)cardImage
andAuthCode:(NSString *)authCode;
功 能 拍照/導(dǎo)入識別封裝接口
參 數(shù)
cardImage 需要識別的圖像
authCode 授權(quán)文件名
返回值 無
(3) -
(void)recognizeIDCardByVideoStreamWithController:(UIViewController
*)parentController recognizeFront:(BOOL)isFront
isUsePush:(BOOL)usePush isVibrateWhenSuccess:(BOOL)isVibrate
andAuthCode:(NSString *)authCode;
功 能 視頻流預(yù)覽識別封裝接口
參 數(shù)
parentController 當(dāng)前控制器(self)
isFront 默認(rèn)識別人像面/國徽面[YES-人像面 NO-國
徽面]
usePush 是否使用push彈出裁剪控制器[YES-push
NO-modal(模態(tài)彈出)]
isVibrate 識別成功時(shí)是否振動提示
authCode 授權(quán)文件名
返回值 無
1.3 回調(diào)函數(shù)簡介(IDCardManagerDelegate)
(1) - (void)recognizeIDCardPhotoFinishWithSrcImage:(UIImage *)srcImage
cardImage:(UIImage *)cardImage headImage:(UIImage *)headImage
result:(NSDictionary *)resultDic andErrorCode:(int)errorCode;
23
功 能 拍照/導(dǎo)入識別回調(diào)
參 數(shù)
srcImage 識別傳入的身份證圖片
cardImage 身份證裁切圖
headImage 人像圖
resultDic 識別結(jié)果
errorCode 識別結(jié)果(0-識別成功,-1-識別失敗)
返回值 無
(2) - (void)cameraController:(UIViewController *)cameraController
managerRecognizeIDCardByVideoStreamFinishWithResult:(NSDictionary
*)resultDic isFrontOrBack:(int)frontOrBack cardImage:(UIImage
*)cardImage headImage:(UIImage *)headImage andSrcImage:(UIImage
*)srcImage;
功 能 視頻流預(yù)覽識別回調(diào)
參 數(shù)
cameraController 自定義相機(jī)控制器
resultDic 識別結(jié)果
frontOrBack 識別的是正面/背面(1-front 2-Back 0-未知
(拍照識別識別失敗返回該值))
cardImage 身份證裁切圖
headImage 人像圖
srcImage 原圖(無裁切,帶背景)
返回值 無
注:參數(shù) resultDict 為識別結(jié)果,字段值如下。(“反光檢測”僅視頻流識別有)
frontOrBack == 1(正面)
@\"姓名\",@\"性別\",@\"民族\",@\"出生日期\",@\"住址\",@\"身份證號\",@\"是否為復(fù)印
件\",@\"反光檢測\" frontOrBack == 2(背面)
@\"簽發(fā)機(jī)關(guān)\",@\"有效期\",@\"是否為復(fù)印件\",@\"反光檢測\"二、二代證SDK集成步驟
步驟一:將授權(quán)文件和Demo中的IDCard文件夾拖入工程中,拖入授權(quán)文件
時(shí)請選擇Copy items if needed、Create groups和Add to targets。
24
步驟二:在控制器內(nèi)#import \"IDCardManager.h\"步驟三:
如果是相冊導(dǎo)入/系統(tǒng)相機(jī)拍照識別,在
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法內(nèi)
調(diào)用下圖中所示方法即可識別。(詳見Demo)(打開系統(tǒng)相機(jī)/相冊那部分代碼在此不做介
紹,不會寫可參考Demo)
實(shí)現(xiàn)如下代理方法即可獲得導(dǎo)入/拍照識別的識別結(jié)果。(詳見Demo)
如果是視頻流預(yù)覽識別,在點(diǎn)擊事件內(nèi)調(diào)用如下方法即可彈出相機(jī)界面開
始識別。(詳見Demo)
25
實(shí)現(xiàn)如下代理方法即可獲得視頻流識別的識別結(jié)果。(詳見Demo)
注意:Demo中在系統(tǒng)相機(jī)拍照識別/相冊導(dǎo)入識別的識別前后加了一些線程間通
信,在實(shí)際項(xiàng)目中可不寫。Demo中需要使用SVProgressHUD來提供識別時(shí)的轉(zhuǎn)圈
動畫,識別操作屬于耗時(shí)操作放在主線程阻塞UI,轉(zhuǎn)圈動畫無法顯示出來。集成
到項(xiàng)目中后若不開子線程即能滿足需求則可不加線程間通信代碼,開啟子線程與
否不影響識別準(zhǔn)確率,識別速度差距基本可忽略。
步驟四:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。
相機(jī)權(quán)限 NSCameraUsageDescription
相冊權(quán)限
NSPhotoLibraryUsageDescription
≥iOS11.0(相冊
寫入操作需要) NSPhotoLibraryAddUsageDescription
步驟五:添加依賴庫
導(dǎo)入識別:
MobileCoreServices.framework
視頻流預(yù)覽識別:
AVFoundation.framework
CoreMedia.framework
AudioToolbox.framework
步驟六:在Info.plist添加View controller-based status bar appearance,設(shè)為
NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)
26
通用激活錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 激活成功
20 未授權(quán)該產(chǎn)品
iOS:
授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該
產(chǎn)品的授權(quán)文件
Android:
2)產(chǎn)品類型值改為附錄2指定的即可
2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包
含該產(chǎn)品的授權(quán)文件
21 未讀取到授權(quán)文件
iOS:
模擬器運(yùn)行會出現(xiàn)該報(bào)錯(cuò),請使用真機(jī)測試
Android:
授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件
22 公司未授權(quán)
iOS:
1)如果是Demo測試:是否將授權(quán)文件拖入項(xiàng)目中且
AppDelegate.m中宏定義修改為lic文件名
2)項(xiàng)目targets->Build Phases->Copy Bundle Resources,點(diǎn)
擊+號把授權(quán)文件進(jìn)去,再次運(yùn)行
3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報(bào)錯(cuò)22)
4)不可修改授權(quán)文件名
23 無效授權(quán)
24 授權(quán)信息驗(yàn)證失敗
iOS:
檢查項(xiàng)目的BundleID和申請授權(quán)時(shí)提供給我們的BundleID
是否相同
Andorid:
需要項(xiàng)目的信息是否與授權(quán)綁定的信息一致,比如包名、
app名
25 授權(quán)到期
1.授權(quán)文件到期,請聯(lián)系我司業(yè)務(wù)人員。
2.若是不久剛出過授權(quán),請確認(rèn)是否替換最新的授權(quán)
26 nsUserID為空 傳入的nsUserID為空字符串或者nil
30 SDK版本不符
授權(quán)綁定的SDK版本號和當(dāng)前使用的SDK的版本號不一致
3.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)
4.更換授權(quán)綁定的版本號對應(yīng)的SDK
二代證獨(dú)有激活錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 成功
27
2 初始化字典失敗
可能重復(fù)激活核心。確定激活核心和釋放核心代碼是否成
對出現(xiàn)。
3 深度學(xué)習(xí)核心文件讀
取失敗
.dic.param等文件
4/5/6/7/
8
深度學(xué)習(xí)核心文件初
始化失敗
文件是否損壞或配置正確
10
(iOS)復(fù)制模型文件失
敗
查看控制臺輸出的copy error信息
49
(iOS)找不到NCBundle
文件
1.是不是沒將模型文件(IDCardNCResource.bundle拖入項(xiàng)
目
2.是不是拖入的時(shí)候沒勾選AddToTargets
3.是否將bundle文件改名以及bundle文件內(nèi)的三個(gè)文件改
名
二代證檢線錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 檢測不到線
1 第一次檢測到
3 檢測到線
二代證識別錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
通用
0 識別成功
1 加載圖片數(shù)據(jù)失敗 圖像損壞等原因
3 圖像處理失敗
-1 加載圖片數(shù)據(jù)失敗 圖像損壞等原因
-5 識別失敗 識別身份證號
正頁
1 識別結(jié)果獲取小于1
2 圖像解析失敗 圖像數(shù)據(jù)有問題
-1 點(diǎn)檢邊失敗
-2 有效期校驗(yàn)失敗
28
副頁
-2 識別失敗 識別地址失敗
-3 識別失敗 正頁其中一個(gè)數(shù)據(jù)識別為空
29
第二部分 銀行卡識別
· 銀行卡 Android 部分一、接口簡介
1.1 銀行卡 SDK 接口簡介
(1) public native int ScanStart(String szSysPath,String filePath,String
userId int nProductType,int nAultType,TelephonyManager
telephonyManager,Context context);
功能 初始化核心資源
參數(shù)
szSysPath 識別核心所在目錄,傳NULL即可
filePath 授權(quán)文件絕對路徑
userId 授權(quán)碼,由sdk供應(yīng)商提供
nProductType 產(chǎn)品類型號,具體參考附錄2
nAultType 授權(quán)類型號,具體參考附錄1
telephonyManager
Android自帶手機(jī)管理類,在程序中new出一個(gè)即
可
context 傳this
返回值 0 表示成功,其他值失?。ㄒ?常見問題 - 激活失敗)。
(2) public native void ScanEnd ();
功能 釋放核心資源
參數(shù) 無
返回值 無
30
(3) public native void SetRegion (int left,int top,int right,int bottom);
功能 設(shè)置拍攝界面中銀行卡的矩形識別區(qū)域
參數(shù)
left 矩形左邊
top 矩形右邊
right 矩形上邊
bottom 矩形下邊
返回值 無
(4) public native int ScanStreamNV21(byte[] streamnv21, int cols, int
raws, int []line,char[] cardno, int []wrapdata);
功能 基于NV21字節(jié)流識別
參 數(shù)
streamnv21 NV21字節(jié)流數(shù)據(jù)
cols 適配相機(jī)預(yù)覽寬度
raws 適配相機(jī)預(yù)覽高度
line
int類型數(shù)組,長度為4,返回四邊檢測情況,,
1表示檢測到了邊,0表示沒檢測到邊
cardno 識別結(jié)果
wrapdata 返回一個(gè)400*80的圖片數(shù)據(jù)
返回值 0成功,其他值失敗
(5) public native int ScanImage(String ImagePath,char[] cardNo);
功能 導(dǎo)入圖像識別接口
參 數(shù) ImagePath:圖像路徑;cardNo:識別出卡后的信息
返回值 0成功,其他值失敗,表示未發(fā)現(xiàn)銀行卡
(6) public native int InitCardInfo();
31
功能 初始化銀行卡其他信息的核心
參 數(shù) 無
返回值 0成功,其他值失敗
(7)public native int UninitCardInfo();
功能 釋放卡其他信息的核心資源
參數(shù) 無
返回值 無
(8) public native int GetCardInfo(char[] cardno,String[] cardinfo);
功能 根據(jù)卡號,獲取其他信息
參數(shù)
Cardno,識別出的卡后
Cardinfo:返回的卡片信息,數(shù)組的長度要大于等于4!
cardinfo[0]:銀行名稱
cardinfo[1]:卡名稱
cardinfo[2]:銀行代碼
cardinfo[3]:卡類型
返回值 0成功,其他值失敗
(9) public native String GetEndTime ();
功能 獲取授權(quán)文件的截止日期
參 數(shù) 無
返回值 返回授權(quán)的截止日期,在初始化核心成功之后調(diào)用
二、銀行卡SDK集成步驟
(1)如圖所示:按照集成銀行卡庫說明文檔集成 BankLibrary 庫
32
(2)配置識別庫,配置授權(quán)文件。
如圖所示:將授權(quán)文件放到 assets 目錄下
調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity
Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。
可請參考MainActivity。
(3)配置識別庫,配置授權(quán)文件。
如圖所示:找到 BankConfig 這個(gè)類,把 licenseId 的值改為自己授權(quán)文件的
名字
33
進(jìn)入識別之前,加上如下代碼:先初始化授權(quán)文件(完成授權(quán)文件配置)
EtopStreamUtil.initLicenseFile(MainActivity.this,BankConfig.licenseId);
(4)配置識別庫,配置授權(quán)文件驗(yàn)證信息
如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名
授權(quán)綁定包名說明:
比如授權(quán)綁定的包名為 com.etop.sample ,那么這個(gè)授權(quán)文件就只能用
在應(yīng)用包名為 com.etop.sample 的應(yīng)用上,用在其他包名的 app 上均激活失
敗 ErrorCode 為 24
(5)在工程中配置相應(yīng)的權(quán)限:
請您在自己的工程AndroidManifest.xml文件中添加如下權(quán)限:
34
<uses-permission android:name=\"android.permission.CAMERA\"/>
<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.VIBRATE\"/>
各個(gè)權(quán)限的用途說明:
CAMERA:調(diào)用相機(jī)進(jìn)行相機(jī)預(yù)覽掃描/拍照,識別相機(jī)中預(yù)覽/拍照數(shù)據(jù)
READ_EXTERNAL_STORAGE:從相冊選擇圖片識別,需要讀取SD卡權(quán)限
WRITE_EXTERNAL_STORAGE:保存識別后的裁切圖片,需要寫入SD卡權(quán)限
VIBRATE:掃描識別成功,震動提示,需要震動權(quán)限
· 銀行卡 iOS 部分一、接口簡介
1.1 銀行卡SDK接口簡介
1) SBankCard:
(1) - (int)initSBankCard:(NSString *)nsUserID nsReserve:(NSString *)
nsReserve;
功 能 初始化核心資源
參 數(shù)
nsUserID 授權(quán)碼/授權(quán)文件名
nsReserve 保留參數(shù),直接傳nil
返回值 0表示成功,其他值失?。ㄒ姼戒?)
注:授權(quán)文件和深度學(xué)習(xí)模型文件讀取路徑順序:
1.用戶設(shè)定地址
2.沙盒
3.[NSBundle mainBundle]
(2) - (int)freeSBankCard;
功 能 釋放核心資源
參 數(shù) 無
返回值 0表示成功
(3) - (void)setRegionWithLeft:(int)nLeft Top:(int)nTop Right:(int)nRight
Bottom:(int)nBottom;
35
功 能 設(shè)置銀行卡的檢測區(qū)域
參 數(shù)
nLeft 左邊界
nTop 上邊界
nRight 右邊界(左邊界+寬度)
nBottom 下邊界(上邊界+高度)
返回值 無
(4) - (int)recognizeSBankCard:(UInt8 *)buffer Width:(int)width
Height:(int)height;
功 能 視頻流識別
參 數(shù)
buffer 圖像數(shù)據(jù)地址
width 圖像寬度
height 圖像高度
返回值
0表示成功,1、2表示識別失敗(實(shí)時(shí)識別,失敗的值不作為判斷依據(jù)),
19表示未初始化核心導(dǎo)致識別失敗
(5) - (int)recognizeSBankCardImage:(UImage *)image;
功 能 系統(tǒng)相冊導(dǎo)入/系統(tǒng)相機(jī)拍照識別
參 數(shù) image 圖像實(shí)例
返回值 0表示成功,19表示識別失敗
(6) - (void)setRecognizeType:(int)type;
功 能 設(shè)置識別類型
參 數(shù) type 0-橫屏 1-豎屏
返回值 無
參數(shù)列表
參數(shù)類型 參數(shù)名 類型 釋義
OCR字段
nsNo NSString 銀行卡號
nsValidThru NSString 有效日期
圖像相關(guān)
resultImg UIImage 卡號裁切圖
bankCardImg UIImage 銀行卡裁切圖
其他
nsEndTime NSString 授權(quán)到期時(shí)間
pathForBC NSString
授權(quán)文件/模型文件
讀取地址(插件化使
36
用)
sdkVersion NSString 核心庫版本號
needBCLog BOOL 需要打印調(diào)試信息
2) SBankCardInfo:
(1) -(int)initSBankCardInfo;
功 能 初始化核心資源
參 數(shù) 無
返回值 0表示成功,其他值失?。ㄒ姼戒?)
(2) - (void)freeSBankCardInfo;
功 能 釋放核心資源
參 數(shù) 無
返回值 無
(3) - (int)getSBankCardInfo:(NSString *)nsBankCardNo;
功 能 通過銀行卡號獲取銀行卡信息
參 數(shù) nsBankCardNo 銀行卡號
返回值 1表示成功,0表示失敗
參數(shù)列表
參數(shù)類型 參數(shù)名 類型 釋義
字段
nsBankName NSString 開戶行名稱
nsCardName NSString 銀行卡名稱
nsBankCode NSString 銀行代碼
nsCardType NSString 銀行卡類型
其他 sdkVersion NSString 核心庫版本號
1.2 封裝接口簡介
(1) + (instancetype)sharedManager;
37
功 能 單例全局訪問點(diǎn)
參 數(shù) 無
返回值 單例對象
(2) - (void)recognizeBankCardWithImage:(UIImage *)bcImage
andAuthCode:(NSString *)authCode;
功 能 拍照/導(dǎo)入識別封裝接口
參 數(shù)
bcImage 需要識別的圖像
authCode 授權(quán)文件名
返回值 無
(3) -
(void)recognizeBankCardByVideoStreamWithController:(UIViewController
*)parentController isUsePush:(BOOL)usePush
isVibrateWhenSuccess:(BOOL)isVibrate andAuthCode:(NSString *)authCode;
功 能 視頻流預(yù)覽識別封裝接口
參 數(shù)
parentController 當(dāng)前控制器(self)
usePush 是否使用push彈出裁剪控制器[YES-push
NO-modal(模態(tài)彈出)]
isVibrate 識別成功時(shí)是否振動提示
authCode 授權(quán)文件名
返回值 無
1.3 回調(diào)函數(shù)簡介(BankCardManagerDelegate)
(1) - (void)recognizeBankCardPhotoFinishWithImage:(UIImage *)bcImage
result:(NSDictionary *)resultDic andErrorCode:(int)errorCode;
功 能 拍照/導(dǎo)入識別回調(diào)
參 數(shù)
bcImage 識別傳入的銀行卡圖片
resultDic 識別結(jié)果
errorCode 識別結(jié)果(0-識別成功,19-識別失敗)
返回值 無
(2) - (void)cameraController:(UIViewController *)cameraController
recognizeBankCardByVideoStreamFinishWithImage:(UIImage *)bcImage
bankNumberAreaImage:(UIImage *)numAreaImage srcImage:(UIImage
*)srcImage andResult:(NSDictionary *)resultDic;
38
功 能 視頻流預(yù)覽識別回調(diào)
參 數(shù)
cameraController 自定義相機(jī)控制器
bcImage 銀行卡裁切圖
numAreaImage 截取的銀行卡號碼區(qū)域的圖片(400*70)
srcImage 完整原圖
resultDic 識別結(jié)果
返回值 無
成員變量:參數(shù) resultDict 為識別結(jié)果,字段值如下。
@\"銀行卡號\",@\"發(fā)卡行名稱\",@\"銀行卡名稱\",@\"銀行卡種\",@\"機(jī)構(gòu)代碼\"二、銀行卡SDK集成步驟
步驟一:將授權(quán)文件和BankCard文件夾拖入工程中,拖入授權(quán)文件時(shí)請選
擇Copy items if needed、Create groups和Add to targets。
步驟二:在控制器內(nèi)#import \"BankCardManager.h\"步驟三:
如果是相冊導(dǎo)入/系統(tǒng)相機(jī)拍照識別,先#import \"REEditController.h\",
并在
39
- (void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法內(nèi)
調(diào)用下圖中所示方法進(jìn)入編輯界面。(詳見Demo)(打開系統(tǒng)相機(jī)/相冊那部分代碼在此不
做介紹,不會寫可參考Demo)
實(shí)現(xiàn)代理方法即可拿到裁切后的圖。
實(shí)現(xiàn)如下代理方法即可獲得導(dǎo)入/拍照識別的識別結(jié)果。(詳見Demo)
如果是視頻流預(yù)覽識別,在點(diǎn)擊事件內(nèi)調(diào)用如下方法即可彈出相機(jī)界面開
始識別。(詳見Demo)
40
實(shí)現(xiàn)如下代理方法即可獲得視頻流識別的識別結(jié)果。(詳見Demo)
注意:Demo中在導(dǎo)入/拍照識別的識別前后加了一些線程間通信,在實(shí)際項(xiàng)目中
可不寫。Demo中需要使用SVProgressHUD來提供識別時(shí)的轉(zhuǎn)圈動畫,識別操作屬
于耗時(shí)操作放在主線程阻塞UI,轉(zhuǎn)圈動畫無法顯示出來。集成到項(xiàng)目中后若不開
子線程即能滿足需求則可不加線程間通信代碼,開啟子線程與否不影響識別準(zhǔn)確
率,識別速度差別基本可忽略。
步驟四:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。
相機(jī)權(quán)限 NSCameraUsageDescription
相冊權(quán)限
NSPhotoLibraryUsageDescription
≥iOS11.0(相冊
寫入操作需要) NSPhotoLibraryAddUsageDescription
步驟五:添加依賴庫
導(dǎo)入識別:
MobileCoreServices.framework
視頻流預(yù)覽識別:
AVFoundation.framework
CoreMedia.framework
AudioToolbox.framework
步驟六:在Info.plist添加View controller-based status bar appearance并設(shè)為
NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)
41
通用激活錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 激活成功
20 未授權(quán)該產(chǎn)品
iOS:
授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該
產(chǎn)品的授權(quán)文件
Android:
3)產(chǎn)品類型值改為附錄2指定的即可
2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包
含該產(chǎn)品的授權(quán)文件
21 未讀取到授權(quán)文件
iOS:
模擬器運(yùn)行會出現(xiàn)該報(bào)錯(cuò),請使用真機(jī)測試
Android:
授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件
22 公司未授權(quán)
iOS:
1)如果是Demo測試:是否將授權(quán)文件拖入項(xiàng)目中且
AppDelegate.m中宏定義修改為lic文件名
2)項(xiàng)目targets->Build Phases->Copy Bundle Resources,點(diǎn)
擊+號把授權(quán)文件進(jìn)去,再次運(yùn)行
3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報(bào)錯(cuò)22)
4)不可修改授權(quán)文件名
23 無效授權(quán)
24 授權(quán)信息驗(yàn)證失敗
iOS:
檢查項(xiàng)目的BundleID和申請授權(quán)時(shí)提供給我們的BundleID
是否相同
Andorid:
需要項(xiàng)目的信息是否與授權(quán)綁定的信息一致,比如包名、
app名
25 授權(quán)到期
1.授權(quán)文件到期,請聯(lián)系我司業(yè)務(wù)人員。
2.若是不久剛出過授權(quán),請確認(rèn)是否替換最新的授權(quán)
30 SDK版本不符
授權(quán)綁定的SDK版本號和當(dāng)前使用的SDK的版本號不一致
5.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)
6.更換授權(quán)綁定的版本號對應(yīng)的SDK
銀行卡獨(dú)有激活錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 成功
1 初始化字典失敗 重復(fù)激活核心。確定激活核心和釋放核心代碼是否成對出
42
現(xiàn)。
7 關(guān)鍵文件獲取失敗 如核心文件等
26 nsUserID為空 檢查激活核心時(shí)傳入的nsUserID是不是nil或空字符串
銀行卡識別錯(cuò)誤碼
錯(cuò)誤碼 描述 備注
0 識別成功
1 檢線失敗/圖像處理失
敗
2
識別失敗/圖像解析失
敗
圖像數(shù)據(jù)有問題
19 識別失敗
43
第三部分 駕駛證識別
· 駕駛證 Android 部分一、駕駛證接口簡介
(1) public native int DLKernalInit (String szSysPath,String filePath,String
companyName int nProductType,int nAultType,TelephonyManager
telephonyManager,Context context);
功能 初始化核心資源
參數(shù)
szSysPath 識別核心所在目錄,傳NULL即可
filePath 授權(quán)文件絕對路徑
companyName 授權(quán)公司名稱
nProductType 產(chǎn)品類型號,具體參考附錄2
nAultType 授權(quán)類型號,具體參考附錄1
telephonyManager
Android自帶手機(jī)管理類,在程序中new出一個(gè)
即可
context 傳this
返回值 0 表示成功,其他值失?。ㄒ姵R妴栴}-激活失?。?。
(2) public native void DLKernalUnInit ();
功能 釋放核心資源
參數(shù) 無
返回值 無
(3) public native int DLDetectLine(byte[] data, int nWidth, int nHeight,
44
int []LineX,int[]LineY);
功能 基于NV21字節(jié)流檢測證件自動拍照
參 數(shù)
data NV21字節(jié)流數(shù)據(jù)
nWidth 適配相機(jī)預(yù)覽寬度
nHeight 適配相機(jī)預(yù)覽高度
LineX[] 檢測到的四點(diǎn)橫坐標(biāo)(數(shù)組大小為4)
LineY[] 檢測到的四點(diǎn)縱坐標(biāo)(數(shù)組大小為4)
返回值 0成功,其他值表示檢測狀態(tài)(見附錄3)
(4) public native int DLRecognizePhoto (byte[] data, int nLen);
功能 拍照識別駕駛證正頁
參 數(shù)
data 拍照圖像jpg數(shù)據(jù)
nLen data數(shù)據(jù)的長度
返回值 0表示成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)
(5) public native int DLDeputyPageRecognizePhoto (byte[] data, int nLen);
功能 拍照識別駕駛證副頁
參 數(shù)
data 拍照圖像jpg數(shù)據(jù)
nLen data數(shù)據(jù)的長度
返回值 0表示成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)
(6) public native int DLRecognizeImageFileW(String imgPath);
功能 導(dǎo)入識別駕駛證正頁
參 數(shù) imgPath 需要識別的圖像路徑
返回值 0成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)
45
(7) public native int DLRecogDeputyPageImage(String imgPath);
功能 導(dǎo)入識別駕駛證副頁
參 數(shù) imgPath 需要識別的圖像路徑
返回值 0成功,其他值失敗(原因:圖像中未發(fā)現(xiàn)駕照、圖像不清晰)
(8) public native String DLGetResult (int nIndex);
功能 獲取各字段的識別內(nèi)容
參 數(shù) nIndex 字段索引值,詳細(xì)下面駕駛證字段索引表
返回值 各字段的識別內(nèi)容。駕駛證字段索引表
索引 字段名稱
0 證號
1 姓名
2 性別
3 住址
4 初始領(lǐng)證日期
5 準(zhǔn)駕車型
6 有效初始日期
7 有效期限/有效期至
8 國籍
9 出生日期
46
二、駕駛證SDK集成步驟
(1)如圖所示:按照集成駕駛證庫說明文檔集成 DriveLicenseLibrary 庫
(2)配置識別庫,配置授權(quán)文件。
如圖所示:將授權(quán)文件放到 assets 目錄下
調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity
Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。
可請參考MainActivity
(3)配置識別庫,配置授權(quán)文件。
如圖所示:找到 IdcardConfig 這個(gè)類,把 licenseId 的值改為自己授權(quán)文件
的名字
47
進(jìn)入識別之前,加上如下代碼:先初始化授權(quán)文件(完成授權(quán)文件配置)
EtopStreamUtil.initLicenseFile(MainActivity.this,DriveLicenseConfig.licenseId);
(4)配置識別庫,配置授權(quán)文件驗(yàn)證信息
如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名
授權(quán)綁定包名說明:
比如授權(quán)綁定的包名為 com.etop.sample ,那么這個(gè)授權(quán)文件就只能用
在應(yīng)用包名為 com.etop.sample 的應(yīng)用上,用在其他包名的 app 上均激活失
敗 ErrorCode 為 24
(5)在工程中配置相應(yīng)的權(quán)限:
請您在自己的工程AndroidManifest.xml文件中添加如下權(quán)限:
<uses-permission android:name=\"android.permission.CAMERA\"/>
<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>
<uses-permission android:name=\"android.permission.VIBRATE\"/>
48
各個(gè)權(quán)限的用途說明:
CAMERA:調(diào)用相機(jī)進(jìn)行相機(jī)預(yù)覽掃描/拍照,識別相機(jī)中預(yù)覽/拍照數(shù)據(jù)
READ_EXTERNAL_STORAGE:從相冊選擇圖片識別,需要讀取SD卡權(quán)限
WRITE_EXTERNAL_STORAGE:保存識別后的裁切圖片,需要寫入SD卡權(quán)限
VIBRATE:掃描識別成功,震動提示,需要震動權(quán)限
· 駕駛證 iOS 部分一、駕駛證接口簡介
1.1 SDK接口簡介
(1) - (int)initDriveLicense:(NSString *)nsUserID nsReserve:(NSString *)
nsReserve;
功 能 初始化核心資源
參 數(shù)
nsUserID 授權(quán)碼/授權(quán)文件名
nsReserve 保留參數(shù),直接傳nil
返回值 0表示成功,其他值失敗(見附錄1)。
(2) - (int)freeDriveLicense;
功 能 釋放核心資源
參 數(shù) 無
返回值 0表示成功
(3) - (int)detectDriveLicenseSide:(UInt8 *)buffer Width:(int)width
Height:(int)height Corner:(NSMutableArray *) cornerArray;
功 能 檢測證件四個(gè)角在圖片中的位置
參 數(shù)
buffer 圖像數(shù)據(jù)地址
width 圖像寬度
height 圖像高度
cornerArray
返回證件四個(gè)頂點(diǎn)位置(順序:左上、右上、
右下、左下)
返回值 0表示成功,其他值(31、32、33、34)失?。ㄒ姼戒?)。
(4) - (int)recognizeDriveLicense:(UInt8 *)buffer Width:(int)width
Height:(int)height;
49
功 能 視頻預(yù)覽識別
參 數(shù)
buffer 圖像數(shù)據(jù)地址
width 圖像寬度
height 圖像高度
返回值 0表示成功,其他值失?。ㄒ姼戒?)。
(5) - (int)recognizeDriveLicensePhoto:(UIImage *)image;
功 能 拍照識別
參 數(shù) image 圖像實(shí)例
返回值 0表示成功,其他值失?。ㄒ姼戒?)。
(6) - (int)recognizeDriveLicenseImage:(UIImage *)image;
功 能 導(dǎo)入識別
參 數(shù) image 圖像實(shí)例
返回值 0表示成功,其他值失?。ㄒ姼戒?)。
參數(shù)列表
參數(shù)類型 參數(shù)名 類型 釋義
OCR字段
nsIDNo NSString 證號
nsName NSString 姓名
nsSex NSString 性別
nsNationality NSString 國籍
nsBirthday NSString 出生日期
nsAddress NSString 地址
nsIssueDate NSString 初次領(lǐng)證日期
nsIssuingAuthority NSString 簽發(fā)機(jī)關(guān)
nsClass NSString 準(zhǔn)駕車型
nsValidFrom NSString 有效起始日期
nsValidFor NSString 有效期限
nsDeputyPageID NSString 副頁證號
50
nsDeputyPageNO NSString 副頁檔案編號
圖像相關(guān) resultImg UIImage
裁切圖(1280*720)(暫
無返回)
其他
nsEndTime NSString 授權(quán)到期時(shí)間
pathForDL NSString
授權(quán)文件/模型文件
讀取地址(插件化使
用)
sdkVersion NSString 核心庫版本號
needDLLog BOOL 需要打印調(diào)試信息
1.2 封裝接口簡介
(1) + (instancetype)sharedDLManager;
功 能 單例全局訪問點(diǎn)
參 數(shù) 無
返回值 單例對象
(2) - (void)recognizeDLWithController:(UIViewController
*)parentController licencePhoto:(UIImage *)licencePhoto
isNeedTailor:(BOOL)needTailor isUsePush:(BOOL)usePush
authCode:(NSString *)authCode andIsFrontPage:(BOOL)isFrontPage;
功 能 拍照/導(dǎo)入識別封裝接口
參 數(shù)
parentController 當(dāng)前控制器(傳self)
licencePhoto 駕駛證圖片
needTailor 是否需要剪裁
usePush 是 否 使 用 push 彈 出 控 制 器 (YES-Push
NO-Modal)
authCode 授權(quán)文件名
isFrontPage 是否是正頁(YES-正頁 NO-副頁)
返回值 無
(3) - (void)recognizeDLByVideoStreamWithController:(UIViewController
*)parentController isUsePush:(BOOL)usePush authCode:(NSString