diff --git a/build2/qt/HGScannerLib/HGScannerLib.def b/build2/qt/HGScannerLib/HGScannerLib.def index 6908e423..8ce56ce1 100644 --- a/build2/qt/HGScannerLib/HGScannerLib.def +++ b/build2/qt/HGScannerLib/HGScannerLib.def @@ -9,6 +9,8 @@ HGLib_GetImageInfo HGLib_GetImageDpi HGLib_SaveImage HGLib_ReleaseImage +HGLib_GetOcrText +HGLib_ReleaseOcrText HGLib_InitDevice HGLib_DeinitDevice HGLib_GetDeviceNameList diff --git a/doc/scannerlib/新版SDK接口说明.doc b/doc/scannerlib/新版SDK接口说明.doc index 579a88f1..76cbbee6 100644 Binary files a/doc/scannerlib/新版SDK接口说明.doc and b/doc/scannerlib/新版SDK接口说明.doc differ diff --git a/doc/scannerlib/新版SDK接口说明.pdf b/doc/scannerlib/新版SDK接口说明.pdf index cc75c304..ca7a2de2 100644 Binary files a/doc/scannerlib/新版SDK接口说明.pdf and b/doc/scannerlib/新版SDK接口说明.pdf differ diff --git a/sdk/scannerlib/HGScannerLib.cpp b/sdk/scannerlib/HGScannerLib.cpp index 5d40d739..0324d947 100644 --- a/sdk/scannerlib/HGScannerLib.cpp +++ b/sdk/scannerlib/HGScannerLib.cpp @@ -151,6 +151,66 @@ HGBool HGAPI HGLib_ReleaseImage(HGLibImage image) return HGTRUE; } +HGChar* HGAPI HGLib_GetOcrText(HGLibImage image) +{ + if (NULL == image) + { + return NULL; + } + + std::string strText; + + HGOCRMgr ocrMgr = NULL; + HGImgProc_CreateOCRMgr(HGIMGPROC_OCRALGO_HANVON, &ocrMgr); + if (NULL != ocrMgr) + { + HGOCRRet ocrRet = NULL; + HGImgProc_ImageOCR(ocrMgr, (HGImage)image, &ocrRet); + if (NULL != ocrRet) + { + HGUInt blockCount = 0; + HGImgProc_GetOCRRetBlockCount(ocrRet, &blockCount); + for (HGUInt i = 0; i < blockCount; ++i) + { + const HGChar* text = NULL; + HGImgProc_GetOCRRetBlockText(ocrRet, i, &text); + strText += StdStringToUtf8(text); + if (i != blockCount - 1) + strText += "\n"; + } + + HGImgProc_DestroyOCRRet(ocrRet); + } + + HGImgProc_DestroyOCRMgr(ocrMgr); + } + + if (strText.empty()) + { + return NULL; + } + + HGChar* ocrText = (HGChar*)malloc(strText.size() + 1); + if (NULL == ocrText) + { + return NULL; + } + + strcpy(ocrText, strText.c_str()); + return ocrText; +} + +HGBool HGAPI HGLib_ReleaseOcrText(HGChar* ocrText) +{ + if (NULL == ocrText) + { + return HGFALSE; + } + + free(ocrText); + return HGTRUE; +} + HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param) { return HGLibDeviceImpl::Init(func, param); diff --git a/sdk/scannerlib/HGScannerLib.h b/sdk/scannerlib/HGScannerLib.h index 61b5946b..589ab791 100644 --- a/sdk/scannerlib/HGScannerLib.h +++ b/sdk/scannerlib/HGScannerLib.h @@ -542,6 +542,12 @@ HGEXPORT HGBool HGAPI HGLib_SaveImage(HGLibImage image, const HGChar* savePath, /* 释放图像 */ HGEXPORT HGBool HGAPI HGLib_ReleaseImage(HGLibImage image); +/* 获取OCR文本 */ +HGEXPORT HGChar* HGAPI HGLib_GetOcrText(HGLibImage image); + +/* 销毁OCR文本 */ +HGEXPORT HGBool HGAPI HGLib_ReleaseOcrText(HGChar* ocrText); + /* 初始化扫描仪 */ HGEXPORT HGBool HGAPI HGLib_InitDevice(HGLibDeviceHotPlugEventFunc func, HGPointer param); diff --git a/test/scannerlib/huagao/test.py b/test/scannerlib/huagao/test.py index 6acca66c..6e3c1439 100644 --- a/test/scannerlib/huagao/test.py +++ b/test/scannerlib/huagao/test.py @@ -94,6 +94,19 @@ ImageParam.tiffJpegQuality = 80 ImageParam.ocr = 0 Ret = HGLib_SaveImage(Image, c_char_p(b"2.jpg"), pointer(ImageParam)) +#OCR +HGLib_GetOcrText = Objdll.HGLib_GetOcrText +HGLib_GetOcrText.argtypes = [ctypes.c_void_p] +HGLib_GetOcrText.restype = ctypes.c_void_p +OcrText = HGLib_GetOcrText(Image) +if OcrText: + print(ctypes.string_at(OcrText).decode('utf-8')); + +HGLib_ReleaseOcrText = Objdll.HGLib_ReleaseOcrText +HGLib_ReleaseOcrText.argtypes = [ctypes.c_void_p] +HGLib_ReleaseOcrText.restype = ctypes.c_int +Ret = HGLib_ReleaseOcrText(OcrText) + #释放图像资源 HGLib_ReleaseImage = Objdll.HGLib_ReleaseImage HGLib_ReleaseImage.argtypes = [ctypes.c_void_p] @@ -102,7 +115,7 @@ Ret = HGLib_ReleaseImage(Image) #设备热拔插回调事件 def HGLibDeviceHotPlugEventFunc(event: c_uint, deviceName: c_char_p, param: c_void_p): - print(deviceName) + print(deviceName.decode('utf-8')) return #初始化操作 @@ -196,12 +209,14 @@ Ret = HGLib_SetDeviceParam(Device, 51, byref(DevParam)) DevParam = ctypes.c_double(0.1) Ret = HGLib_SetDeviceParam(Device, 52, byref(DevParam)) +bStop = False #扫描事件回调 -def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: c_char_p, param: c_void_p): - s_info=info +def HGLibDeviceScanEventFunc(device: c_void_p, event: c_uint, err: c_int, info: ctypes.c_char_p, param: c_void_p): global bStop - print("event code",event," event info:",s_info) + print("event code:", event) + if info: + print("event info:", info.decode('utf-8')) if event == 2:#HGLIB_DEVSCAN_EVENT_END 扫描停止 bStop=True print("bStop true")