移动端OCR开发文档

发布时间:2023-3-03 | 杂志分类:其他
免费制作
更多内容

移动端OCR开发文档

51*)authCode isFrontPage:(BOOL)isFrontPage;功 能 视频流预览识别封装接口参 数parentController 当前控制器(self)usePush 是否使用push弹出裁剪控制器[YES-pushNO-modal(模态弹出)]authCode 授权文件名isFrontPage 是否是正页(YES-正页 NO-副页)返回值 无1.3 回调函数简介(DriverLicenceManagerDelegate)(1) - (void)editController:(UIViewController *)editControllerphotoRecognizeDLFinishWithResult:(NSDictionary *)resultDicerrorCode:(int)errorCode andCroppedImage:(UIImage *)croppedImage;功 能 有剪裁的拍照/导入识别回调参 数editController 编辑界面控制器resultDic 识别结果errorCode 识别结果(0-识别成功,19-识别失败)crop... [收起]
[展开]
移动端OCR开发文档
粉丝: {{bookData.followerCount}}
文本内容
第51页

51

*)authCode isFrontPage:(BOOL)isFrontPage;

功 能 视频流预览识别封装接口

参 数

parentController 当前控制器(self)

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

NO-modal(模态弹出)]

authCode 授权文件名

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

返回值 无

1.3 回调函数简介(DriverLicenceManagerDelegate)

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

photoRecognizeDLFinishWithResult:(NSDictionary *)resultDic

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

功 能 有剪裁的拍照/导入识别回调

参 数

editController 编辑界面控制器

resultDic 识别结果

errorCode 识别结果(0-识别成功,19-识别失败)

croppedImage 剪裁后的图片

返回值 无

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

andErrorCode:(int)errorCode;

功 能 无剪裁的拍照/导入识别回调

参 数

resultDic 识别结果

errorCode 识别结果(0-识别成功,19-识别失败)

返回值 无

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

recognizeDLByVideoStreamFinishWithResult:(NSDictionary *)resultDic

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

功 能 视频流预览识别回调

参 数

cameraController 自定义相机控制器

resultDic 识别结果

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

licenceImage 驾驶证图片

返回值 无

注:参数 resultDict 为识别结果,字段值如下。

第52页

52

正页:

@\"姓名\",@\"性别\",@\"证号\",@\"国籍\",@\"住址\",@\"出生日期\",@\"初次领证日期

\",@\"准驾车型\",@\"有效起始日期\",@\"有效期限\"副页:

@\"副页证号\",@\"副页档案编号\"二、驾驶证SDK集成步骤

步骤一:将授权文件和Demo中的DriverLicence文件夹拖入工程中

步骤二:在控制器内#import \"DriverLicenceManager.h\"步骤三:

如果是相册导入/系统相机拍照识别,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法内

调用下图中所示方法即可识别。(详见Demo)(打开系统相机/相册那部分代码在此不做介

第53页

53

绍,不会写可参考Demo)

实现如下代理方法即可获得有剪裁的导入/拍照识别的识别结果。(详见

Demo)

实现如下代理方法即可获得无剪裁的导入/拍照识别的识别结果。(详见

Demo)

如果是视频流预览识别,在点击事件内调用如下方法即可弹出相机界面开

始识别。(正副页需分开调用传不同的参数,详见Demo)

第54页

54

实现如下代理方法即可获得视频流识别的识别结果。(详见Demo)

步骤四:需要在Info.plist配置相应的相机和相册权限,否则会崩溃。

相机权限 NSCameraUsageDescription

相册权限

NSPhotoLibraryUsageDescription

≥iOS11.0(相册

写入权限需要) NSPhotoLibraryAddUsageDescription

步骤五:添加依赖库

导入识别:

MobileCoreServices.framework

视频流预览识别:

AVFoundation.framework

CoreMedia.framework

步骤六:在Info.plist添加View controller-based status bar appearance并设为

NO。以允许我们在相机控制器改变状态栏的颜色。(若已添加请忽略)

通用激活错误码

错误码 描述 备注

第55页

55

0 激活成功

20 未授权该产品

iOS:

授权中不包含当前测试的产品,需要联系商务申请包含该

产品的授权文件

Android:

4)产品类型值改为附录2指定的即可

2)授权中不包含当前测试的产品,需要联系商务申请包

含该产品的授权文件

21 未读取到授权文件

iOS:

模拟器运行会出现该报错,请使用真机测试

Android:

授权文件不存在或者读取不到,详见配置授权文件

22 公司未授权

iOS:

1)如果是Demo测试:是否将授权文件拖入项目中且

AppDelegate.m中宏定义修改为lic文件名

2)项目targets->Build Phases->Copy Bundle Resources,点

击+号把授权文件进去,再次运行

3)清除缓存(替换新授权后可能会出现报错22)

4)不可修改授权文件名

23 无效授权

24 授权信息验证失败

iOS:

检查项目的BundleID和申请授权时提供给我们的BundleID

是否相同

Andorid:

需要项目的信息是否与授权绑定的信息一致,比如包名、

app名

25 授权到期

1.授权文件到期,请联系我司业务人员。

2.若是不久刚出过授权,请确认是否替换最新的授权

26 nsUserID为空 nsUserID为空字符串或nil

30 SDK版本不符

授权绑定的SDK版本号和当前使用的SDK的版本号不一致

7.申请绑定了当前使用的SDK的版本号的授权

8.更换授权绑定的版本号对应的SDK

驾驶证独有激活错误码

错误码 描述 备注

0 成功

1 初始化字典失败

重复激活核心。确定激活核心和释放核心代码是否成对出

现。

第56页

56

驾驶证识别错误码

错误码 描述 备注

0 识别成功

1 装在图像图像处理失

2 读取图像数据失败 图像数据有问题

3 识别失败

19 识别失败

-1 识别图片过大或过小

-2 标题定位失败

-6 获取位置信息失败

-7 结果校验失败

驾驶证检线错误码

错误码 描述 备注

0 检线成功

29 检线小于规定范围

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);

功能 初始化核心资源

参数

szSysPath 识别核心所在目录,传NULL即可

filePath 授权文件绝对路径

CommpanyName 授权公司名称

nProductType 产品类型号,具体参考附录2

nAultType 授权类型号,具体参考附录1

telephonyManager

Android自带手机管理类,在程序中new出一个即

context 传this

返回值 0 表示成功,其他值失败(见附录)。

(2) private native void VLKernalUnInit();

功能 释放核心资源

参数 无

返回值 无

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

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

第58页

58

功能 基于NV21字节流检测行驶证正页自动拍照

参 数

data NV21字节流数据

preWidth 适配相机预览宽度

preHeight 适配相机预览高度

LineX 检测到的四点横坐标(数组大小为4)

LineY 检测到的四点纵坐标(数组大小为4)

返回值 0成功,其他值检测状态(见附录3)。

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

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

功能 基于NV21字节流检测行驶证副页自动拍照

参 数

data NV21字节流数据

preWidth 适配相机预览宽度

preHeight 适配相机预览高度

LineX 检测到的四点横坐标(数组大小为4)

LineY 检测到的四点纵坐标(数组大小为4)

返回值 0成功,其他值检测状态(见附录)。

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

功能 拍照识别行驶证正页

参 数

data 拍照图像jpg数据

dataLength 拍照图像jpg数据的长度

返回值 0表示成功,其他值失败(原因:图像中未发现驾照、图像不清晰)

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

第59页

59

功能 拍照识别行驶证副页

参 数

data 拍照图像jpg数据

dataLength 拍照图像jpg数据的长度

返回值 0表示成功,其他值失败(原因:图像中未发现驾照、图像不清晰)

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

功能 导入识别行驶证正页

参 数 imgPath 需要识别的图像路径

返回值 0成功,其他值失败(原因:图像中未发现驾照、图像不清晰)

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

功能 导入识别行驶证副页

参 数 imgPath 需要识别的图像路径

返回值 0成功,其他值失败(原因:图像中未发现驾照、图像不清晰)

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

功能 获取行驶证正页各字段的识别内容

参 数 index 字段索引值

返回值 各字段的识别内容。

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

功能 获取行驶证副页各字段的识别内容

参 数 index 行驶证字段索引值表

返回值 各字段的识别内容。

第60页

60

(11) public native String VLGetEndTime ();

功能 获取授权文件的截止日期

参 数 无 字段索引值

返回值 各字段的识别内容。行驶证字段索引值表

类型 index 备注

正页

车牌号码 0

车辆类型 1

所有人 2

住址 3

使用性质 4

品牌型号 5

车辆识别代号 6

发动机号码 7

注册日期 8

发证日期 9

副页

车牌号码 0

条码编号 1

第61页

61

档案编号 2

核载人数 3

总质量 4

整备质量 5

核载质量 6

外廓尺寸 7

准牵引质量 8

二、行驶证SDK集成步骤

(1)如图所示:按照集成行驶证库说明文档集成 VehicleLibrary 库

(2)配置识别库,配置授权文件。

如图所示:将授权文件放到 assets 目录下

第62页

62

调用识别库的示例代码 和 接收识别结果的示例代码 可以参考 MainActivity

Sample 示例工程的 MainActivity 调用识别库的代码写的比较详细。

可请参考MainActivity

(3)配置识别库,配置授权文件。

如图所示:找到 VehicleConfig 这个类,把 licenseId 的值改为自己授权文件的

名字

第63页

63

进入识别之前,加上如下代码:先初始化授权文件(完成授权文件配置)

StreamUtil.initLicenseFile(this, VehicleConfig.licenseId);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_bin);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_dic);

StreamUtil.initLicenseFile(this, VehicleConfig.nc_param);

(4)配置识别库,配置授权文件验证信息

如图所示:将 applicationId 改为自己授权文件绑定的包名

授权绑定包名说明:

第64页

64

比如授权绑定的包名为 com.etop.sample ,那么这个授权文件就只能用

在应用包名为 com.etop.sample 的应用上,用在其他包名的 app 上均激活失

败 ErrorCode 为 24

(5)在工程中配置相应的权限:

请您在自己的工程AndroidManifest.xml文件中添加如下权限:

<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\"/>

各个权限的用途说明:

CAMERA:调用相机进行相机预览扫描/拍照,识别相机中预览/拍照数据

READ_EXTERNAL_STORAGE:从相册选择图片识别,需要读取SD卡权限

WRITE_EXTERNAL_STORAGE:保存识别后的裁切图片,需要写入SD卡权限

VIBRATE:扫描识别成功,震动提示,需要震动权限

· 行驶证 iOS 部分一、行驶证接口简介

1.1 SDK接口简介

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

*)nsReserve;

功 能 初始化核心资源

参 数

nsUserID 授权码

nsReserve 保留参数,直接传nil

返回值 0成功,其他值失败(见附录1)

(2) - (int)freeSVehicleLicense;

功 能 释放核心资源

参 数 无

返回值 0成功

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

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

功 能 检测证件四边

第65页

65

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

cornerArray 返回证件四个顶点(左上、右上、右下、左下)

返回值 0成功,其他值(31、32、33、34)失败(见附录1)

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

Height:(int)height;

功 能 buffer视频预览识别

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

返回值 0成功,其他值失败(见附录1)

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

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

功 能 设置识别区域(仅在视频预览识别三行时使用)

参 数

left 左

top 上

right 右

bottom 下

返回值 0成功,其他值失败(见附录1)

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

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

功 能 视频预览识别vin码、品牌型号、发动机号三行

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

返回值 0成功,其他值失败(见附录1)

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

功 能 (视频流预览识别)拍照识别

参 数 image 图像实例

返回值 0成功,其他值失败(见附录1)

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

功 能 正页导入/系统相机拍照识别

参 数 image 图像实例

第66页

66

返回值 0成功,其他值失败(见附录1)

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

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

*)cornerArray;

功 能 副页检测四边

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

cornerArray 返回证件四个顶点(左上、右上、右下、左下)

返回值 0成功,其他值(31、32、33、34)失败(见附录1)

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

功 能 副页导入/系统相机拍照/视频流拍照识别

参 数 image 图像实例

返回值 0成功,其他值失败(见附录1)

参数列表

参数类型 参数名 类型 释义

OCR字段

nsPlateNo NSString

车牌号码(正副页共

用此参数)

正页

nsVehicleType NSString 车辆类型

nsOwner NSString 所有人

nsAddress NSString 住址

nsUseCharacter NSString 使用性质

nsModel NSString 品牌型号

nsVIN NSString 车辆识别代号

nsEngineNo NSString 发动机号码

nsRegisterDate NSString 注册日期

第67页

67

nsIssueDate NSString 发证日期

副页

nsBarCodeNo NSString 条码编号

nsFileNo NSString 档案编号

nsPeopleNum NSString 核载人数

nsTotalWeight NSString 总质量

nsCurbWeight NSString 整备质量

nsLoadWeight NSString 核载质量

nsGabarite NSString 外廓尺寸

nsTractionWeight NSString 准牵引质量

图像相关 暂无 UIImage 暂无返回

其他

nsEndTime NSString 授权到期时间

pathForVL NSString

授权文件/模型文件

读取地址(插件化使

用)

sdkVersion NSString 核心库版本号

needVlDebugLog BOOL 需要打印调试信息

1.2 封装接口简介(VLManager.h)

(1) + (instancetype)sharedManager;

功 能 单例全局访问点

参 数 无

返回值 单例对象

注意:请使用此方法创建VLManager单例,不要使用new、alloc init或其他。

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

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

功 能 导入/拍照识别封装接口

第68页

68

参 数

vlImage 行驶证图片

isFront 识别正页/副页(YES-正页 NO-副页)

authCode 授权文件名

返回值 无

(3) - (void)recognizeVLByVideoStreamWithController:(UIViewController

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

*)authCode;

功 能 视频流识别封装接口

参 数

parentController 传入self

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

态弹出)]

authCode 授权文件名

返回值 无

1.3 识别结果回调接口简介(VLManager.h中

VLManagerDelegate)

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

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

andErrorCode:(NSString *)errorCode;

功 能 导入/系统相机拍照识别回调

参 数

resultDic 识别结果

isFront 识别的是正页/副页(和传入的参数相同)

vlImage 传入识别的图片

errorCode 错误码(0为识别成功,19为识别失败)

返回值 无

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

recognizeVLByVideoStreamFinishWithResult:(NSDictionary *)resultDic

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

andErrorCode:(int)errorCode;

功 能 视频流识别回调接口

参 数

cameraController 相机控制器

resultDic 识别结果

isFront 正页还是副页

resultImage 行驶证图片

第69页

69

errorCode 错误码(0为识别成功)

返回值 无

注:resultDic字段值如下:

正页:@\"号牌号码\", @\"车辆类型\",@\"所有人\", @\"住址\",@\"使用性质\", @\"品牌型号\", @\"车辆识别代号\", @\"发动机号码\", @\"注册日期\", @\"发证日期\"。

副页:@\"号牌号码\", @\"档案编号\", @\"核载人数\", @\"总质量\", @\"整备质量\", @\"核载质量

\", @\"外廓尺寸\", @\"准牵引质量\", @\"条码编号\"。二、行驶证SDK集成步骤

步骤一:将授权文件和MVRegisterCertificate文件夹拖入工程中,拖入授权

文件时请选择Copy items if needed、Create groups和Add to targets(同测试步骤拖

入时的选项)。

步骤二:在需要进行识别的控制器内输入#import \"VLManager.h\"步骤三:

如果是导入/拍照识别,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法内

第70页

70

调用下图中所示方法即可识别。(详见Demo)(打开系统相机/相册那部分代码在此不做介

绍,不会写可参考Demo)

实现如下代理方法即可获得导入/拍照识别的识别结果。(详见Demo)

如果是视频流预览识别,在点击事件内调用如下方法即可弹出相机界面开

始识别。(详见Demo)

实现如下代理方法即可获得视频流识别的识别结果。(详见Demo)

步骤四:需要在Info.plist配置相应的相机和相册权限,否则会崩溃。(相机

权限必须配置,相册权限根据需求配置)

相机权限 NSCameraUsageDescription

相册权限

NSPhotoLibraryUsageDescription

≥iOS11.0(相册

写入权限) NSPhotoLibraryAddUsageDescription

步骤五:添加依赖库

导入识别:

MobileCoreServices.framework

视频流预览识别:

第71页

71

AVFoundation.framework

CoreMedia.framework

步骤六:在Info.plist添加View controller-based status bar appearance并设为

NO。以允许我们在相机控制器改变状态栏的颜色。(若已添加请忽略)

通用激活错误码

错误码 描述 备注

0 激活成功

20 未授权该产品

iOS:

授权中不包含当前测试的产品,需要联系商务申请包含该

产品的授权文件

Android:

5)产品类型值改为附录2指定的即可

2)授权中不包含当前测试的产品,需要联系商务申请包

含该产品的授权文件

21 未读取到授权文件

iOS:

模拟器运行会出现该报错,请使用真机测试

Android:

授权文件不存在或者读取不到,详见配置授权文件

22 公司未授权

iOS:

1)如果是Demo测试:是否将授权文件拖入项目中且

AppDelegate.m中宏定义修改为lic文件名

2)项目targets->Build Phases->Copy Bundle Resources,点

击+号把授权文件进去,再次运行

3)清除缓存(替换新授权后可能会出现报错22)

4)不可修改授权文件名

23 无效授权

24 授权信息验证失败

iOS:

检查项目的BundleID和申请授权时提供给我们的BundleID

是否相同

Andorid:

需要项目的信息是否与授权绑定的信息一致,比如包名、

app名

25 授权到期

1.授权文件到期,请联系我司业务人员。

2.若是不久刚出过授权,请确认是否替换最新的授权

第72页

72

30 SDK版本不符

授权绑定的SDK版本号和当前使用的SDK的版本号不一致

9.申请绑定了当前使用的SDK的版本号的授权

10.更换授权绑定的版本号对应的SDK

行驶证独有激活错误码

错误码 描述 备注

0 成功

2 初始化字典失败

重复激活核心。确定激活核心和释放核心代码是否成对出

现。

3 核心.bin .dic .param文

件打开失败

4

.bin .param文件加载失

5 标签为空labels

7 关键文件获取失败 (核心文件等)

10

(iOS)

复制

VLNCResource.bundle

中的文件失败

设置SVehicleLicense的needVLDebugLog属性为YES,查看控

制台打印的error信息

26

(iOS)

nsUserID为空 请传入当前授权文件名

49

(iOS)

找不到

VLNCResource.bundle

中的文件

确定项目targets->Build Phases->Copy Bundle Resources处

是否有VLNCResource.bundle

行驶证识别错误码

错误码 描述 备注

0 识别成功

1 读取图像数据失败

16 图像解析失败 图像数据有问题

19 识别失败

-2 定位标题失败

-3 获取标题位置失败

-4 识别失败

-5 字段校验失败

-6 字段校验失败

-7 宽度控制

第73页

73

-8 宽度控制

行驶证检线错误码

错误码 描述 备注

0 检线成功

29 检线小于规定范围

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);

功 能 初始化核心资源

参 数

szSysPath 识别核心所在目录,传NULL即可

FilePath 授权文件绝对路径

UserID 授权码,由sdk供应商提供

nProductType 产品类型号,具体参考附录2

nAultType 授权类型号,具体参考附录1

telephonyManager

Android自带手机管理类,在程序中new

出一个即可

context 传this

返回值 0 表示成功,其他值失败(见常见问题1)。

(2) public native void VinKernalUnInit();

功 能 释放核心资源

参 数 无

返回值 无

(3) public native String VinGetEndTime();

第75页

75

功 能 获取授权截止日期

参 数 无

返回值 返回一个例(2019-01-01)格式的时间

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

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

功 能 基于NV21字节流识别

参 数

pImageBuffer NV21字节流

nWidth 适配相机预览宽度

nHeight 适配相机预览高度

szBuffer 识别结果缓冲区

BufferLen 识别结果缓冲区长度

pLine 返回一个400*80的图片数据

type 识别方向,0代表横向,1代表竖向

返回值

0成功,其他值失败(图像中未发现VIN码。确认VinSetROI此方法设

置识别区域正确性,保证识别框和识别区域一致)。

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

功 能 设置相机界面中vin码的矩形识别区域

参 数

borders

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

图像左边界,top传入图像上边界,right传入图

像右边界,bottom传入图像下边界,这四个边界

可以通过界面上的画的矩形四边界确定

imgWidth 适配相机预览宽度

imgHeight 适配相机预览高度

(6)public native String VinGetResult ();

功 能 获取识别结果,此接口在调用识别接口成功之后调用

第76页

76

参 数 无

返回值 识别结果

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

功 能 图像导入识别

参 数 filepath 图像的路径

返回值 0 表示成功,其他值失败(原因图像中未发现VIN码,图像不清晰)

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

功 能

保存识别后的纯VIN码的灰度图,在VinRecognizeImageFile接口识

别成功后调用

参 数 wrapLine 返回一个400*80的图片数据

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

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

right,int bottom);

功 能 图像导入区域识别,识别范围是传入的四点区域

参 数

imagePath 图像路径

Left 识别区域的左边界

top 识别区域的上边界

right 识别区域的右边界

bottom 识别区域的下边界

返回值 0 表示成功,其他值失败(原因图像中未发现VIN码,图像不清晰)

二、Vin 码 SDK 集成步骤

(1)如图所示:按照集成VIN码库说明文档集成 VinLibrary 库

第77页

77

(2)配置识别库,配置授权文件。

如图所示:将授权文件放到 assets 目录下

调用识别库的示例代码 和 接收识别结果的示例代码 可以参考 MainActivity

Sample 示例工程的 MainActivity 调用识别库的代码写的比较详细。

可请参考MainActivity。

(3)配置识别库,配置授权文件。

如图所示:找到 ConstantConfig 这个类,把 licenseId 的值改为自己授权文件

的名字

第78页

78

进入识别之前,加上如下代码:先初始化授权文件(完成授权文件配置)

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)配置识别库,配置授权文件验证信息

如图所示:将 applicationId 改为自己授权文件绑定的包名

第79页

79

授权绑定包名说明:

比如授权绑定的包名为 com.etop.sample ,那么这个授权文件就只能用在应用包

名为 com.etop.sample 的应用上,用在其他包名的 app 上均激活失败 ErrorCode

为 24

(5)在工程中配置相应的权限:

请您在自己的工程AndroidManifest.xml文件中添加如下权限:

<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\"/>

各个权限的用途说明:

CAMERA:调用相机进行相机预览扫描/拍照,识别相机中预览/拍照数据

READ_EXTERNAL_STORAGE:从相册选择图片识别,需要读取SD卡权限

WRITE_EXTERNAL_STORAGE:保存识别后的裁切图片,需要写入SD卡权限

VIBRATE:扫描识别成功,震动提示,需要震动权限

· Vin 码 iOS 部分一、Vin码接口简介

1.1 SDK接口简介

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

nsReserve;

功 能 初始化核心资源

参 数

nsUserID 授权码/授权文件名

nsReserve 保留参数,直接传nil

第80页

80

返回值 0表示成功,其他值失败(见附录1)

注:1.授权文件名不可更改!SDK会在内部校验授权文件名。

2.此方法读取授权文件时,先从沙盒的Documents中读取,如果找到授权文件则继续激活识

别核心,否则再在项目目录中寻找([NSBundle mainBundle]),如果找到授权文件则继续激活

识别核心,否则返回22。如图2.1所示。

图2.1 授权文件寻找方式

若您采用服务器端下载/更新授权文件的方式,请务必将授权文件保存至Documents目录下,

并以”nsUserID.lic”命名文件(例如传入的nsUserID为7332DBAFD2FD18301EF6,则下载并保存到

沙盒的授权文件应命名为7332DBAFD2FD18301EF6.lic)。如图2.2所示。

图2.2 授权文件路径示例

建议此方式下,在项目目录中也放一个授权文件,没网的情况下也能使用。由于是优先读取

第81页

81

网络下载的授权文件,所以项目目录中的授权文件存在不会影响读取从网络下载的最新的授

权。

(2) - (int)freeVinTyper;

功 能 释放核心资源

参 数 无

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

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

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

功 能 设置VIN码的检测区域

参 数

nLeft 左边界

nTop 上边界

nRight 右边界

nBottom 下边界

返回值 无

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

功 能 设置识别类型

参 数 type 类型值:0-横屏(默认) 1-竖屏

返回值 无

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

Height:(int)height;

功 能 视频预览识别

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

返回值 0成功,-2失败(实时识别,失败值不作为逻辑处理判断依据)

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

功 能 导入识别

参 数 image 图像对象

返回值 0成功,-2失败

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

功 能 配置vin码校验规则

第82页

82

参 数 type

0-(默认)vin正常校验

1-放弃部分校验规则以识别摩托车的Vin码

返回值 无

(8) - (bool)findVin;

功 能 识别结果是否可信

参 数 无

返回值 0-可信 1-可疑

参数列表

参数类型 参数名 类型 释义

OCR字段 nsResult NSString Vin码

图像相关 resultImg UIImage Vin二值化切图

其他

nsEndTime NSString 授权到期时间

pathForVin NSString

授权文件/模型文件

读取地址(插件化使

用)

sdkVersion NSString 核心库版本号

needVinDebugLog BOOL 需要打印调试信息

1.2 封装接口简介

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

andAuthCode:(NSString *)authCode;

功 能 拍照/导入识别封装接口

参 数

vinImage 需要识别的图像

authCode 授权文件名

返回值 无

(2) -

(void)recognizeVinCodeByVideoStreamWithController:(UIViewController

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

*)authCode;

功 能 视频流预览识别封装接口

参 数 parentController 当前控制器(self)

第83页

83

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

NO-modal(模态弹出)]

authCode 授权文件名

返回值 无

1.3 回调函数简介

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

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

andErrorCode:(int)errorCode;

功 能 拍照/导入识别回调

参 数

vinCode 识别结果

srcImage 传入识别的VIN码图像

vinImage VIN码区域图

errorCode 识别结果(0-识别成功,19-识别失败)

返回值 无

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

videoStreamRecognizeVinFinishWithResult:(NSString *)vinCode

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

andVinImage(UIImage *)vinImage;

功 能 视频流预览识别回调

参 数

cameraController 自定义相机控制器

vinCode 识别结果

srcImage 完整原图

areaCutImage 区域裁切图

vinImage VIN码图片

返回值 无

注:参数nsResult返回识别结果、resultImg返回截取的VIN码图像(400*80)、

nsEndTime返回授权截止日期、sdkVersion返回SDK版本号

二、Vin 码 SDK 集成步骤

步骤一:将授权文件和Vin文件夹拖入工程中。拖入授权文件时请选择Copy

items if needed、Create groups和Add to targets。

第84页

84

若想将授权文件放在服务器上,只将Vin文件夹拖入工程中即可。并且注意要

在调用识别语句之前将授权文件下载下来放在沙盒中的Documents文件夹下并

以原文件名命名(注意:授权文件名不可更改)。

步骤二:在需要进行识别的控制器内输入#import \"VinManager.h\"步骤三:如果需要『图像编辑』功能(不需要图像编辑可跳过这步),请

#import \"REEditController.h\",初始化编辑界面,设置代理。

实现代理方法即可拿到裁切后的图。

第85页

85

步骤四:

如果是相册导入/系统相机拍照识别,在

- (void)imagePickerController:(UIImagePickerController *)picker

didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info;方法内

调用下图中所示方法即可识别。(打开系统相机/相册的代码在此不做介绍,不会

写可参考Demo)

如果您使用了图像编辑功能,请在『编辑功能的回调』中调用如下图所示

的方法进行识别。

实现如下代理方法即可获得导入/拍照识别的识别结果。(详见Demo)

如果是视频流预览识别,在点击事件内调用如下方法即可弹出相机界面开始

第86页

86

识别(详见Demo)。

实现如下代理方法即可获得视频流预览识别的识别结果。(详见Demo)

注意:无论是否适配横竖屏,视频流预览界面都建议锁定屏幕方向后测试。除非

您项目中有方向控制相关代码,则可在自定义相机界面进行关闭旋转锁定后的其

他系统方向的测试。自定义相机界面已封装好方向控制代码。如下所示:

步骤五:需要在Info.plist配置相应的相机和相册权限,否则会崩溃。(相机

权限必须配置,相册权限根据需求配置)

相机权限 NSCameraUsageDescription

相册权限

NSPhotoLibraryUsageDescription

≥iOS11.0(相册

写入权限) NSPhotoLibraryAddUsageDescription

步骤六:在Info.plist添加View controller-based status bar appearance并设为

NO。以允许我们在相机控制器改变状态栏的颜色。(若已添加请忽略)

步骤七:添加依赖库

导入识别:

MobileCoreServices.framework

视频流预览识别:

AVFoundation.framework

第87页

87

CoreMedia.framework

AudioToolBox.framework

通用激活错误码

错误码 描述 备注

0 激活成功

20 未授权该产品

iOS:

授权中不包含当前测试的产品,需要联系商务申请包含该

产品的授权文件

Android:

6)产品类型值改为附录2指定的即可

2)授权中不包含当前测试的产品,需要联系商务申请包

含该产品的授权文件

21 未读取到授权文件

iOS:

模拟器运行会出现该报错,请使用真机测试

Android:

授权文件不存在或者读取不到,详见配置授权文件

22 公司未授权

iOS:

1)如果是Demo测试:是否将授权文件拖入项目中且

AppDelegate.m中宏定义修改为lic文件名

2)项目targets->Build Phases->Copy Bundle Resources,点

击+号把授权文件进去,再次运行

3)清除缓存(替换新授权后可能会出现报错22)

4)不可修改授权文件名

23 无效授权

24 授权信息验证失败

iOS:

检查项目的BundleID和申请授权时提供给我们的BundleID

是否相同

Andorid:

需要项目的信息是否与授权绑定的信息一致,比如包名、

app名

25 授权到期

1.授权文件到期,请联系我司业务人员。

2.若是不久刚出过授权,请确认是否替换最新的授权

30 SDK版本不符

授权绑定的SDK版本号和当前使用的SDK的版本号不一致

11.申请绑定了当前使用的SDK的版本号的授权

12.更换授权绑定的版本号对应的SDK

第88页

88

Vin 码独有激活错误码

错误码 描述 备注

0 激活成功

1/4 初始化失败

1:没反回参数的并且不是0(default)

4:加载nc_vin.bin出错

3

1.文件流打开失败

2.加载model失败

核心文件、深度学习模型文件等

5 label为空

6 装载识别引擎失败

重复激活核心。确定激活核心和释放核心代码是否成对出

现。

7/8

syspath为空/加载核心

文件失败等

10

(iOS)

复制

VinNCResource.bundle

中的文件失败

设置VinTyper的needVLDebugLog属性为YES,查看控制台

打印的error信息

26/1022

(iOS)

nsUserID为空 请传入当前授权文件名

49

(iOS)

找不到

VinNCResource.bundle

中的文件

确定项目targets->Build Phases->Copy Bundle Resources处

是否有VinNCResource.bundle

Vin 码识别错误码

错误码 描述 备注

0 识别成功

1 装载图像失败

3 切分失败

4 识别失败

16 装载图像失败

19 识别失败

-1 校验不通过 识别结果不符合17位等

-2 识别失败

第89页

89

第六部分 车牌识别

· 车牌 Android 部分一、车牌接口简介

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

kernalPath,String licenseId, int nProductType,int nAultType,

TelephonyManager telephonyManager,Context context);

功能 初始化核心资源

参数

kernalDirectory 识别核心所在目录,传NULL即可

kernalPath 授权文件绝对路径

licenseId 授权码,由sdk供应商提供

nProductType 产品类型号,具体参考附录2

nAultType 授权类型号,具体参考附录1

telephonyManager

Android自带手机管理类,在程序中new

出一个即可

context 传this

返回值 0 表示成功,其他值失败(见常见问题1)。

(2) public native void ETUnInitPlateKernal();

功能 释放核心资源

参数 无

返回值 无

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

preHeight);

第90页

90

功能 设置拍摄界面中vin码的位置矩形

参数

borders

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

入图像左边界,top传入图像上边界,right传

入图像右边界,bottom传入图像下边界,这四

个边界可以通过界面上的画的矩形四边界确定

preWidth 适配相机预览宽度

preHeight 适配相机预览高度

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

功能 获取识别结果

参 数

nIndex 字段索引(0:车牌;1:车牌颜色)

返回值 字段识别结果。

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

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

pLine);

功能 基于NV21字节流识别

参 数

pImageBuffer NV21字节流,相机预览模式数据

nType 屏幕竖屏还是横屏,竖屏传1,横屏传0

preWidth 适配相机预览宽度

preHeight 适配相机预览高度

szBuffer 识别结果缓冲区

BufferLen 识别结果缓冲区长度

pLine 返回一个400*80的图片数据

返回值

0成功,其他值失败,失败原因,图像中未发现车牌或核心激

活失败

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

功能 保存指定图像到指定路径下

第91页

91

参 数

imgPath 图像保存路径

nImageType

要保持的图像类型(0:车牌小图;1为ROI

图像)

返回值 0表示保存成功,其他值为失败。

(7) public native string GetEndTime();

功能 获取授权截止日期

返回值 返回一个如(2018-1-1)格式的日期,在激活成功后调用

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

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

pLine);

功能 基于NV21字节流识别(深度学习)

参 数

pImageBuffer NV21字节流,相机预览模式数据

nType 屏幕竖屏还是横屏,竖屏传1,横屏传0

preWidth 适配相机预览宽度

preHeight 适配相机预览高度

szBuffer 识别结果缓冲区

BufferLen 识别结果缓冲区长度

pLine 返回一个400*80的图片数据

返回值

0成功,其他值失败,失败原因,图像中未发现车牌或核心激

活失败

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

参 数 imgPath 图像路径

返回值 0表示识别成功,其他值为失败。

第92页

92

二、车牌 SDK 集成步骤

(1)如图所示:按照集成车牌识别库说明文档集成 PlateLibrary 库

(2)配置识别库,配置授权文件。

如图所示:将授权文件放到 assets 目录下

调用识别库的示例代码 和 接收识别结果的示例代码 可以参考 MainActivity

Sample 示例工程的 MainActivity 调用识别库的代码写的比较详细。

可请参考MainActivity。

(3)配置识别库,配置授权文件。

如图所示:找到 PlateInfoConfig 这个类,把 licenseId 的值改为自己授权文件

的名字

第93页

93

(4)配置识别库,配置授权文件验证信息

如图所示:将 applicationId 改为自己授权文件绑定的包名

授权绑定包名说明:

比如授权绑定的包名为 com.etop.sample ,那么这个授权文件就只能用

在应用包名为 com.etop.sample 的应用上,用在其他包名的 app 上均激活失

败 ErrorCode 为 24

(5)在工程中配置相应的权限:

请您在自己的工程AndroidManifest.xml文件中添加如下权限:

<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\"/>

各个权限的用途说明:

CAMERA:调用相机进行相机预览扫描/拍照,识别相机中预览/拍照数据

READ_EXTERNAL_STORAGE:从相册选择图片识别,需要读取SD卡权限

WRITE_EXTERNAL_STORAGE:保存识别后的裁切图片,需要写入SD卡权限

VIBRATE:扫描识别成功,震动提示,需要震动权限

· 车牌 iOS 部分一、车牌接口简介

1.1 SDK接口简介(SPlate.h)

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

nsReserve;

功 能 初始化核心资源

参 数

nsUserID 授权公司名称

nsReserve 保留参数,直接传nil

返回值 0表示成功,其他值失败(见附录1)。

注:1.授权文件名不可更改!SDK会在内部校验授权文件名。

2.此方法读取授权文件时,先从沙盒的Documents中读取,如果找到授权文件则继续激活识

别核心,否则再在项目目录中寻找([NSBundle mainBundle]),如果找到授权文件则继续激活

识别核心,否则返回22。核心代码如图2.1所示。

第95页

95

图2.1 授权文件寻找方式

若您采用服务器端下载/更新授权文件的方式,请务必将授权文件保存至Documents目录下,

并以”nsUserID.lic”命名文件(例如传入的nsUserID为7332DBAFD2FD18301EF6,则下载并保存到

沙盒的授权文件应命名为7332DBAFD2FD18301EF6.lic)。如图2.2所示。

图2.2 授权文件路径示例

建议此方式下,在项目目录中也放一个授权文件,没网的情况下也能使用。由于优先读取网

络下载的授权文件,项目目录中的授权文件存在不会影响读取从网络下载的最新的授权。

(2) - (int)freeSPlate;

功 能 释放核心资源

参 数 无

返回值 0表示成功

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

Bottom:(int)bottom;

功 能 设置车牌的检测区域

参 数

left 左边界

top 上边界

right 右边界

bottom 下边界

返回值 0表示成功,其他值失败(见附录1)。

第96页

96

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

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

功 能 视频流预览识别(传入Buffer识别)

参 数

buffer 图像数据地址

width 图像宽度

height 图像高度

type 0-横屏 1-竖屏

返回值 0表示成功,其他值失败(见附录1)。

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

功 能 视频流预览识别(Buffer转成图片传入识别)

参 数

image 图像实例

type 0-横屏 1-竖屏

返回值 0表示成功,其他值失败(见附录1)。

参数列表

参数类型 参数名 类型 释义

OCR字段

nsPlateNo NSString 车牌号

nsPlateColor NSString 车牌颜色

图像相关 nsPlateImg UIImage 车牌裁切图

其他

nsEndTime NSString 授权到期时间

pathForPlate NSString

授权文件读取地址

(插件化使用)

sdkVersion NSString 核心库版本号

needPlateLog BOOL 需要打印调试信息

1.2 回调函数简介(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;

功 能 视频流预览识别成功回调

参 数

cameraController 自定义相机控制器

plateStr 车牌识别结果

plateColor 车牌颜色

plateImage 车牌图片

squareImage 相机界面方框区域的裁切图

fullImage 完整图像

返回值 无

(2) - (void)backButtonClickWithPlateCameraController:(UIViewController

*)cameraController;

功 能 相机界面点击返回按钮的回调

参 数 cameraController 车牌自定义相机控制器

返回值 无

二、车牌 SDK 集成步骤

步骤一:将授权文件和Plate文件夹拖入工程中。拖入授权文件时请选择Copy

items if needed、Create groups和Add to targets(同测试步骤拖入时的选项)。

第98页

98

步骤二:在需要进行识别的控制器内输入#import

\"PlateCameraController.h\"步骤三:在点击事件里输入如下代码弹出控制器即可开始识别。(详见Demo)

实现如下代理方法即可获得视频流预览识别的识别结果。(详见Demo)

注:无论是否适配横竖屏,视频流预览界面都建议锁定屏幕方向后测试。除非您

项目中有方向控制相关代码,则可在自定义相机界面进行关闭旋转锁定后的其他

系统方向的测试。自定义相机界面已实现方向控制代码。如下所示:

步骤四:需要在Info.plist配置相应的相机和相册权限,否则会崩溃。(相机

权限必须配置,相册权限根据需求配置)

相机权限 NSCameraUsageDescription

相册权限

NSPhotoLibraryUsageDescription

≥iOS11.0(相册

写入权限) NSPhotoLibraryAddUsageDescription

步骤五:在Info.plist添加View controller-based status bar appearance,设为

NO。以允许我们在相机控制器改变状态栏的颜色。(若已添加请忽略)

步骤六:添加依赖库

第99页

99

视频流预览识别:

AVFoundation.framework

CoreMedia.framework

AudioToolBox.framework

通用激活错误码

错误码 描述 备注

0 激活成功

20 未授权该产品

iOS:

授权中不包含当前测试的产品,需要联系商务申请包含该

产品的授权文件

Android:

7)产品类型值改为附录2指定的即可

2)授权中不包含当前测试的产品,需要联系商务申请包

含该产品的授权文件

21 未读取到授权文件

iOS:

模拟器运行会出现该报错,请使用真机测试

Android:

授权文件不存在或者读取不到,详见配置授权文件

22 公司未授权

iOS:

1)如果是Demo测试:是否将授权文件拖入项目中且

AppDelegate.m中宏定义修改为lic文件名

2)项目targets->Build Phases->Copy Bundle Resources,点

击+号把授权文件进去,再次运行

3)清除缓存(替换新授权后可能会出现报错22)

4)不可修改授权文件名

23 无效授权

24 授权信息验证失败

iOS:

检查项目的BundleID和申请授权时提供给我们的BundleID

是否相同

Andorid:

需要项目的信息是否与授权绑定的信息一致,比如包名、

app名

25 授权到期

1.授权文件到期,请联系我司业务人员。

2.若是不久刚出过授权,请确认是否替换最新的授权

30 SDK版本不符

授权绑定的SDK版本号和当前使用的SDK的版本号不一致

13.申请绑定了当前使用的SDK的版本号的授权

第100页

100

14.更换授权绑定的版本号对应的SDK

车牌独有激活错误码

错误码 描述 备注

26 nsUserID参数为空

车牌识别错误码

错误码 描述 备注

0 识别成功

1 未授权该产品 加载图片数据失败(图像不存在、数据类型不支持等原因)

2 图像解析失败 图像数据有问题

3 识别失败 图像中没有找到车牌

4 识别比对 连续识别成功则视为识别成功

-5 识别核心未初始化 核心未激活成功

百万用户使用云展网进行电子书免费制作,只要您有文档,即可一键上传,自动生成链接和二维码(独立电子书),支持分享到微信和网站!
收藏
转发
下载
免费制作
其他案例
更多案例
免费制作
x
{{item.desc}}
下载
{{item.title}}
{{toast}}