增加多页OCR功能
This commit is contained in:
parent
51041d5938
commit
bda7f11f7e
|
@ -19,3 +19,6 @@ HGImgProc_GetOCRRetBlockCount
|
|||
HGImgProc_GetOCRRetBlockText
|
||||
HGImgProc_ImageOCRToFile
|
||||
HGImgProc_ImageTextDirectOCR
|
||||
HGImgProc_AddToImageOCRList
|
||||
HGImgProc_ClearImageOCRList
|
||||
HGImgProc_ImageListOCRToFile
|
||||
|
|
|
@ -114,4 +114,37 @@ HGResult HGAPI HGImgProc_ImageTextDirectOCR(HGOCRMgr ocrMgr, HGImage image, HGUI
|
|||
|
||||
HGOCRBase* ocrMgrImpl = (HGOCRBase*)ocrMgr;
|
||||
return ocrMgrImpl->ImageTextDirectOCR(image, direct);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgProc_AddToImageOCRList(HGOCRMgr ocrMgr, HGImage image)
|
||||
{
|
||||
if (NULL == ocrMgr)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGOCRBase* ocrMgrImpl = (HGOCRBase*)ocrMgr;
|
||||
return ocrMgrImpl->AddToImageList(image);
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgProc_ClearImageOCRList(HGOCRMgr ocrMgr)
|
||||
{
|
||||
if (NULL == ocrMgr)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGOCRBase* ocrMgrImpl = (HGOCRBase*)ocrMgr;
|
||||
return ocrMgrImpl->ClearImageList();
|
||||
}
|
||||
|
||||
HGResult HGAPI HGImgProc_ImageListOCRToFile(HGOCRMgr ocrMgr, HGUInt outType, const HGChar* outFileName, HGImageListOcrFunc func, HGPointer param)
|
||||
{
|
||||
if (NULL == ocrMgr)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGOCRBase* ocrMgrImpl = (HGOCRBase*)ocrMgr;
|
||||
return ocrMgrImpl->ImageListOCRToFile(outType, outFileName, func, param);
|
||||
}
|
|
@ -29,6 +29,10 @@ HG_DECLARE_HANDLE(HGOCRRet);
|
|||
/* 旋转了180度 */
|
||||
#define HGIMGPROC_OCRTEXTDIRECT_180 4L
|
||||
|
||||
/* 多页OCR进度
|
||||
*/
|
||||
typedef HGInt (*HGImageListOcrFunc)(HGUInt total, HGUInt now, HGPointer param);
|
||||
|
||||
/* 初始化OCR模块
|
||||
*/
|
||||
HGEXPORT HGResult HGAPI HGImgProc_CreateOCRMgr(HGOCRMgr *ocrMgr);
|
||||
|
@ -61,4 +65,16 @@ HGEXPORT HGResult HGAPI HGImgProc_ImageOCRToFile(HGOCRMgr ocrMgr, HGImage image,
|
|||
*/
|
||||
HGEXPORT HGResult HGAPI HGImgProc_ImageTextDirectOCR(HGOCRMgr ocrMgr, HGImage image, HGUInt *direct);
|
||||
|
||||
/* 添加到图像OCR列表
|
||||
*/
|
||||
HGEXPORT HGResult HGAPI HGImgProc_AddToImageOCRList(HGOCRMgr ocrMgr, HGImage image);
|
||||
|
||||
/* 清理图像OCR列表
|
||||
*/
|
||||
HGEXPORT HGResult HGAPI HGImgProc_ClearImageOCRList(HGOCRMgr ocrMgr);
|
||||
|
||||
/* 图像列表OCR到文件
|
||||
*/
|
||||
HGEXPORT HGResult HGAPI HGImgProc_ImageListOCRToFile(HGOCRMgr ocrMgr, HGUInt outType, const HGChar* outFileName, HGImageListOcrFunc func, HGPointer param);
|
||||
|
||||
#endif /* __HGOCR_H__ */
|
|
@ -1,8 +1,7 @@
|
|||
#ifndef __HGOCRBASE_H__
|
||||
#define __HGOCRBASE_H__
|
||||
|
||||
#include "../base/HGDef.h"
|
||||
#include "../base/HGImage.h"
|
||||
#include "HGOCR.h"
|
||||
|
||||
class HGOCRBase
|
||||
{
|
||||
|
@ -15,6 +14,9 @@ public:
|
|||
virtual HGResult ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet) = 0;
|
||||
virtual HGResult ImageOCRToFile(HGImage image, HGUInt outType, const HGChar *outFileName) = 0;
|
||||
virtual HGResult ImageTextDirectOCR(HGImage image, HGUInt* direct) = 0;
|
||||
virtual HGResult AddToImageList(HGImage image) = 0;
|
||||
virtual HGResult ClearImageList() = 0;
|
||||
virtual HGResult ImageListOCRToFile(HGUInt outType, const HGChar* outFileName, HGImageListOcrFunc func, HGPointer param) = 0;
|
||||
|
||||
protected:
|
||||
static HGUInt GetOutTypeByFileName(const HGChar* fileName);
|
||||
|
|
|
@ -5,13 +5,19 @@
|
|||
#include "../base/HGUtility.h"
|
||||
#include "../base/HGInfo.h"
|
||||
#include "../imgfmt/HGBmp.h"
|
||||
#include "../imgfmt/HGJpeg.h"
|
||||
|
||||
HGUInt HGOCRHanvon::m_refCount = 0;
|
||||
HGOCRHanvon* HGOCRHanvon::m_OCR = NULL;
|
||||
|
||||
HGOCRHanvon::HGOCRHanvon()
|
||||
{
|
||||
m_dll = NULL;
|
||||
m_ocrHandle = NULL;
|
||||
m_imageList.clear();
|
||||
m_func = NULL;
|
||||
m_param = NULL;
|
||||
m_FuncRet = 0;
|
||||
}
|
||||
|
||||
HGOCRHanvon::~HGOCRHanvon()
|
||||
|
@ -69,6 +75,8 @@ HGResult HGOCRHanvon::Deinit()
|
|||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
ClearImageList();
|
||||
|
||||
assert(0 != m_refCount);
|
||||
--m_refCount;
|
||||
if (0 == m_refCount)
|
||||
|
@ -190,6 +198,99 @@ HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct)
|
|||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGOCRHanvon::AddToImageList(HGImage image)
|
||||
{
|
||||
if (NULL == image)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
HGChar tmpFileName[256] = {0};
|
||||
HGBase_GetTmpFileName("jpg", tmpFileName, 256);
|
||||
HGResult ret = HGImgFmt_SaveJpegImage(image, NULL, tmpFileName);
|
||||
if (HGBASE_ERR_OK != ret)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
|
||||
m_imageList.push_back(tmpFileName);
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGOCRHanvon::ClearImageList()
|
||||
{
|
||||
for (int i = 0; i < (int)m_imageList.size(); ++i)
|
||||
{
|
||||
HGBase_DeleteFile(m_imageList[i].c_str());
|
||||
}
|
||||
|
||||
m_imageList.clear();
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
HGResult HGOCRHanvon::ImageListOCRToFile(HGUInt outType, const HGChar* outFileName, HGImageListOcrFunc func, HGPointer param)
|
||||
{
|
||||
if (outType > HGIMGPROC_OCROUTTYPE_OFD || NULL == outFileName)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
if (0 == outType)
|
||||
outType = GetOutTypeByFileName(outFileName);
|
||||
|
||||
int fileType = -1;
|
||||
if (HGIMGPROC_OCROUTTYPE_RTF == outType)
|
||||
fileType = FILE_RTF;
|
||||
else if (HGIMGPROC_OCROUTTYPE_XLS == outType)
|
||||
fileType = FILE_XLS;
|
||||
else if (HGIMGPROC_OCROUTTYPE_TXT == outType)
|
||||
fileType = FILE_TXT;
|
||||
else if (HGIMGPROC_OCROUTTYPE_PDF == outType)
|
||||
fileType = FILE_PDF;
|
||||
else if (HGIMGPROC_OCROUTTYPE_OFD == outType)
|
||||
fileType = FILE_OFD;
|
||||
if (-1 == fileType)
|
||||
{
|
||||
return HGBASE_ERR_INVALIDARG;
|
||||
}
|
||||
|
||||
if (m_imageList.empty())
|
||||
{
|
||||
return HGBASE_ERR_FAIL;
|
||||
}
|
||||
|
||||
m_OCR = this;
|
||||
m_func = func;
|
||||
m_param = param;
|
||||
|
||||
HGChar** ppImageFiles = new HGChar* [m_imageList.size() + 1];
|
||||
for (int i = 0; i < (int)m_imageList.size(); ++i)
|
||||
ppImageFiles[i] = (HGChar *)m_imageList[i].c_str();
|
||||
ppImageFiles[m_imageList.size()] = NULL;
|
||||
|
||||
HGChar tmpDir[256];
|
||||
HGBase_GetTmpPath(tmpDir, 256);
|
||||
#if defined(HG_CMP_MSC)
|
||||
int ret = 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);
|
||||
#endif
|
||||
if (0 != ret)
|
||||
{
|
||||
delete[] ppImageFiles;
|
||||
m_param = NULL;
|
||||
m_func = NULL;
|
||||
m_OCR = NULL;
|
||||
return HGIMGPROC_ERR_FAIL;
|
||||
}
|
||||
|
||||
delete[] ppImageFiles;
|
||||
m_param = NULL;
|
||||
m_func = NULL;
|
||||
m_OCR = NULL;
|
||||
return HGBASE_ERR_OK;
|
||||
}
|
||||
|
||||
int HGOCRHanvon::HWOCR_SDKInitialize(void** ppstOcrHandle)
|
||||
{
|
||||
typedef int (*Func)(void**);
|
||||
|
@ -293,3 +394,48 @@ int HGOCRHanvon::HWOCR_GetFileDirect(unsigned char* ImgFile, void* pstHandle, in
|
|||
|
||||
return func(ImgFile, pstHandle, pDirect);
|
||||
}
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
int HGOCRHanvon::HWOCR_RecognizeFileBatch(char** ppImageFiles, unsigned char* OutFile, int nFileType, void* pstHandle, char* pLibDir, char* pTmpDir,
|
||||
HWOCR_RecogProgress aFuncRecogProgress, HWOCR_IsCanceled aFuncIsCanceled)
|
||||
{
|
||||
typedef int (*Func)(char**, unsigned char*, int, void*, char*, char*, HWOCR_RecogProgress, HWOCR_IsCanceled);
|
||||
Func func = NULL;
|
||||
HGBase_GetDllProcAddress(m_dll, "HWOCR_RecognizeFileBatch", (HGPointer*)&func);
|
||||
if (NULL == func)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return func(ppImageFiles, OutFile, nFileType, pstHandle, pLibDir, pTmpDir, aFuncRecogProgress, aFuncIsCanceled);
|
||||
}
|
||||
#else
|
||||
int HGOCRHanvon::HWOCR_RecognizeFileBatch(char** ppImageFiles, unsigned char* OutFile, int nFileType, void* pstHandle, char* pLibDir, char* pTmpDir)
|
||||
{
|
||||
typedef int (*Func)(char**, unsigned char*, int, void*, char*, char*);
|
||||
Func func = NULL;
|
||||
HGBase_GetDllProcAddress(m_dll, "HWOCR_RecognizeFileBatch", (HGPointer*)&func);
|
||||
if (NULL == func)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
return func(ppImageFiles, OutFile, nFileType, pstHandle, pLibDir, pTmpDir);
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
int HGOCRHanvon::RecogProgress(int nPercent)
|
||||
{
|
||||
if (NULL != m_OCR->m_func)
|
||||
m_OCR->m_FuncRet = m_OCR->m_func((HGUInt)m_OCR->m_imageList.size(), (HGUInt)nPercent, m_OCR->m_param);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int HGOCRHanvon::IsCanceled()
|
||||
{
|
||||
if (0 != m_OCR->m_FuncRet)
|
||||
return 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -7,6 +7,8 @@
|
|||
#include "../base/HGImage.h"
|
||||
#include "../base/HGDll.h"
|
||||
#include "hanwangOCRdetect.h"
|
||||
#include <vector>
|
||||
#include <string>
|
||||
|
||||
class HGOCRHanvon : public HGOCRBase
|
||||
{
|
||||
|
@ -19,6 +21,9 @@ public:
|
|||
HGResult ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet);
|
||||
HGResult ImageOCRToFile(HGImage image, HGUInt outType, const HGChar *outFileName);
|
||||
HGResult ImageTextDirectOCR(HGImage image, HGUInt* direct);
|
||||
HGResult AddToImageList(HGImage image);
|
||||
HGResult ClearImageList();
|
||||
HGResult ImageListOCRToFile(HGUInt outType, const HGChar* outFileName, HGImageListOcrFunc func, HGPointer param);
|
||||
|
||||
private:
|
||||
int HWOCR_SDKInitialize(void** ppstOcrHandle);
|
||||
|
@ -29,11 +34,27 @@ private:
|
|||
void HWOCR_FreeStrRst(char** ppRst);
|
||||
int HWOCR_RecognizeFile(unsigned char* ImgFile, unsigned char* OutFile, int nFileType, void* pstHandle, char* pLibDir, char* pTmpDir);
|
||||
int HWOCR_GetFileDirect(unsigned char* ImgFile, void* pstHandle, int* pDirect);
|
||||
#if defined(HG_CMP_MSC)
|
||||
int HWOCR_RecognizeFileBatch(char** ppImageFiles, unsigned char* OutFile, int nFileType, void* pstHandle, char* pLibDir, char* pTmpDir,
|
||||
HWOCR_RecogProgress aFuncRecogProgress, HWOCR_IsCanceled aFuncIsCanceled);
|
||||
#else
|
||||
int HWOCR_RecognizeFileBatch(char** ppImageFiles, unsigned char* OutFile, int nFileType, void* pstHandle, char* pLibDir, char* pTmpDir);
|
||||
#endif
|
||||
|
||||
#if defined(HG_CMP_MSC)
|
||||
static int RecogProgress(int nPercent);
|
||||
static int IsCanceled();
|
||||
#endif
|
||||
|
||||
private:
|
||||
static HGUInt m_refCount;
|
||||
static HGOCRHanvon* m_OCR;
|
||||
HGDll m_dll;
|
||||
void* m_ocrHandle;
|
||||
std::vector<std::string> m_imageList;
|
||||
HGImageListOcrFunc m_func;
|
||||
HGPointer m_param;
|
||||
HGInt m_FuncRet;
|
||||
};
|
||||
|
||||
#endif /* __HGOCRHANVON_HPP__ */
|
Loading…
Reference in New Issue