HGImgProc_ImageOCRToFile函数的outType为0时,通过扩展名来判断

This commit is contained in:
luoliangyi 2022-05-12 09:15:57 +08:00
parent e33fbad104
commit c60ab5e65a
6 changed files with 103 additions and 43 deletions

View File

@ -104,25 +104,6 @@ BOOL CHGTestDlg::OnInitDialog()
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
HGOCRMgr hOCRMgr = NULL;
HGImgProc_CreateOCRMgr(&hOCRMgr);
HGImage image = NULL;
HGImgFmt_LoadImage("D:\\1.bmp", 0, NULL, HGBASE_IMGTYPE_RGB, HGBASE_IMGORIGIN_TOP, &image);
if (NULL != image)
{
HGOCRRet ocrRet;
HGImgProc_ImageOCR(hOCRMgr, image, &ocrRet);
HGImgProc_ImageOCRToFile(hOCRMgr, image, HGIMGPROC_OCROUTTYPE_PDF, "D:\\1.pdf");
HGUInt direct;
HGImgProc_ImageTextDirectOCR(hOCRMgr, image, &direct);
HGBase_DestroyImage(image);
}
HGImgProc_DestroyOCRMgr(hOCRMgr);
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}

View File

@ -60,7 +60,7 @@ HGResult HGAPI HGImgProc_ImageOCR(HGOCRMgr ocrMgr, HGImage image, HGOCRRet* ocrR
return HGBASE_ERR_OK;
}
HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet)
HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRRet ocrRet)
{
if (NULL == ocrRet)
{
@ -72,7 +72,7 @@ HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet)
return HGBASE_ERR_OK;
}
HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt* count)
HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRRet ocrRet, HGUInt* count)
{
if (NULL == ocrRet)
{
@ -83,7 +83,7 @@ HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt* count)
return ocrRetImpl->GetBlockCount(count);
}
HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRMgr ocrRet, HGUInt index, const HGChar** text)
HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRRet ocrRet, HGUInt index, const HGChar** text)
{
if (NULL == ocrRet)
{

View File

@ -9,25 +9,25 @@
HG_DECLARE_HANDLE(HGOCRMgr);
HG_DECLARE_HANDLE(HGOCRRet);
/* PDF */
#define HGIMGPROC_OCROUTTYPE_PDF 1L
/* RTF */
#define HGIMGPROC_OCROUTTYPE_RTF 2L
#define HGIMGPROC_OCROUTTYPE_RTF 1L
/* XLS */
#define HGIMGPROC_OCROUTTYPE_XLS 3L
#define HGIMGPROC_OCROUTTYPE_XLS 2L
/* TXT */
#define HGIMGPROC_OCROUTTYPE_TXT 4L
#define HGIMGPROC_OCROUTTYPE_TXT 3L
/* PDF */
#define HGIMGPROC_OCROUTTYPE_PDF 4L
/* OFD */
#define HGIMGPROC_OCROUTTYPE_OFD 5L
/* 未旋转 */
#define HGIMGPROC_OCRTEXTDIRECT_ORIGINAL 1L
/* 顺时针旋转90度 */
#define HGIMGPROC_OCRTEXTDIRECT_RIGHT 2L
/* 逆时针旋转90度 */
#define HGIMGPROC_OCRTEXTDIRECT_LEFT 3L
/* 旋转180度 */
#define HGIMGPROC_OCRTEXTDIRECT_180 4L
#define HGIMGPROC_OCRTEXTDIRECT_ORI 1L
/* 顺时针旋转90度 */
#define HGIMGPROC_OCRTEXTDIRECT_RIGHT 2L
/* 逆时针旋转90度 */
#define HGIMGPROC_OCRTEXTDIRECT_LEFT 3L
/* 旋转180度 */
#define HGIMGPROC_OCRTEXTDIRECT_180 4L
/* 初始化OCR模块
*/
@ -43,15 +43,15 @@ HGEXPORT HGResult HGAPI HGImgProc_ImageOCR(HGOCRMgr ocrMgr, HGImage image, HGOCR
/* 销毁OCR结果
*/
HGEXPORT HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRMgr ocrRet);
HGEXPORT HGResult HGAPI HGImgProc_DestroyOCRRet(HGOCRRet ocrRet);
/* 获取OCR结果块数量
*/
HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRMgr ocrRet, HGUInt *count);
HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockCount(HGOCRRet ocrRet, HGUInt *count);
/* 获取OCR结果块文本
*/
HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRMgr ocrRet, HGUInt index, const HGChar **text);
HGEXPORT HGResult HGAPI HGImgProc_GetOCRRetBlockText(HGOCRRet ocrRet, HGUInt index, const HGChar **text);
/* 图像OCR到文件
*/

View File

@ -1 +1,70 @@
#include "HGOCRBase.hpp"
#include "HGOCR.h"
HGUInt HGOCRBase::GetOutTypeByFileName(const HGChar* fileName)
{
if (NULL == fileName)
{
return 0;
}
const char* p = strrchr(fileName, '.');
if (NULL == p)
{
return 0;
}
#if defined(HG_CMP_MSC)
if (0 == _stricmp(p, ".pdf"))
{
return HGIMGPROC_OCROUTTYPE_PDF;
}
if (0 == _stricmp(p, ".rtf"))
{
return HGIMGPROC_OCROUTTYPE_RTF;
}
if (0 == _stricmp(p, ".xls"))
{
return HGIMGPROC_OCROUTTYPE_XLS;
}
if (0 == _stricmp(p, ".txt"))
{
return HGIMGPROC_OCROUTTYPE_TXT;
}
if (0 == _stricmp(p, ".ofd"))
{
return HGIMGPROC_OCROUTTYPE_OFD;
}
#else
if (0 == strcasecmp(p, ".pdf"))
{
return HGIMGPROC_OCROUTTYPE_PDF;
}
if (0 == strcasecmp(p, ".rtf"))
{
return HGIMGPROC_OCROUTTYPE_RTF;
}
if (0 == strcasecmp(p, ".xls"))
{
return HGIMGPROC_OCROUTTYPE_XLS;
}
if (0 == strcasecmp(p, ".txt"))
{
return HGIMGPROC_OCROUTTYPE_TXT;
}
if (0 == strcasecmp(p, ".ofd"))
{
return HGIMGPROC_OCROUTTYPE_OFD;
}
#endif
return 0;
}

View File

@ -15,6 +15,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;
protected:
static HGUInt GetOutTypeByFileName(const HGChar* fileName);
};
#endif /* __HGOCRBASE_H__ */

View File

@ -118,22 +118,29 @@ HGResult HGOCRHanvon::ImageOCR(HGImage image, class HGOCRRetImpl **ocrRet)
HGResult HGOCRHanvon::ImageOCRToFile(HGImage image, HGUInt outType, const HGChar *outFileName)
{
if (NULL == image || outType < HGIMGPROC_OCROUTTYPE_PDF || outType > HGIMGPROC_OCROUTTYPE_OFD || NULL == outFileName)
if (NULL == image || outType > HGIMGPROC_OCROUTTYPE_OFD || NULL == outFileName)
{
return HGBASE_ERR_INVALIDARG;
}
if (0 == outType)
outType = GetOutTypeByFileName(outFileName);
int fileType = -1;
if (HGIMGPROC_OCROUTTYPE_PDF == outType)
fileType = FILE_PDF;
else if (HGIMGPROC_OCROUTTYPE_RTF == outType)
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;
}
HGChar tmpFileName[256];
HGBase_GetTmpFileName(tmpFileName, 256);
@ -174,7 +181,7 @@ HGResult HGOCRHanvon::ImageTextDirectOCR(HGImage image, HGUInt* direct)
}
if (ROT0 == dire)
*direct = HGIMGPROC_OCRTEXTDIRECT_ORIGINAL;
*direct = HGIMGPROC_OCRTEXTDIRECT_ORI;
else if (ROT90 == dire)
*direct = HGIMGPROC_OCRTEXTDIRECT_RIGHT;
else if (ROT180 == dire)