灵云SDK开发手册(C API)  5.2
 全部 结构体 函数 变量 类型定义 枚举 枚举值  
OCR拍照器

以下描述了如何使用灵云OCR拍照器功能。

1. OCR拍照器简介

OCR拍照器封装了灵云SDK的OCR模块并且实现了银行卡、名片和证件识别功能,能将银行卡、名片和证件上的信息通过拍照的方式以文本的方式提取出来。 目前拍照器支持所有支持TWain协议的设备。

2. OCR拍照器能力

OCR拍照器封装了灵云SDK的OCR能力,其许多概念仍然是基于OCR基础API的。建议在使用灵云OCR拍照器之前, 先熟悉 ocr能力 的相关内容。

在使用灵云OCR拍照器之前,需要选择合适的模板和能力,

3. 初始化

在使用播放器之前,仍然需要先初始化系统模块,请参见 系统模块的初始化/终止

3.1 创建扫描设备

在初始化系统模块之后,就可以使用 hci_ocr_capture_init() 创建扫描设备对象,同时需要设置初始化参数和设置回调。

3.2 加载名片或身份证模板

初始化参数主要是设置本地模板库的路径等。

// 设置回调参数及用户数据
param.pfnRecogFinish = recogFinish;
param.pfnStateChange = eventStateChange;
param.pfnError = captureEventError;
param.pfnCapturing = captureCapturing;
// 设置初始化参数
// initCapKeys: 如果使用本地能力,配置需要使用的能力
const char* pszConfig = "initCapKeys=ocr.local.template.v6,dataPath=../Data/";
hci_ocr_capture_init(pszConfig, &param);

3.3 设置回调函数

为了能接收播放器内部信息,如状态信息、播放情况及错误信息等,应用层需要实现拍照器的回调函数接口。 回调函数通过 CAPTURE_CALLBACK_PARAM 参数传递给 hci_ocr_capture_init() 函数。 下面的代码示例实现了回调函数接口的写法:

//识别结果回调,扫描多张识别会回调多次
void HCIAPI recogFinish(
_MUST_ _IN_ CAPTURE_EVENT eCaptureEvent,
_MUST_ _IN_ OCR_RECOG_RESULT *pRecogResult,
_OPT_ _IN_ void * pUsrParam )
{
//输出结果
char szGbkResult[10000] = { 0 };
UTF8ToGBK((unsigned char *)pRecogResult->pTextBuf, (unsigned char *)szGbkResult, 10000);
printf("%s\n", szGbkResult);
printf("测试完毕\n");
}
//事件回调
void HCIAPI eventStateChange(
_MUST_ _IN_ CAPTURE_EVENT eCaptureEvent,
_OPT_ _IN_ void * pUsrParam )
{
printf("eventStateChange = %d\n", eCaptureEvent);
}
//图像数据扫描回调
void HCIAPI captureCapturing(
_MUST_ _IN_ void * pszImageData,
_MUST_ _IN_ unsigned int uiImageLen,
_MUST_ _IN_ bool bHasConers,
_OPT_ _IN_ OCR_CORNERS_RESULT *pCornersResult,
_OPT_ _IN_ void * pUsrParam
)
{
printf("uiImageLen = %u\n", uiImageLen);
}
void HCIAPI captureEventError(
_MUST_ _IN_ CAPTURE_EVENT eCaptureEvent,
_MUST_ _IN_ int eErrorCode,
_OPT_ _IN_ void * pUsrParam )
{
printf("eErrorCode = %d\n", eErrorCode);
}

4. 扫描识别

扫描图像识别,可以通过设置showSettingUi=yes来开启扫描设置界面,同时支持多张图片识别, 扫描结束后会在资源文件所在文件夹下创建tmp文件夹用于存放扫描图片,示例如下:

string strConf = string("capkey=ocr.local.bizcard.v6,showSettingUi=yes");
hci_ocr_capture_start(strConf.c_str());

5. 停止并识别

通过hci_ocr_capture_stop_and_recog()强制进行拍照并识别(非文本识别)。
在文本识别模式下,调用此接口仅返回拍照的图像数据,不会进行识别,用户需手动调用hci_ocr_capture_recog()接口进行识别。
在非文本识别模式下,调用此接口会返回拍照的图像数据与识别结果。
windows不支持该接口。

6. 停止

通过hci_ocr_capture_stop()强制停止不进行识别,windows不支持该接口。

7. 本地图片识别

拍照器还提供对本地图片进行识别,其中可以通过isFile字段来指定使用文件路径还是图像数据。

string strConf = string("capkey=ocr.local.bizcard.v6,isFile=yes");
hci_ocr_capture_recog(strConf.c_str(),"../bizcard.jpg",0);

8. 反初始化

hci_ocr_capture_release() OCR_Capture反初始化,

当不再使用其它灵云能力时,需要反初始化系统模块,请参见 系统模块的初始化/终止