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

View File

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

View File

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