国产AV88|国产乱妇无码在线观看|国产影院精品在线观看十分钟福利|免费看橹橹网站

移動端OCR開發(fā)文檔

發(fā)布時間:2023-3-03 | 雜志分類:其他
免費制作
更多內(nèi)容

移動端OCR開發(fā)文檔

51*)authCode isFrontPage:(BOOL)isFrontPage;功 能 視頻流預(yù)覽識別封裝接口參 數(shù)parentController 當(dāng)前控制器(self)usePush 是否使用push彈出裁剪控制器[YES-pushNO-modal(模態(tài)彈出)]authCode 授權(quán)文件名isFrontPage 是否是正頁(YES-正頁 NO-副頁)返回值 無1.3 回調(diào)函數(shù)簡介(DriverLicenceManagerDelegate)(1) - (void)editController:(UIViewController *)editControllerphotoRecognizeDLFinishWithResult:(NSDictionary *)resultDicerrorCode:(int)errorCode andCroppedImage:(UIImage *)croppedImage;功 能 有剪裁的拍照/導(dǎo)入識別回調(diào)參 數(shù)editController 編輯界面控制器resultDic 識別結(jié)果errorCode 識別結(jié)果(0-識別成功,19-識別失敗)crop... [收起]
[展開]
移動端OCR開發(fā)文檔
粉絲: {{bookData.followerCount}}
文本內(nèi)容
第51頁

51

*)authCode isFrontPage:(BOOL)isFrontPage;

功 能 視頻流預(yù)覽識別封裝接口

參 數(shù)

parentController 當(dāng)前控制器(self)

usePush 是否使用push彈出裁剪控制器[YES-push

NO-modal(模態(tài)彈出)]

authCode 授權(quán)文件名

isFrontPage 是否是正頁(YES-正頁 NO-副頁)

返回值 無

1.3 回調(diào)函數(shù)簡介(DriverLicenceManagerDelegate)

(1) - (void)editController:(UIViewController *)editController

photoRecognizeDLFinishWithResult:(NSDictionary *)resultDic

errorCode:(int)errorCode andCroppedImage:(UIImage *)croppedImage;

功 能 有剪裁的拍照/導(dǎo)入識別回調(diào)

參 數(shù)

editController 編輯界面控制器

resultDic 識別結(jié)果

errorCode 識別結(jié)果(0-識別成功,19-識別失敗)

croppedImage 剪裁后的圖片

返回值 無

(2) - (void)photoRecognizeDLFinishWithResult:(NSDictionary *)resultDic

andErrorCode:(int)errorCode;

功 能 無剪裁的拍照/導(dǎo)入識別回調(diào)

參 數(shù)

resultDic 識別結(jié)果

errorCode 識別結(jié)果(0-識別成功,19-識別失敗)

返回值 無

(3) - (void)cameraController:(UIViewController *)cameraController

recognizeDLByVideoStreamFinishWithResult:(NSDictionary *)resultDic

isFront:(BOOL )isFront andLicenceImage:(UIImage *)licenceImage;

功 能 視頻流預(yù)覽識別回調(diào)

參 數(shù)

cameraController 自定義相機(jī)控制器

resultDic 識別結(jié)果

isFront 是正頁/副頁(YES-正頁 NO-副頁)

licenceImage 駕駛證圖片

返回值 無

注:參數(shù) resultDict 為識別結(jié)果,字段值如下。

第52頁

52

正頁:

@\"姓名\",@\"性別\",@\"證號\",@\"國籍\",@\"住址\",@\"出生日期\",@\"初次領(lǐng)證日期

\",@\"準(zhǔn)駕車型\",@\"有效起始日期\",@\"有效期限\"副頁:

@\"副頁證號\",@\"副頁檔案編號\"二、駕駛證SDK集成步驟

步驟一:將授權(quán)文件和Demo中的DriverLicence文件夾拖入工程中

步驟二:在控制器內(nèi)#import \"DriverLicenceManager.h\"步驟三:

如果是相冊導(dǎo)入/系統(tǒng)相機(jī)拍照識別,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法內(nèi)

調(diào)用下圖中所示方法即可識別。(詳見Demo)(打開系統(tǒng)相機(jī)/相冊那部分代碼在此不做介

第53頁

53

紹,不會寫可參考Demo)

實現(xiàn)如下代理方法即可獲得有剪裁的導(dǎo)入/拍照識別的識別結(jié)果。(詳見

Demo)

實現(xiàn)如下代理方法即可獲得無剪裁的導(dǎo)入/拍照識別的識別結(jié)果。(詳見

Demo)

如果是視頻流預(yù)覽識別,在點擊事件內(nèi)調(diào)用如下方法即可彈出相機(jī)界面開

始識別。(正副頁需分開調(diào)用傳不同的參數(shù),詳見Demo)

第54頁

54

實現(xiàn)如下代理方法即可獲得視頻流識別的識別結(jié)果。(詳見Demo)

步驟四:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。

相機(jī)權(quán)限 NSCameraUsageDescription

相冊權(quán)限

NSPhotoLibraryUsageDescription

≥iOS11.0(相冊

寫入權(quán)限需要) NSPhotoLibraryAddUsageDescription

步驟五:添加依賴庫

導(dǎo)入識別:

MobileCoreServices.framework

視頻流預(yù)覽識別:

AVFoundation.framework

CoreMedia.framework

步驟六:在Info.plist添加View controller-based status bar appearance并設(shè)為

NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)

通用激活錯誤碼

錯誤碼 描述 備注

第55頁

55

0 激活成功

20 未授權(quán)該產(chǎn)品

iOS:

授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該

產(chǎn)品的授權(quán)文件

Android:

4)產(chǎn)品類型值改為附錄2指定的即可

2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包

含該產(chǎn)品的授權(quán)文件

21 未讀取到授權(quán)文件

iOS:

模擬器運行會出現(xiàn)該報錯,請使用真機(jī)測試

Android:

授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件

22 公司未授權(quán)

iOS:

1)如果是Demo測試:是否將授權(quán)文件拖入項目中且

AppDelegate.m中宏定義修改為lic文件名

2)項目targets->Build Phases->Copy Bundle Resources,點

擊+號把授權(quán)文件進(jìn)去,再次運行

3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報錯22)

4)不可修改授權(quán)文件名

23 無效授權(quán)

24 授權(quán)信息驗證失敗

iOS:

檢查項目的BundleID和申請授權(quán)時提供給我們的BundleID

是否相同

Andorid:

需要項目的信息是否與授權(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的版本號不一致

7.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)

8.更換授權(quán)綁定的版本號對應(yīng)的SDK

駕駛證獨有激活錯誤碼

錯誤碼 描述 備注

0 成功

1 初始化字典失敗

重復(fù)激活核心。確定激活核心和釋放核心代碼是否成對出

現(xiàn)。

第56頁

56

駕駛證識別錯誤碼

錯誤碼 描述 備注

0 識別成功

1 裝在圖像圖像處理失

2 讀取圖像數(shù)據(jù)失敗 圖像數(shù)據(jù)有問題

3 識別失敗

19 識別失敗

-1 識別圖片過大或過小

-2 標(biāo)題定位失敗

-6 獲取位置信息失敗

-7 結(jié)果校驗失敗

駕駛證檢線錯誤碼

錯誤碼 描述 備注

0 檢線成功

29 檢線小于規(guī)定范圍

30 檢測到線距離超出指

定最大值

31 檢測到線小于指定最

小值

32 檢線中

33 檢邊失敗

第57頁

57

第四部分 行駛證識別

· 行駛證 Android 部分一、行駛證接口簡介

(1) private native int VLKernalInit(String szSysPath,String

filePath,String CommpanyName,int nProductType,int

nAultType,TelephonyManager telephonyManager,Context context);

功能 初始化核心資源

參數(shù)

szSysPath 識別核心所在目錄,傳NULL即可

filePath 授權(quán)文件絕對路徑

CommpanyName 授權(quán)公司名稱

nProductType 產(chǎn)品類型號,具體參考附錄2

nAultType 授權(quán)類型號,具體參考附錄1

telephonyManager

Android自帶手機(jī)管理類,在程序中new出一個即

context 傳this

返回值 0 表示成功,其他值失敗(見附錄)。

(2) private native void VLKernalUnInit();

功能 釋放核心資源

參數(shù) 無

返回值 無

(3) public native int VLDetectLine(byte[] data, int preWidth, int

preHeight, int[] LineX,int[] LineY);

第58頁

58

功能 基于NV21字節(jié)流檢測行駛證正頁自動拍照

參 數(shù)

data NV21字節(jié)流數(shù)據(jù)

preWidth 適配相機(jī)預(yù)覽寬度

preHeight 適配相機(jī)預(yù)覽高度

LineX 檢測到的四點橫坐標(biāo)(數(shù)組大小為4)

LineY 檢測到的四點縱坐標(biāo)(數(shù)組大小為4)

返回值 0成功,其他值檢測狀態(tài)(見附錄3)。

(4) public native int VLDPDetectLine(byte[] data, int preWidth, int

preHeight, int[] LineX,int[] LineY);

功能 基于NV21字節(jié)流檢測行駛證副頁自動拍照

參 數(shù)

data NV21字節(jié)流數(shù)據(jù)

preWidth 適配相機(jī)預(yù)覽寬度

preHeight 適配相機(jī)預(yù)覽高度

LineX 檢測到的四點橫坐標(biāo)(數(shù)組大小為4)

LineY 檢測到的四點縱坐標(biāo)(數(shù)組大小為4)

返回值 0成功,其他值檢測狀態(tài)(見附錄)。

(5) public native int VLRecognizePhoto(byte[] data, int dataLength);

功能 拍照識別行駛證正頁

參 數(shù)

data 拍照圖像jpg數(shù)據(jù)

dataLength 拍照圖像jpg數(shù)據(jù)的長度

返回值 0表示成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)

(6) public native int VLRecognizeDPPhoto (byte[] data, int dataLength);

第59頁

59

功能 拍照識別行駛證副頁

參 數(shù)

data 拍照圖像jpg數(shù)據(jù)

dataLength 拍照圖像jpg數(shù)據(jù)的長度

返回值 0表示成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)

(7) public native int VLRecognizeImageFileW(String imgPath);

功能 導(dǎo)入識別行駛證正頁

參 數(shù) imgPath 需要識別的圖像路徑

返回值 0成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)

(8) public native int VLRecognizeDPImageFile (String imgPath);

功能 導(dǎo)入識別行駛證副頁

參 數(shù) imgPath 需要識別的圖像路徑

返回值 0成功,其他值失?。ㄔ颍簣D像中未發(fā)現(xiàn)駕照、圖像不清晰)

(9) public native String VLGetResult(int index);

功能 獲取行駛證正頁各字段的識別內(nèi)容

參 數(shù) index 字段索引值

返回值 各字段的識別內(nèi)容。

(10) public native String VLGetDPResult (int index);

功能 獲取行駛證副頁各字段的識別內(nèi)容

參 數(shù) index 行駛證字段索引值表

返回值 各字段的識別內(nèi)容。

第60頁

60

(11) public native String VLGetEndTime ();

功能 獲取授權(quán)文件的截止日期

參 數(shù) 無 字段索引值

返回值 各字段的識別內(nèi)容。行駛證字段索引值表

類型 index 備注

正頁

車牌號碼 0

車輛類型 1

所有人 2

住址 3

使用性質(zhì) 4

品牌型號 5

車輛識別代號 6

發(fā)動機(jī)號碼 7

注冊日期 8

發(fā)證日期 9

副頁

車牌號碼 0

條碼編號 1

第61頁

61

檔案編號 2

核載人數(shù) 3

總質(zhì)量 4

整備質(zhì)量 5

核載質(zhì)量 6

外廓尺寸 7

準(zhǔn)牽引質(zhì)量 8

二、行駛證SDK集成步驟

(1)如圖所示:按照集成行駛證庫說明文檔集成 VehicleLibrary 庫

(2)配置識別庫,配置授權(quán)文件。

如圖所示:將授權(quán)文件放到 assets 目錄下

第62頁

62

調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity

Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。

可請參考MainActivity

(3)配置識別庫,配置授權(quán)文件。

如圖所示:找到 VehicleConfig 這個類,把 licenseId 的值改為自己授權(quán)文件的

名字

第63頁

63

進(jìn)入識別之前,加上如下代碼:先初始化授權(quán)文件(完成授權(quán)文件配置)

StreamUtil.initLicenseFile(this, VehicleConfig.licenseId);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_bin);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_dic);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_param);

(4)配置識別庫,配置授權(quán)文件驗證信息

如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名

授權(quán)綁定包名說明:

第64頁

64

比如授權(quán)綁定的包名為 com.etop.sample ,那么這個授權(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\"/>

各個權(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)initSVehicleLicense:(NSString *)nsUserID nsReserve:(NSString

*)nsReserve;

功 能 初始化核心資源

參 數(shù)

nsUserID 授權(quán)碼

nsReserve 保留參數(shù),直接傳nil

返回值 0成功,其他值失?。ㄒ姼戒?)

(2) - (int)freeSVehicleLicense;

功 能 釋放核心資源

參 數(shù) 無

返回值 0成功

(3) - (int)detectSVehicleLicenseSide:(UInt8 *)buffer Width:(int)width

Height:(int)height Corner:(NSMutableArray *)cornerArray;

功 能 檢測證件四邊

第65頁

65

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

cornerArray 返回證件四個頂點(左上、右上、右下、左下)

返回值 0成功,其他值(31、32、33、34)失?。ㄒ姼戒?)

(4) - (int)recognizeSVehicleLicense:(UInt8 *)buffer Width:(int)width

Height:(int)height;

功 能 buffer視頻預(yù)覽識別

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

返回值 0成功,其他值失?。ㄒ姼戒?)

(5) - (int)setRecognizeRegionWithLeft:(int)left Top:(int)top

Right:(int)right Bottom:(int)bottom;

功 能 設(shè)置識別區(qū)域(僅在視頻預(yù)覽識別三行時使用)

參 數(shù)

left 左

top 上

right 右

bottom 下

返回值 0成功,其他值失?。ㄒ姼戒?)

(6) - (int)recognizeSVehicleLicenseThreeLines:(UInt8 *)buffer

Width:(int)width Height:(int)height;

功 能 視頻預(yù)覽識別vin碼、品牌型號、發(fā)動機(jī)號三行

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

返回值 0成功,其他值失?。ㄒ姼戒?)

(7) - (int)recognizeSVehicleLicensePhoto:(UIImage *)image;

功 能 (視頻流預(yù)覽識別)拍照識別

參 數(shù) image 圖像實例

返回值 0成功,其他值失?。ㄒ姼戒?)

(8) - (int)recognizeSVehicleLicenseImage:(UIImage *)image;

功 能 正頁導(dǎo)入/系統(tǒng)相機(jī)拍照識別

參 數(shù) image 圖像實例

第66頁

66

返回值 0成功,其他值失?。ㄒ姼戒?)

(9) - (int)detectSVehicleLicenseDeputyPageSide:(UInt8 *)buffer

Width:(int)width Height:(int)height Corner:(NSMutableArray

*)cornerArray;

功 能 副頁檢測四邊

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

cornerArray 返回證件四個頂點(左上、右上、右下、左下)

返回值 0成功,其他值(31、32、33、34)失?。ㄒ姼戒?)

(10) - (int)recognizeSVehicleLicenseDeputyPageImage:(UIImage *)image;

功 能 副頁導(dǎo)入/系統(tǒng)相機(jī)拍照/視頻流拍照識別

參 數(shù) image 圖像實例

返回值 0成功,其他值失?。ㄒ姼戒?)

參數(shù)列表

參數(shù)類型 參數(shù)名 類型 釋義

OCR字段

nsPlateNo NSString

車牌號碼(正副頁共

用此參數(shù))

正頁

nsVehicleType NSString 車輛類型

nsOwner NSString 所有人

nsAddress NSString 住址

nsUseCharacter NSString 使用性質(zhì)

nsModel NSString 品牌型號

nsVIN NSString 車輛識別代號

nsEngineNo NSString 發(fā)動機(jī)號碼

nsRegisterDate NSString 注冊日期

第67頁

67

nsIssueDate NSString 發(fā)證日期

副頁

nsBarCodeNo NSString 條碼編號

nsFileNo NSString 檔案編號

nsPeopleNum NSString 核載人數(shù)

nsTotalWeight NSString 總質(zhì)量

nsCurbWeight NSString 整備質(zhì)量

nsLoadWeight NSString 核載質(zhì)量

nsGabarite NSString 外廓尺寸

nsTractionWeight NSString 準(zhǔn)牽引質(zhì)量

圖像相關(guān) 暫無 UIImage 暫無返回

其他

nsEndTime NSString 授權(quán)到期時間

pathForVL NSString

授權(quán)文件/模型文件

讀取地址(插件化使

用)

sdkVersion NSString 核心庫版本號

needVlDebugLog BOOL 需要打印調(diào)試信息

1.2 封裝接口簡介(VLManager.h)

(1) + (instancetype)sharedManager;

功 能 單例全局訪問點

參 數(shù) 無

返回值 單例對象

注意:請使用此方法創(chuàng)建VLManager單例,不要使用new、alloc init或其他。

(2) - (void)recognizeVLWithImage:(UIImage *)vlImage

isFront:(BOOL)isFront andAuthCode:(NSString *)authCode;

功 能 導(dǎo)入/拍照識別封裝接口

第68頁

68

參 數(shù)

vlImage 行駛證圖片

isFront 識別正頁/副頁(YES-正頁 NO-副頁)

authCode 授權(quán)文件名

返回值 無

(3) - (void)recognizeVLByVideoStreamWithController:(UIViewController

*)parentController isUsePush:(BOOL)usePush andAuthCode:(NSString

*)authCode;

功 能 視頻流識別封裝接口

參 數(shù)

parentController 傳入self

usePush 是否是push出控制器 [YES-push NO-modal(模

態(tài)彈出)]

authCode 授權(quán)文件名

返回值 無

1.3 識別結(jié)果回調(diào)接口簡介(VLManager.h中

VLManagerDelegate)

(1) - (void)recogVLImageFinishWithResult:(NSDictionary *)resultDic

isFront:(BOOL)isFront vlImage:(UIImage *)vlImage

andErrorCode:(NSString *)errorCode;

功 能 導(dǎo)入/系統(tǒng)相機(jī)拍照識別回調(diào)

參 數(shù)

resultDic 識別結(jié)果

isFront 識別的是正頁/副頁(和傳入的參數(shù)相同)

vlImage 傳入識別的圖片

errorCode 錯誤碼(0為識別成功,19為識別失敗)

返回值 無

(2) - (void)cameraController:(UIViewController *)cameraController

recognizeVLByVideoStreamFinishWithResult:(NSDictionary *)resultDic

isFront:(BOOL)isFront resultImage:(UIImage *)resultImage

andErrorCode:(int)errorCode;

功 能 視頻流識別回調(diào)接口

參 數(shù)

cameraController 相機(jī)控制器

resultDic 識別結(jié)果

isFront 正頁還是副頁

resultImage 行駛證圖片

第69頁

69

errorCode 錯誤碼(0為識別成功)

返回值 無

注:resultDic字段值如下:

正頁:@\"號牌號碼\", @\"車輛類型\",@\"所有人\", @\"住址\",@\"使用性質(zhì)\", @\"品牌型號\", @\"車輛識別代號\", @\"發(fā)動機(jī)號碼\", @\"注冊日期\", @\"發(fā)證日期\"。

副頁:@\"號牌號碼\", @\"檔案編號\", @\"核載人數(shù)\", @\"總質(zhì)量\", @\"整備質(zhì)量\", @\"核載質(zhì)量

\", @\"外廓尺寸\", @\"準(zhǔn)牽引質(zhì)量\", @\"條碼編號\"。二、行駛證SDK集成步驟

步驟一:將授權(quán)文件和MVRegisterCertificate文件夾拖入工程中,拖入授權(quán)

文件時請選擇Copy items if needed、Create groups和Add to targets(同測試步驟拖

入時的選項)。

步驟二:在需要進(jìn)行識別的控制器內(nèi)輸入#import \"VLManager.h\"步驟三:

如果是導(dǎo)入/拍照識別,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法內(nèi)

第70頁

70

調(diào)用下圖中所示方法即可識別。(詳見Demo)(打開系統(tǒng)相機(jī)/相冊那部分代碼在此不做介

紹,不會寫可參考Demo)

實現(xiàn)如下代理方法即可獲得導(dǎo)入/拍照識別的識別結(jié)果。(詳見Demo)

如果是視頻流預(yù)覽識別,在點擊事件內(nèi)調(diào)用如下方法即可彈出相機(jī)界面開

始識別。(詳見Demo)

實現(xiàn)如下代理方法即可獲得視頻流識別的識別結(jié)果。(詳見Demo)

步驟四:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。(相機(jī)

權(quán)限必須配置,相冊權(quán)限根據(jù)需求配置)

相機(jī)權(quán)限 NSCameraUsageDescription

相冊權(quán)限

NSPhotoLibraryUsageDescription

≥iOS11.0(相冊

寫入權(quán)限) NSPhotoLibraryAddUsageDescription

步驟五:添加依賴庫

導(dǎo)入識別:

MobileCoreServices.framework

視頻流預(yù)覽識別:

第71頁

71

AVFoundation.framework

CoreMedia.framework

步驟六:在Info.plist添加View controller-based status bar appearance并設(shè)為

NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)

通用激活錯誤碼

錯誤碼 描述 備注

0 激活成功

20 未授權(quán)該產(chǎn)品

iOS:

授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該

產(chǎn)品的授權(quán)文件

Android:

5)產(chǎn)品類型值改為附錄2指定的即可

2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包

含該產(chǎn)品的授權(quán)文件

21 未讀取到授權(quán)文件

iOS:

模擬器運行會出現(xiàn)該報錯,請使用真機(jī)測試

Android:

授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件

22 公司未授權(quán)

iOS:

1)如果是Demo測試:是否將授權(quán)文件拖入項目中且

AppDelegate.m中宏定義修改為lic文件名

2)項目targets->Build Phases->Copy Bundle Resources,點

擊+號把授權(quán)文件進(jìn)去,再次運行

3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報錯22)

4)不可修改授權(quán)文件名

23 無效授權(quán)

24 授權(quán)信息驗證失敗

iOS:

檢查項目的BundleID和申請授權(quán)時提供給我們的BundleID

是否相同

Andorid:

需要項目的信息是否與授權(quán)綁定的信息一致,比如包名、

app名

25 授權(quán)到期

1.授權(quán)文件到期,請聯(lián)系我司業(yè)務(wù)人員。

2.若是不久剛出過授權(quán),請確認(rèn)是否替換最新的授權(quán)

第72頁

72

30 SDK版本不符

授權(quán)綁定的SDK版本號和當(dāng)前使用的SDK的版本號不一致

9.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)

10.更換授權(quán)綁定的版本號對應(yīng)的SDK

行駛證獨有激活錯誤碼

錯誤碼 描述 備注

0 成功

2 初始化字典失敗

重復(fù)激活核心。確定激活核心和釋放核心代碼是否成對出

現(xiàn)。

3 核心.bin .dic .param文

件打開失敗

4

.bin .param文件加載失

5 標(biāo)簽為空labels

7 關(guān)鍵文件獲取失敗 (核心文件等)

10

(iOS)

復(fù)制

VLNCResource.bundle

中的文件失敗

設(shè)置SVehicleLicense的needVLDebugLog屬性為YES,查看控

制臺打印的error信息

26

(iOS)

nsUserID為空 請傳入當(dāng)前授權(quán)文件名

49

(iOS)

找不到

VLNCResource.bundle

中的文件

確定項目targets->Build Phases->Copy Bundle Resources處

是否有VLNCResource.bundle

行駛證識別錯誤碼

錯誤碼 描述 備注

0 識別成功

1 讀取圖像數(shù)據(jù)失敗

16 圖像解析失敗 圖像數(shù)據(jù)有問題

19 識別失敗

-2 定位標(biāo)題失敗

-3 獲取標(biāo)題位置失敗

-4 識別失敗

-5 字段校驗失敗

-6 字段校驗失敗

-7 寬度控制

第73頁

73

-8 寬度控制

行駛證檢線錯誤碼

錯誤碼 描述 備注

0 檢線成功

29 檢線小于規(guī)定范圍

30 檢測到線距離超出指

定最大值

31 檢測到線小于指定最

小值

32 檢線中

33 檢邊失敗

第74頁

74

第五部分 Vin 碼識別

· Vin 碼 Android 部分一、Vin碼接口簡介

(1) public native void VinKernalInit(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

出一個即可

context 傳this

返回值 0 表示成功,其他值失敗(見常見問題1)。

(2) public native void VinKernalUnInit();

功 能 釋放核心資源

參 數(shù) 無

返回值 無

(3) public native String VinGetEndTime();

第75頁

75

功 能 獲取授權(quán)截止日期

參 數(shù) 無

返回值 返回一個例(2019-01-01)格式的時間

(4) public native int VinRecognizeNV21Android(byte[] ImageStreamNV21, int Width,

int Height, char[] Buffer, int BufferLen,int []pLine,int type);

功 能 基于NV21字節(jié)流識別

參 數(shù)

pImageBuffer NV21字節(jié)流

nWidth 適配相機(jī)預(yù)覽寬度

nHeight 適配相機(jī)預(yù)覽高度

szBuffer 識別結(jié)果緩沖區(qū)

BufferLen 識別結(jié)果緩沖區(qū)長度

pLine 返回一個400*80的圖片數(shù)據(jù)

type 識別方向,0代表橫向,1代表豎向

返回值

0成功,其他值失敗(圖像中未發(fā)現(xiàn)VIN碼。確認(rèn)VinSetROI此方法設(shè)

置識別區(qū)域正確性,保證識別框和識別區(qū)域一致)。

(5) public native void VinSetROI(int[] borders, int imgWidth, int imgHeight);

功 能 設(shè)置相機(jī)界面中vin碼的矩形識別區(qū)域

參 數(shù)

borders

依次放入[left,top,right,bottom]Left:傳入

圖像左邊界,top傳入圖像上邊界,right傳入圖

像右邊界,bottom傳入圖像下邊界,這四個邊界

可以通過界面上的畫的矩形四邊界確定

imgWidth 適配相機(jī)預(yù)覽寬度

imgHeight 適配相機(jī)預(yù)覽高度

(6)public native String VinGetResult ();

功 能 獲取識別結(jié)果,此接口在調(diào)用識別接口成功之后調(diào)用

第76頁

76

參 數(shù) 無

返回值 識別結(jié)果

(7) public native int VinRecognizeImageFile(String filepath);

功 能 圖像導(dǎo)入識別

參 數(shù) filepath 圖像的路徑

返回值 0 表示成功,其他值失?。ㄔ驁D像中未發(fā)現(xiàn)VIN碼,圖像不清晰)

(8)public native int VinRecogImgData(int[] wrapLine);

功 能

保存識別后的純VIN碼的灰度圖,在VinRecognizeImageFile接口識

別成功后調(diào)用

參 數(shù) wrapLine 返回一個400*80的圖片數(shù)據(jù)

返回值 0代表成功,其他值失敗

(9) public native int VinRecogFile(String imagePath,int left,int top,int

right,int bottom);

功 能 圖像導(dǎo)入?yún)^(qū)域識別,識別范圍是傳入的四點區(qū)域

參 數(shù)

imagePath 圖像路徑

Left 識別區(qū)域的左邊界

top 識別區(qū)域的上邊界

right 識別區(qū)域的右邊界

bottom 識別區(qū)域的下邊界

返回值 0 表示成功,其他值失?。ㄔ驁D像中未發(fā)現(xiàn)VIN碼,圖像不清晰)

二、Vin 碼 SDK 集成步驟

(1)如圖所示:按照集成VIN碼庫說明文檔集成 VinLibrary 庫

第77頁

77

(2)配置識別庫,配置授權(quán)文件。

如圖所示:將授權(quán)文件放到 assets 目錄下

調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity

Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。

可請參考MainActivity。

(3)配置識別庫,配置授權(quán)文件。

如圖所示:找到 ConstantConfig 這個類,把 licenseId 的值改為自己授權(quán)文件

的名字

第78頁

78

進(jìn)入識別之前,加上如下代碼:先初始化授權(quán)文件(完成授權(quán)文件配置)

StreamUtil.initLicenseFile(this, ConstantConfig.licenseId);

StreamUtil.initLicenseFile(this, ConstantConfig.nc_vin_bin);

StreamUtil.initLicenseFile(this, ConstantConfig.nc_vin_dic);

StreamUtil.initLicenseFile(this, ConstantConfig.nc_vin_param)

4)配置識別庫,配置授權(quán)文件驗證信息

如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名

第79頁

79

授權(quán)綁定包名說明:

比如授權(quán)綁定的包名為 com.etop.sample ,那么這個授權(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\"/>

各個權(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)限

· Vin 碼 iOS 部分一、Vin碼接口簡介

1.1 SDK接口簡介

(1) - (int)initVinTyper:(NSString *)nsUserID nsReserve:(NSString *)

nsReserve;

功 能 初始化核心資源

參 數(shù)

nsUserID 授權(quán)碼/授權(quán)文件名

nsReserve 保留參數(shù),直接傳nil

第80頁

80

返回值 0表示成功,其他值失?。ㄒ姼戒?)

注:1.授權(quán)文件名不可更改!SDK會在內(nèi)部校驗授權(quán)文件名。

2.此方法讀取授權(quán)文件時,先從沙盒的Documents中讀取,如果找到授權(quán)文件則繼續(xù)激活識

別核心,否則再在項目目錄中尋找([NSBundle mainBundle]),如果找到授權(quán)文件則繼續(xù)激活

識別核心,否則返回22。如圖2.1所示。

圖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)文件路徑示例

建議此方式下,在項目目錄中也放一個授權(quán)文件,沒網(wǎng)的情況下也能使用。由于是優(yōu)先讀取

第81頁

81

網(wǎng)絡(luò)下載的授權(quán)文件,所以項目目錄中的授權(quán)文件存在不會影響讀取從網(wǎng)絡(luò)下載的最新的授

權(quán)。

(2) - (int)freeVinTyper;

功 能 釋放核心資源

參 數(shù) 無

返回值 0表示成功,其他值失敗

(3) - (void)setVinRegionWithLeft:(int)nLeft Top:(int)nTop

Right:(int)nRight Bottom:(int)nBottom;

功 能 設(shè)置VIN碼的檢測區(qū)域

參 數(shù)

nLeft 左邊界

nTop 上邊界

nRight 右邊界

nBottom 下邊界

返回值 無

(4) - (void)setVinRecognizeType:(int)type;

功 能 設(shè)置識別類型

參 數(shù) type 類型值:0-橫屏(默認(rèn)) 1-豎屏

返回值 無

(5) - (int)recognizeVinTyper:(UInt8 *)buffer Width:(int)width

Height:(int)height;

功 能 視頻預(yù)覽識別

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

返回值 0成功,-2失敗(實時識別,失敗值不作為邏輯處理判斷依據(jù))

(6) - (int)recognizeVinTyperImage:(UIImage *)image;

功 能 導(dǎo)入識別

參 數(shù) image 圖像對象

返回值 0成功,-2失敗

(7) - (void)setVinVerifyType:(int)type;

功 能 配置vin碼校驗規(guī)則

第82頁

82

參 數(shù) type

0-(默認(rèn))vin正常校驗

1-放棄部分校驗規(guī)則以識別摩托車的Vin碼

返回值 無

(8) - (bool)findVin;

功 能 識別結(jié)果是否可信

參 數(shù) 無

返回值 0-可信 1-可疑

參數(shù)列表

參數(shù)類型 參數(shù)名 類型 釋義

OCR字段 nsResult NSString Vin碼

圖像相關(guān) resultImg UIImage Vin二值化切圖

其他

nsEndTime NSString 授權(quán)到期時間

pathForVin NSString

授權(quán)文件/模型文件

讀取地址(插件化使

用)

sdkVersion NSString 核心庫版本號

needVinDebugLog BOOL 需要打印調(diào)試信息

1.2 封裝接口簡介

(1) - (void)recognizeVinCodeWithPhoto:(UIImage *)vinImage

andAuthCode:(NSString *)authCode;

功 能 拍照/導(dǎo)入識別封裝接口

參 數(shù)

vinImage 需要識別的圖像

authCode 授權(quán)文件名

返回值 無

(2) -

(void)recognizeVinCodeByVideoStreamWithController:(UIViewController

*)parentController usePush:(BOOL)usePush andAuthCode:(NSString

*)authCode;

功 能 視頻流預(yù)覽識別封裝接口

參 數(shù) parentController 當(dāng)前控制器(self)

第83頁

83

usePush 是否使用push彈出裁剪控制器[YES-push

NO-modal(模態(tài)彈出)]

authCode 授權(quán)文件名

返回值 無

1.3 回調(diào)函數(shù)簡介

(1) - (void)photoRecognizeFinishWithResult:(NSString *)vinCode

srcImage:(UIImage *)srcImage vinImage:(UIImage *)vinImage

andErrorCode:(int)errorCode;

功 能 拍照/導(dǎo)入識別回調(diào)

參 數(shù)

vinCode 識別結(jié)果

srcImage 傳入識別的VIN碼圖像

vinImage VIN碼區(qū)域圖

errorCode 識別結(jié)果(0-識別成功,19-識別失敗)

返回值 無

(2) - (void)cameraController:(UIViewController *)cameraController

videoStreamRecognizeVinFinishWithResult:(NSString *)vinCode

srcImage:(UIImage *)srcImage areaCutImage:(UIImage *)areaCutImage

andVinImage(UIImage *)vinImage;

功 能 視頻流預(yù)覽識別回調(diào)

參 數(shù)

cameraController 自定義相機(jī)控制器

vinCode 識別結(jié)果

srcImage 完整原圖

areaCutImage 區(qū)域裁切圖

vinImage VIN碼圖片

返回值 無

注:參數(shù)nsResult返回識別結(jié)果、resultImg返回截取的VIN碼圖像(400*80)、

nsEndTime返回授權(quán)截止日期、sdkVersion返回SDK版本號

二、Vin 碼 SDK 集成步驟

步驟一:將授權(quán)文件和Vin文件夾拖入工程中。拖入授權(quán)文件時請選擇Copy

items if needed、Create groups和Add to targets。

第84頁

84

若想將授權(quán)文件放在服務(wù)器上,只將Vin文件夾拖入工程中即可。并且注意要

在調(diào)用識別語句之前將授權(quán)文件下載下來放在沙盒中的Documents文件夾下并

以原文件名命名(注意:授權(quán)文件名不可更改)。

步驟二:在需要進(jìn)行識別的控制器內(nèi)輸入#import \"VinManager.h\"步驟三:如果需要『圖像編輯』功能(不需要圖像編輯可跳過這步),請

#import \"REEditController.h\",初始化編輯界面,設(shè)置代理。

實現(xiàn)代理方法即可拿到裁切后的圖。

第85頁

85

步驟四:

如果是相冊導(dǎo)入/系統(tǒng)相機(jī)拍照識別,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法內(nèi)

調(diào)用下圖中所示方法即可識別。(打開系統(tǒng)相機(jī)/相冊的代碼在此不做介紹,不會

寫可參考Demo)

如果您使用了圖像編輯功能,請在『編輯功能的回調(diào)』中調(diào)用如下圖所示

的方法進(jìn)行識別。

實現(xiàn)如下代理方法即可獲得導(dǎo)入/拍照識別的識別結(jié)果。(詳見Demo)

如果是視頻流預(yù)覽識別,在點擊事件內(nèi)調(diào)用如下方法即可彈出相機(jī)界面開始

第86頁

86

識別(詳見Demo)。

實現(xiàn)如下代理方法即可獲得視頻流預(yù)覽識別的識別結(jié)果。(詳見Demo)

注意:無論是否適配橫豎屏,視頻流預(yù)覽界面都建議鎖定屏幕方向后測試。除非

您項目中有方向控制相關(guān)代碼,則可在自定義相機(jī)界面進(jìn)行關(guān)閉旋轉(zhuǎn)鎖定后的其

他系統(tǒng)方向的測試。自定義相機(jī)界面已封裝好方向控制代碼。如下所示:

步驟五:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。(相機(jī)

權(quán)限必須配置,相冊權(quán)限根據(jù)需求配置)

相機(jī)權(quán)限 NSCameraUsageDescription

相冊權(quán)限

NSPhotoLibraryUsageDescription

≥iOS11.0(相冊

寫入權(quán)限) NSPhotoLibraryAddUsageDescription

步驟六:在Info.plist添加View controller-based status bar appearance并設(shè)為

NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)

步驟七:添加依賴庫

導(dǎo)入識別:

MobileCoreServices.framework

視頻流預(yù)覽識別:

AVFoundation.framework

第87頁

87

CoreMedia.framework

AudioToolBox.framework

通用激活錯誤碼

錯誤碼 描述 備注

0 激活成功

20 未授權(quán)該產(chǎn)品

iOS:

授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該

產(chǎn)品的授權(quán)文件

Android:

6)產(chǎn)品類型值改為附錄2指定的即可

2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包

含該產(chǎn)品的授權(quán)文件

21 未讀取到授權(quán)文件

iOS:

模擬器運行會出現(xiàn)該報錯,請使用真機(jī)測試

Android:

授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件

22 公司未授權(quán)

iOS:

1)如果是Demo測試:是否將授權(quán)文件拖入項目中且

AppDelegate.m中宏定義修改為lic文件名

2)項目targets->Build Phases->Copy Bundle Resources,點

擊+號把授權(quán)文件進(jìn)去,再次運行

3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報錯22)

4)不可修改授權(quán)文件名

23 無效授權(quán)

24 授權(quán)信息驗證失敗

iOS:

檢查項目的BundleID和申請授權(quán)時提供給我們的BundleID

是否相同

Andorid:

需要項目的信息是否與授權(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的版本號不一致

11.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)

12.更換授權(quán)綁定的版本號對應(yīng)的SDK

第88頁

88

Vin 碼獨有激活錯誤碼

錯誤碼 描述 備注

0 激活成功

1/4 初始化失敗

1:沒反回參數(shù)的并且不是0(default)

4:加載nc_vin.bin出錯

3

1.文件流打開失敗

2.加載model失敗

核心文件、深度學(xué)習(xí)模型文件等

5 label為空

6 裝載識別引擎失敗

重復(fù)激活核心。確定激活核心和釋放核心代碼是否成對出

現(xiàn)。

7/8

syspath為空/加載核心

文件失敗等

10

(iOS)

復(fù)制

VinNCResource.bundle

中的文件失敗

設(shè)置VinTyper的needVLDebugLog屬性為YES,查看控制臺

打印的error信息

26/1022

(iOS)

nsUserID為空 請傳入當(dāng)前授權(quán)文件名

49

(iOS)

找不到

VinNCResource.bundle

中的文件

確定項目targets->Build Phases->Copy Bundle Resources處

是否有VinNCResource.bundle

Vin 碼識別錯誤碼

錯誤碼 描述 備注

0 識別成功

1 裝載圖像失敗

3 切分失敗

4 識別失敗

16 裝載圖像失敗

19 識別失敗

-1 校驗不通過 識別結(jié)果不符合17位等

-2 識別失敗

第89頁

89

第六部分 車牌識別

· 車牌 Android 部分一、車牌接口簡介

(1) public native int ETInitPlateKernal (String kernalDirectory,String

kernalPath,String licenseId, int nProductType,int nAultType,

TelephonyManager telephonyManager,Context context);

功能 初始化核心資源

參數(shù)

kernalDirectory 識別核心所在目錄,傳NULL即可

kernalPath 授權(quán)文件絕對路徑

licenseId 授權(quán)碼,由sdk供應(yīng)商提供

nProductType 產(chǎn)品類型號,具體參考附錄2

nAultType 授權(quán)類型號,具體參考附錄1

telephonyManager

Android自帶手機(jī)管理類,在程序中new

出一個即可

context 傳this

返回值 0 表示成功,其他值失敗(見常見問題1)。

(2) public native void ETUnInitPlateKernal();

功能 釋放核心資源

參數(shù) 無

返回值 無

(3) public native void EtSetPlateROI(int[] borders, int preWidth, int

preHeight);

第90頁

90

功能 設(shè)置拍攝界面中vin碼的位置矩形

參數(shù)

borders

依次放入[left,top,right,bottom]Left:傳

入圖像左邊界,top傳入圖像上邊界,right傳

入圖像右邊界,bottom傳入圖像下邊界,這四

個邊界可以通過界面上的畫的矩形四邊界確定

preWidth 適配相機(jī)預(yù)覽寬度

preHeight 適配相機(jī)預(yù)覽高度

(4) public native String GetRecogResult(int nIndex);

功能 獲取識別結(jié)果

參 數(shù)

nIndex 字段索引(0:車牌;1:車牌顏色)

返回值 字段識別結(jié)果。

(5) public native int RecognizePlateNV21 (byte[] ImageStreamNV21,int

nType int preWidth, int preHeight, char[] Buffer, int BufferLen,int[]

pLine);

功能 基于NV21字節(jié)流識別

參 數(shù)

pImageBuffer NV21字節(jié)流,相機(jī)預(yù)覽模式數(shù)據(jù)

nType 屏幕豎屏還是橫屏,豎屏傳1,橫屏傳0

preWidth 適配相機(jī)預(yù)覽寬度

preHeight 適配相機(jī)預(yù)覽高度

szBuffer 識別結(jié)果緩沖區(qū)

BufferLen 識別結(jié)果緩沖區(qū)長度

pLine 返回一個400*80的圖片數(shù)據(jù)

返回值

0成功,其他值失敗,失敗原因,圖像中未發(fā)現(xiàn)車牌或核心激

活失敗

(6) public native int SavePlateImg (String imgPath,int nImageType);

功能 保存指定圖像到指定路徑下

第91頁

91

參 數(shù)

imgPath 圖像保存路徑

nImageType

要保持的圖像類型(0:車牌小圖;1為ROI

圖像)

返回值 0表示保存成功,其他值為失敗。

(7) public native string GetEndTime();

功能 獲取授權(quán)截止日期

返回值 返回一個如(2018-1-1)格式的日期,在激活成功后調(diào)用

(8) public native int RecognizePlateNV21Deep(byte[] ImageStreamNV21,int

nType int preWidth, int preHeight, char[] Buffer, int BufferLen,int[]

pLine);

功能 基于NV21字節(jié)流識別(深度學(xué)習(xí))

參 數(shù)

pImageBuffer NV21字節(jié)流,相機(jī)預(yù)覽模式數(shù)據(jù)

nType 屏幕豎屏還是橫屏,豎屏傳1,橫屏傳0

preWidth 適配相機(jī)預(yù)覽寬度

preHeight 適配相機(jī)預(yù)覽高度

szBuffer 識別結(jié)果緩沖區(qū)

BufferLen 識別結(jié)果緩沖區(qū)長度

pLine 返回一個400*80的圖片數(shù)據(jù)

返回值

0成功,其他值失敗,失敗原因,圖像中未發(fā)現(xiàn)車牌或核心激

活失敗

(9) public native int RecognizeImageFile(String imgPath);

參 數(shù) imgPath 圖像路徑

返回值 0表示識別成功,其他值為失敗。

第92頁

92

二、車牌 SDK 集成步驟

(1)如圖所示:按照集成車牌識別庫說明文檔集成 PlateLibrary 庫

(2)配置識別庫,配置授權(quán)文件。

如圖所示:將授權(quán)文件放到 assets 目錄下

調(diào)用識別庫的示例代碼 和 接收識別結(jié)果的示例代碼 可以參考 MainActivity

Sample 示例工程的 MainActivity 調(diào)用識別庫的代碼寫的比較詳細(xì)。

可請參考MainActivity。

(3)配置識別庫,配置授權(quán)文件。

如圖所示:找到 PlateInfoConfig 這個類,把 licenseId 的值改為自己授權(quán)文件

的名字

第93頁

93

(4)配置識別庫,配置授權(quán)文件驗證信息

如圖所示:將 applicationId 改為自己授權(quán)文件綁定的包名

授權(quán)綁定包名說明:

比如授權(quán)綁定的包名為 com.etop.sample ,那么這個授權(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\"/>

第94頁

94

<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>

<uses-permission android:name=\"android.permission.VIBRATE\"/>

各個權(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接口簡介(SPlate.h)

(1) - (int)initSPlate:(NSString *)nsUserID nsReserve:(NSString *)

nsReserve;

功 能 初始化核心資源

參 數(shù)

nsUserID 授權(quán)公司名稱

nsReserve 保留參數(shù),直接傳nil

返回值 0表示成功,其他值失?。ㄒ姼戒?)。

注:1.授權(quán)文件名不可更改!SDK會在內(nèi)部校驗授權(quán)文件名。

2.此方法讀取授權(quán)文件時,先從沙盒的Documents中讀取,如果找到授權(quán)文件則繼續(xù)激活識

別核心,否則再在項目目錄中尋找([NSBundle mainBundle]),如果找到授權(quán)文件則繼續(xù)激活

識別核心,否則返回22。核心代碼如圖2.1所示。

第95頁

95

圖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)文件路徑示例

建議此方式下,在項目目錄中也放一個授權(quán)文件,沒網(wǎng)的情況下也能使用。由于優(yōu)先讀取網(wǎng)

絡(luò)下載的授權(quán)文件,項目目錄中的授權(quán)文件存在不會影響讀取從網(wǎng)絡(luò)下載的最新的授權(quán)。

(2) - (int)freeSPlate;

功 能 釋放核心資源

參 數(shù) 無

返回值 0表示成功

(3) - (void)setRegionWithLeft:(int)left Top:(int)top Right:(int)right

Bottom:(int)bottom;

功 能 設(shè)置車牌的檢測區(qū)域

參 數(shù)

left 左邊界

top 上邊界

right 右邊界

bottom 下邊界

返回值 0表示成功,其他值失敗(見附錄1)。

第96頁

96

(4) - (int)recognizeSPlate:(UInt8 *)buffer Width:(int)width

Height:(int)height Type:(int)type;

功 能 視頻流預(yù)覽識別(傳入Buffer識別)

參 數(shù)

buffer 圖像數(shù)據(jù)地址

width 圖像寬度

height 圖像高度

type 0-橫屏 1-豎屏

返回值 0表示成功,其他值失?。ㄒ姼戒?)。

(5) - (int)recognizeSPlateImage:(UImage *)image Type:(int)type;

功 能 視頻流預(yù)覽識別(Buffer轉(zhuǎn)成圖片傳入識別)

參 數(shù)

image 圖像實例

type 0-橫屏 1-豎屏

返回值 0表示成功,其他值失敗(見附錄1)。

參數(shù)列表

參數(shù)類型 參數(shù)名 類型 釋義

OCR字段

nsPlateNo NSString 車牌號

nsPlateColor NSString 車牌顏色

圖像相關(guān) nsPlateImg UIImage 車牌裁切圖

其他

nsEndTime NSString 授權(quán)到期時間

pathForPlate NSString

授權(quán)文件讀取地址

(插件化使用)

sdkVersion NSString 核心庫版本號

needPlateLog BOOL 需要打印調(diào)試信息

1.2 回調(diào)函數(shù)簡介(PlateCameraController.h中

PlateCameraDelegate)

(1) - (void)cameraController:(UIViewController *)cameraController

recognizePlateSuccessWithResult(NSString *)plateStr

plateColor:(NSString *)plateColor plateImage:(UIImage *)plateImage

第97頁

97

squareImage:(UIImage *)squareImage andFullImage:(UIImage *)fullImage;

功 能 視頻流預(yù)覽識別成功回調(diào)

參 數(shù)

cameraController 自定義相機(jī)控制器

plateStr 車牌識別結(jié)果

plateColor 車牌顏色

plateImage 車牌圖片

squareImage 相機(jī)界面方框區(qū)域的裁切圖

fullImage 完整圖像

返回值 無

(2) - (void)backButtonClickWithPlateCameraController:(UIViewController

*)cameraController;

功 能 相機(jī)界面點擊返回按鈕的回調(diào)

參 數(shù) cameraController 車牌自定義相機(jī)控制器

返回值 無

二、車牌 SDK 集成步驟

步驟一:將授權(quán)文件和Plate文件夾拖入工程中。拖入授權(quán)文件時請選擇Copy

items if needed、Create groups和Add to targets(同測試步驟拖入時的選項)。

第98頁

98

步驟二:在需要進(jìn)行識別的控制器內(nèi)輸入#import

\"PlateCameraController.h\"步驟三:在點擊事件里輸入如下代碼彈出控制器即可開始識別。(詳見Demo)

實現(xiàn)如下代理方法即可獲得視頻流預(yù)覽識別的識別結(jié)果。(詳見Demo)

注:無論是否適配橫豎屏,視頻流預(yù)覽界面都建議鎖定屏幕方向后測試。除非您

項目中有方向控制相關(guān)代碼,則可在自定義相機(jī)界面進(jìn)行關(guān)閉旋轉(zhuǎn)鎖定后的其他

系統(tǒng)方向的測試。自定義相機(jī)界面已實現(xiàn)方向控制代碼。如下所示:

步驟四:需要在Info.plist配置相應(yīng)的相機(jī)和相冊權(quán)限,否則會崩潰。(相機(jī)

權(quán)限必須配置,相冊權(quán)限根據(jù)需求配置)

相機(jī)權(quán)限 NSCameraUsageDescription

相冊權(quán)限

NSPhotoLibraryUsageDescription

≥iOS11.0(相冊

寫入權(quán)限) NSPhotoLibraryAddUsageDescription

步驟五:在Info.plist添加View controller-based status bar appearance,設(shè)為

NO。以允許我們在相機(jī)控制器改變狀態(tài)欄的顏色。(若已添加請忽略)

步驟六:添加依賴庫

第99頁

99

視頻流預(yù)覽識別:

AVFoundation.framework

CoreMedia.framework

AudioToolBox.framework

通用激活錯誤碼

錯誤碼 描述 備注

0 激活成功

20 未授權(quán)該產(chǎn)品

iOS:

授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包含該

產(chǎn)品的授權(quán)文件

Android:

7)產(chǎn)品類型值改為附錄2指定的即可

2)授權(quán)中不包含當(dāng)前測試的產(chǎn)品,需要聯(lián)系商務(wù)申請包

含該產(chǎn)品的授權(quán)文件

21 未讀取到授權(quán)文件

iOS:

模擬器運行會出現(xiàn)該報錯,請使用真機(jī)測試

Android:

授權(quán)文件不存在或者讀取不到,詳見配置授權(quán)文件

22 公司未授權(quán)

iOS:

1)如果是Demo測試:是否將授權(quán)文件拖入項目中且

AppDelegate.m中宏定義修改為lic文件名

2)項目targets->Build Phases->Copy Bundle Resources,點

擊+號把授權(quán)文件進(jìn)去,再次運行

3)清除緩存(替換新授權(quán)后可能會出現(xiàn)報錯22)

4)不可修改授權(quán)文件名

23 無效授權(quán)

24 授權(quán)信息驗證失敗

iOS:

檢查項目的BundleID和申請授權(quán)時提供給我們的BundleID

是否相同

Andorid:

需要項目的信息是否與授權(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的版本號不一致

13.申請綁定了當(dāng)前使用的SDK的版本號的授權(quán)

第100頁

100

14.更換授權(quán)綁定的版本號對應(yīng)的SDK

車牌獨有激活錯誤碼

錯誤碼 描述 備注

26 nsUserID參數(shù)為空

車牌識別錯誤碼

錯誤碼 描述 備注

0 識別成功

1 未授權(quán)該產(chǎn)品 加載圖片數(shù)據(jù)失敗(圖像不存在、數(shù)據(jù)類型不支持等原因)

2 圖像解析失敗 圖像數(shù)據(jù)有問題

3 識別失敗 圖像中沒有找到車牌

4 識別比對 連續(xù)識別成功則視為識別成功

-5 識別核心未初始化 核心未激活成功

百萬用戶使用云展網(wǎng)進(jìn)行電子書免費制作,只要您有文檔,即可一鍵上傳,自動生成鏈接和二維碼(獨立電子書),支持分享到微信和網(wǎng)站!
收藏
轉(zhuǎn)發(fā)
下載
免費制作
其他案例
更多案例
免費制作
x
{{item.desc}}
下載
{{item.title}}
{{toast}}