以下描述了如何使用灵云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 加载名片或身份证模板
初始化参数主要是设置本地模板库的路径等。
const char* pszConfig = "initCapKeys=ocr.local.template.v6,dataPath=../Data/";
3.3 设置回调函数
为了能接收播放器内部信息,如状态信息、播放情况及错误信息等,应用层需要实现拍照器的回调函数接口。 回调函数通过 CAPTURE_CALLBACK_PARAM 参数传递给 hci_ocr_capture_init() 函数。 下面的代码示例实现了回调函数接口的写法:
void HCIAPI recogFinish(
_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(
_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_ void * pUsrParam
)
{
printf("uiImageLen = %u\n", uiImageLen);
}
void HCIAPI captureEventError(
_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");
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");
8. 反初始化
hci_ocr_capture_release() OCR_Capture反初始化,
当不再使用其它灵云能力时,需要反初始化系统模块,请参见 系统模块的初始化/终止。