调用汉王OCR时,增加日志,以及在临时目录中创建子目录

This commit is contained in:
luoliangyi 2022-11-22 17:25:38 +08:00
parent 21b68c36b4
commit 4fae146a4d
3 changed files with 70 additions and 36 deletions

View File

@ -1,13 +1,11 @@
#include "HGOCRHanvon.hpp" #include "HGOCRHanvon.hpp"
#include "HGOCR.h"
#include "HGOCRRetImpl.hpp"
#include "HGOCRRetImpl.hpp" #include "HGOCRRetImpl.hpp"
#include "../base/HGUtility.h" #include "../base/HGUtility.h"
#include "../base/HGInfo.h" #include "../base/HGInfo.h"
#include "../imgfmt/HGBmp.h" #include "../imgfmt/HGBmp.h"
#include "../imgfmt/HGJpeg.h" #include "../imgfmt/HGJpeg.h"
HGUInt HGOCRHanvon::m_refCount = 0; //HGUInt HGOCRHanvon::m_refCount = 0;
//HGOCRHanvon* HGOCRHanvon::m_OCR = NULL; //HGOCRHanvon* HGOCRHanvon::m_OCR = NULL;
HGOCRHanvon::HGOCRHanvon() HGOCRHanvon::HGOCRHanvon()
@ -59,11 +57,11 @@ HGResult HGOCRHanvon::Init()
return HGIMGPROC_ERR_FAIL; return HGIMGPROC_ERR_FAIL;
} }
if (0 == m_refCount) //if (0 == m_refCount)
{ //{
//HWOCR_InitPdf(); //HWOCR_InitPdf();
} //}
++m_refCount; //++m_refCount;
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
@ -77,12 +75,12 @@ HGResult HGOCRHanvon::Deinit()
ClearImageList(); ClearImageList();
assert(0 != m_refCount); //assert(0 != m_refCount);
--m_refCount; //--m_refCount;
if (0 == m_refCount) //if (0 == m_refCount)
{ //{
//HWOCR_ExitPdf(); //HWOCR_ExitPdf();
} //}
HWOCR_SDKExit(m_ocrHandle); HWOCR_SDKExit(m_ocrHandle);
m_ocrHandle = NULL; m_ocrHandle = NULL;
@ -101,19 +99,23 @@ HGResult HGOCRHanvon::ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet)
HGChar tmpFileName[256]; HGChar tmpFileName[256];
HGBase_GetTmpFileName("bmp", tmpFileName, 256); HGBase_GetTmpFileName("bmp", tmpFileName, 256);
HGImgFmt_SaveBmpImage(image, NULL, tmpFileName); HGResult ret = HGImgFmt_SaveBmpImage(image, NULL, tmpFileName);
if (HGBASE_ERR_OK != ret)
{
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageOCR: Save Temp File Failed");
return ret;
}
char* rst = NULL; char* rst = NULL;
int len = 0; int len = 0;
int ret = HWOCR_RecognizeFile2Str((unsigned char*)tmpFileName, m_ocrHandle, &rst, &len); int rc = HWOCR_RecognizeFile2Str((unsigned char*)tmpFileName, m_ocrHandle, &rst, &len);
if (0 != ret)
{
HGBase_DeleteFile(tmpFileName); HGBase_DeleteFile(tmpFileName);
if (0 != rc)
{
return HGIMGPROC_ERR_FAIL; return HGIMGPROC_ERR_FAIL;
} }
assert(NULL != rst && len > 0); assert(NULL != rst && len > 0);
HGBase_DeleteFile(tmpFileName);
std::vector<std::string> blockInfo; std::vector<std::string> blockInfo;
blockInfo.push_back(rst); blockInfo.push_back(rst);
@ -151,19 +153,27 @@ HGResult HGOCRHanvon::ImageOCRToFile(HGImage image, HGUInt outType, const HGChar
HGChar tmpFileName[256]; HGChar tmpFileName[256];
HGBase_GetTmpFileName("bmp", tmpFileName, 256); HGBase_GetTmpFileName("bmp", tmpFileName, 256);
HGImgFmt_SaveBmpImage(image, NULL, tmpFileName); HGResult ret = HGImgFmt_SaveBmpImage(image, NULL, tmpFileName);
if (HGBASE_ERR_OK != ret)
HGChar tmpDir[256];
HGBase_GetTmpPath(tmpDir, 256);
int ret = HWOCR_RecognizeFile((unsigned char*)tmpFileName, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir);
if (0 != ret)
{ {
HGBase_DeleteFile(tmpFileName); HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageOCRToFile: Save Temp File Failed");
return HGIMGPROC_ERR_FAIL; return ret;
} }
HGChar tmpDir[256];
HGBase_GetTmpFileName(NULL, tmpDir, 256);
ret = HGBase_CreateDir(tmpDir);
if (HGBASE_ERR_OK != ret)
{
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageOCRToFile: Create Temp Dir Failed");
HGBase_DeleteFile(tmpFileName); HGBase_DeleteFile(tmpFileName);
return HGBASE_ERR_OK; return ret;
}
int rc = HWOCR_RecognizeFile((unsigned char*)tmpFileName, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir);
HGBase_DeleteDir(tmpDir);
HGBase_DeleteFile(tmpFileName);
return (0 == rc) ? HGBASE_ERR_OK : HGIMGPROC_ERR_FAIL;
} }
HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct) HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct)
@ -175,13 +185,18 @@ HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct)
HGChar tmpFileName[256]; HGChar tmpFileName[256];
HGBase_GetTmpFileName("bmp", tmpFileName, 256); HGBase_GetTmpFileName("bmp", tmpFileName, 256);
HGImgFmt_SaveBmpImage(image, NULL, tmpFileName); HGResult ret = HGImgFmt_SaveBmpImage(image, NULL, tmpFileName);
if (HGBASE_ERR_OK != ret)
{
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageTextDirectOCR: Save Temp File Failed");
return ret;
}
int dire = -1; int dire = -1;
int ret = HWOCR_GetFileDirect((unsigned char*)tmpFileName, m_ocrHandle, &dire); int rc = HWOCR_GetFileDirect((unsigned char*)tmpFileName, m_ocrHandle, &dire);
if (0 != ret)
{
HGBase_DeleteFile(tmpFileName); HGBase_DeleteFile(tmpFileName);
if (0 != rc)
{
return HGIMGPROC_ERR_FAIL; return HGIMGPROC_ERR_FAIL;
} }
@ -194,7 +209,6 @@ HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct)
else if (ROT270 == dire) else if (ROT270 == dire)
*direct = HGIMGPROC_OCRTEXTDIRECT_LEFT; *direct = HGIMGPROC_OCRTEXTDIRECT_LEFT;
HGBase_DeleteFile(tmpFileName);
return HGBASE_ERR_OK; return HGBASE_ERR_OK;
} }
@ -210,6 +224,7 @@ HGResult HGOCRHanvon::AddToImageList(HGImage image)
HGResult ret = HGImgFmt_SaveJpegImage(image, NULL, tmpFileName); HGResult ret = HGImgFmt_SaveJpegImage(image, NULL, tmpFileName);
if (HGBASE_ERR_OK != ret) if (HGBASE_ERR_OK != ret)
{ {
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::AddToImageList: Save Temp File Failed");
return ret; return ret;
} }
@ -269,12 +284,26 @@ HGResult HGOCRHanvon::ImageListOCRToFile(HGUInt outType, const HGChar* outFileNa
ppImageFiles[m_imageList.size()] = NULL; ppImageFiles[m_imageList.size()] = NULL;
HGChar tmpDir[256]; HGChar tmpDir[256];
HGBase_GetTmpPath(tmpDir, 256); HGBase_GetTmpFileName(NULL, tmpDir, 256);
HGResult ret = HGBase_CreateDir(tmpDir);
if (HGBASE_ERR_OK == ret)
{
#if defined(HG_CMP_MSC) #if defined(HG_CMP_MSC)
int ret = HWOCR_RecognizeFileBatch(ppImageFiles, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir, RecogProgress, IsCanceled); int rc = HWOCR_RecognizeFileBatch(ppImageFiles, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir, RecogProgress, IsCanceled);
#else #else
int ret = HWOCR_RecognizeFileBatch(ppImageFiles, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir); int rc = HWOCR_RecognizeFileBatch(ppImageFiles, (unsigned char*)outFileName, fileType, m_ocrHandle, NULL, tmpDir);
#endif #endif
if (0 != rc)
{
ret = HGIMGPROC_ERR_FAIL;
}
HGBase_DeleteDir(tmpDir);
}
else
{
HGBase_WriteInfo(HGBASE_INFOTYPE_ERROR, "HGOCRHanvon::ImageListOCRToFile: Create Temp Dir Failed");
}
delete[] ppImageFiles; delete[] ppImageFiles;
m_param = NULL; m_param = NULL;
@ -288,7 +317,7 @@ HGResult HGOCRHanvon::ImageListOCRToFile(HGUInt outType, const HGChar* outFileNa
} }
m_imageList.clear(); m_imageList.clear();
return (0 != ret) ? HGIMGPROC_ERR_FAIL : HGBASE_ERR_OK; return ret;
} }
int HGOCRHanvon::HWOCR_SDKInitialize(void** ppstOcrHandle) int HGOCRHanvon::HWOCR_SDKInitialize(void** ppstOcrHandle)

View File

@ -47,7 +47,7 @@ private:
#endif #endif
private: private:
static HGUInt m_refCount; //static HGUInt m_refCount;
//static HGOCRHanvon* m_OCR; //static HGOCRHanvon* m_OCR;
HGDll m_dll; HGDll m_dll;
void* m_ocrHandle; void* m_ocrHandle;

View File

@ -247,6 +247,11 @@ HGResult HGOCRTesseract::ImageListOCRToFile(HGUInt outType, const HGChar* outFil
if (0 == outType) if (0 == outType)
outType = GetOutTypeByFileName(outFileName); outType = GetOutTypeByFileName(outFileName);
if (HGIMGPROC_OCROUTTYPE_PDF != outType && HGIMGPROC_OCROUTTYPE_TXT != outType)
{
return HGBASE_ERR_INVALIDARG;
}
HGImgFmt_CloseTiffWriter(m_tiffWriter); HGImgFmt_CloseTiffWriter(m_tiffWriter);
m_tiffWriter = NULL; m_tiffWriter = NULL;
assert(!m_tiffFileName.empty()); assert(!m_tiffFileName.empty());