fix: 修复打开多窗口识别崩溃问题

Description:   采用仓库中旧版本的识别库,正在识别过程中不响应启动另外一个识别

Log: 识别过程中不打开多个识别窗口进行识别
Change-Id: Ic75933f6d016c8c045ec5252cd92172219ca9cd5
This commit is contained in:
wangcong 2021-06-28 11:46:54 +08:00
parent 84aa3515d0
commit ba49aab3f4
6 changed files with 177 additions and 38 deletions

View File

@ -48,12 +48,55 @@ include_directories(src)
include_directories(./src/service) include_directories(./src/service)
include_directories(./src/tessocrutils) include_directories(./src/tessocrutils)
include_directories(./src/view) include_directories(./src/view)
#使tesseracttesseract
#include_directories(/usr/include/leptonica)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/include)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/api)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/arch)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccmain)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccstruct)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccutil)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/classify)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/cutil)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/dict)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/lstm)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/opencl)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/textord)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/viewer)
#include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/wordrec)
aux_source_directory(src allSource) aux_source_directory(src allSource)
aux_source_directory(src/service allSource) aux_source_directory(src/service allSource)
aux_source_directory(src/tessocrutils allSource) aux_source_directory(src/tessocrutils allSource)
aux_source_directory(src/view allSource) aux_source_directory(src/view allSource)
#使tesseracttesseract
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/api allSource)
##aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/arch allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccmain allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccstruct allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccutil allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/classify allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/cutil allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/dict allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/lstm allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/opencl allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/textord allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/viewer allSource)
#aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/wordrec allSource)
#FILE(GLOB COMMON_FILE
# "./3rdparty/tesseract_ocr/tesseract/src/arch/dotproduct.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/intsimdmatrix.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/simddetect.cpp"
# )
#FILE(GLOB ARCH_FILE
# "./3rdparty/tesseract_ocr/tesseract/src/arch/dotproductavx.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/dotproductfma.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/dotproductsse.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/intsimdmatrixavx2.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/intsimdmatrixavx2.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/intsimdmatrixneon.cpp"
# "./3rdparty/tesseract_ocr/tesseract/src/arch/intsimdmatrixsse.cpp"
# )
set(AllQRC set(AllQRC
./resource.qrc ./resource.qrc
) )
@ -72,6 +115,14 @@ set_source_files_properties(${qmfiles} PROPERTIES OUTPUT_LOCATION "translations"
set(LINK_DIR lib) set(LINK_DIR lib)
link_directories(${LINK_DIR}) link_directories(${LINK_DIR})
#tesseractarm
#message("The host system is " ${CMAKE_HOST_SYSTEM_PROCESSOR})
#if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
# add_executable(${PROJECT_NAME} ${allSource} ${COMMON_FILE} ${ARCH_FILE} ${AllQRC} ${LangSrcs} )
#else()
# add_executable(${PROJECT_NAME} ${allSource} ${COMMON_FILE} ${AllQRC} ${LangSrcs} )
#endif()
add_executable(${PROJECT_NAME} ${allSource} ${AllQRC} ${LangSrcs} ) add_executable(${PROJECT_NAME} ${allSource} ${AllQRC} ${LangSrcs} )
if(DOTEST) if(DOTEST)
@ -79,20 +130,63 @@ if(DOTEST)
${PROJECT_NAME}_test) ${PROJECT_NAME}_test)
include_directories(tests) include_directories(tests)
include_directories(src)
include_directories(./src/service)
include_directories(./src/tessocrutils)
include_directories(./src/view)
#使tesseracttesseract
# include_directories(/usr/include/leptonica)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/include)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/api)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/arch)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccmain)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccstruct)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/ccutil)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/classify)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/cutil)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/dict)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/lstm)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/opencl)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/textord)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/viewer)
# include_directories(${PROJECT_SOURCE_DIR}/3rdparty/tesseract_ocr/tesseract/src/wordrec)
aux_source_directory(src/service allTestSource) aux_source_directory(src/service allTestSource)
aux_source_directory(src/tessocrutils allTestSource) aux_source_directory(src/tessocrutils allTestSource)
aux_source_directory(src/view allTestSource) aux_source_directory(src/view allTestSource)
aux_source_directory(tests allTestSource) aux_source_directory(tests allTestSource)
aux_source_directory(tests/tessocrutils allTestSource)
#使tesseracttesseract
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/api allTestSource)
# #aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/arch allSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccmain allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccstruct allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/ccutil allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/opencl allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/classify allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/cutil allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/dict allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/lstm allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/textord allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/viewer allTestSource)
# aux_source_directory(3rdparty/tesseract_ocr/tesseract/src/wordrec allTestSource)
FILE(GLOB allTestSource1 FILE(GLOB allTestSource1
"src/loadingwidget.cpp"
"src/mainwidget.cpp" "src/mainwidget.cpp"
"src/mainwindow.cpp" "src/mainwindow.cpp"
"src/ocrapplication.cpp" "src/ocrapplication.cpp"
"src/resulttextview.cpp" "src/resulttextview.cpp"
"src/textloadwidget.cpp") "src/textloadwidget.cpp")
#使tesseracttesseract
# if(CMAKE_HOST_SYSTEM_PROCESSOR MATCHES "aarch64")
# add_executable(${PROJECT_NAME_TEST} ${allTestSource} ${COMMON_FILE} ${ARCH_FILE} ${allTestSource1} )
# else()
# add_executable(${PROJECT_NAME_TEST} ${allTestSource} ${COMMON_FILE} ${allTestSource1} )
# endif()
add_executable(${PROJECT_NAME_TEST} ${allTestSource} ${allTestSource1} )
add_executable(${PROJECT_NAME_TEST} ${allTestSource} ${allTestSource1}) #add_executable(${PROJECT_NAME_TEST} ${allTestSource} ${allTestSource1})
target_link_libraries(${PROJECT_NAME_TEST} gmock gtest pthread) target_link_libraries(${PROJECT_NAME_TEST} gmock gtest pthread)
add_test(${PROJECT_NAME_TEST} COMMAND ${PROJECT_NAME_TEST}) add_test(${PROJECT_NAME_TEST} COMMAND ${PROJECT_NAME_TEST})
@ -133,10 +227,9 @@ target_include_directories(${PROJECT_NAME} PUBLIC ${3rd_lib_INCLUDE_DIRS})
if(DOTEST) if(DOTEST)
target_include_directories(${PROJECT_NAME_TEST} PUBLIC ${3rd_lib_INCLUDE_DIRS}) target_include_directories(${PROJECT_NAME_TEST} PUBLIC ${3rd_lib_INCLUDE_DIRS})
endif() endif()
target_link_libraries(${PROJECT_NAME} ${3rd_lib_LIBRARIES} lept tesseract pthread)
target_link_libraries(${PROJECT_NAME} ${3rd_lib_LIBRARIES} lept)
if(DOTEST) if(DOTEST)
target_link_libraries(${PROJECT_NAME_TEST} ${3rd_lib_LIBRARIES} lept) target_link_libraries(${PROJECT_NAME_TEST} ${3rd_lib_LIBRARIES} lept tesseract pthread)
endif() endif()
qt5_use_modules(${PROJECT_NAME} ${QtModule}) qt5_use_modules(${PROJECT_NAME} ${QtModule})

2
debian/control vendored
View File

@ -2,7 +2,7 @@ Source: deepin-ocr
Section: utils Section: utils
Priority: optional Priority: optional
Maintainer: Deepin Packages Builder <packages@deepin.com> Maintainer: Deepin Packages Builder <packages@deepin.com>
Build-Depends: debhelper (>= 11), cmake, qtbase5-dev, pkg-config,libdtkwidget-dev,libleptonica-dev Build-Depends: debhelper (>= 11), cmake, qtbase5-dev, pkg-config,libdtkwidget-dev,libleptonica-dev,libtesseract-dev
Standards-Version: 4.1.3 Standards-Version: 4.1.3
Homepage: <insert the upstream URL, if relevant> Homepage: <insert the upstream URL, if relevant>

View File

@ -4,8 +4,8 @@
TEMPLATE = app TEMPLATE = app
TARGET = deepin-ocr TARGET = deepin-ocr
INCLUDEPATH += . INCLUDEPATH += .
CONFIG += C++17 #CONFIG += C++17
QMAKE_CXXFLAGS += -std=c++17 -std=gnu++17 #QMAKE_CXXFLAGS += -std=c++17 -std=gnu++17
# The following define makes your compiler warn you if you use any # The following define makes your compiler warn you if you use any
# feature of Qt which has been marked as deprecated (the exact warnings # feature of Qt which has been marked as deprecated (the exact warnings
@ -42,9 +42,9 @@ SOURCES += src/main.cpp \
src/tessocrutils/tessocrutils.cpp \ src/tessocrutils/tessocrutils.cpp \
src/loadingwidget.cpp src/loadingwidget.cpp
LIBS += -llept \ LIBS += -llept -ltesseract\
include(3rdparty/tesseract_ocr/tesseract_dependency.pri) #include(3rdparty/tesseract_ocr/tesseract_dependency.pri)
QT += dtkgui QT += dtkgui
QT += dtkwidget QT += dtkwidget
@ -75,5 +75,5 @@ INSTALLS += target dbus_service translations tesslangs
RESOURCES += \ RESOURCES += \
resource.qrc resource.qrc
DISTFILES += \ #DISTFILES += \
3rdparty/tesseract_ocr/tesseract_dependency.pri # 3rdparty/tesseract_ocr/tesseract_dependency.pri

View File

@ -21,6 +21,7 @@
#include "ocrapplication.h" #include "ocrapplication.h"
#include "mainwindow.h" #include "mainwindow.h"
#include "tessocrutils/tessocrutils.h"
#include <DWidgetUtil> #include <DWidgetUtil>
OcrApplication::OcrApplication(QObject *parent) : QObject(parent) OcrApplication::OcrApplication(QObject *parent) : QObject(parent)
@ -31,16 +32,22 @@ OcrApplication::OcrApplication(QObject *parent) : QObject(parent)
bool OcrApplication::openFile(QString filePath) bool OcrApplication::openFile(QString filePath)
{ {
qDebug() << __FUNCTION__ << __LINE__ << filePath; qDebug() << __FUNCTION__ << __LINE__ << filePath;
MainWindow *win = new MainWindow(); bool bRet = false;
//增加判断,空图片不会启动 if(!TessOcrUtils::instance()->isRunning())
bool bRet = win->openFile(filePath); {
if (bRet) { MainWindow *win = new MainWindow();
win->show(); //增加判断,空图片不会启动
//第一次启动才居中 bRet = win->openFile(filePath);
if (m_loadingCount == 0) { if (bRet) {
Dtk::Widget::moveToCenter(win); win->show();
m_loadingCount++; //第一次启动才居中
if (m_loadingCount == 0) {
Dtk::Widget::moveToCenter(win);
m_loadingCount++;
}
} }
}else {
qDebug() << "正在识别中!";
} }
return bRet; return bRet;
@ -51,13 +58,18 @@ void OcrApplication::openImage(QImage image)
//增加判断,空图片不会启动 //增加判断,空图片不会启动
if (!image.isNull() && image.width() >= 1) { if (!image.isNull() && image.width() >= 1) {
qDebug() << __FUNCTION__ << __LINE__ << image.size(); qDebug() << __FUNCTION__ << __LINE__ << image.size();
MainWindow *win = new MainWindow(); if(!TessOcrUtils::instance()->isRunning())
win->openImage(image); {
win->show(); MainWindow *win = new MainWindow();
//第一次启动才居中 win->openImage(image);
if (m_loadingCount == 0) { win->show();
Dtk::Widget::moveToCenter(win); //第一次启动才居中
m_loadingCount++; if (m_loadingCount == 0) {
Dtk::Widget::moveToCenter(win);
m_loadingCount++;
}
}else {
qDebug() << "正在识别中!";
} }
} }
} }
@ -66,13 +78,17 @@ void OcrApplication::openImageAndName(QImage image, QString imageName)
{ {
//增加判断,空图片不会启动 //增加判断,空图片不会启动
if (!image.isNull() && image.width() >= 1) { if (!image.isNull() && image.width() >= 1) {
MainWindow *win = new MainWindow(); if(!TessOcrUtils::instance()->isRunning()){
win->openImage(image, imageName); MainWindow *win = new MainWindow();
win->show(); win->openImage(image, imageName);
//第一次启动才居中 win->show();
if (m_loadingCount == 0) { //第一次启动才居中
Dtk::Widget::moveToCenter(win); if (m_loadingCount == 0) {
m_loadingCount++; Dtk::Widget::moveToCenter(win);
m_loadingCount++;
}
}else {
qDebug() << "正在识别中!";
} }
} }
} }

View File

@ -52,7 +52,7 @@ TessOcrUtils *TessOcrUtils::m_tessOcrUtils = nullptr;
/** /**
* @brief TessOcrUtils::t_Tesseract * @brief TessOcrUtils::t_Tesseract
*/ */
//tesseract::TessBaseAPI *TessOcrUtils::t_Tesseract = new tesseract::TessBaseAPI(); tesseract::TessBaseAPI *TessOcrUtils::t_Tesseract = new tesseract::TessBaseAPI();
TessOcrUtils::TessOcrUtils() TessOcrUtils::TessOcrUtils()
@ -62,6 +62,8 @@ TessOcrUtils::TessOcrUtils()
setLanguagesPath(TESSDATA_PATH); setLanguagesPath(TESSDATA_PATH);
//设置当前默认使用的识别语言系统语言+英语 //设置当前默认使用的识别语言系统语言+英语
m_sLangs = getLanguages(); m_sLangs = getLanguages();
//是否正在识别中
m_isRunning = false;
} }
TessOcrUtils::~TessOcrUtils() TessOcrUtils::~TessOcrUtils()
@ -80,6 +82,7 @@ TessOcrUtils *TessOcrUtils::instance()
//传入待识别图片的路径和想得到的返回结果类型,获取识别结果 //传入待识别图片的路径和想得到的返回结果类型,获取识别结果
RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath,const ResultType &resultType) RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath,const ResultType &resultType)
{ {
m_isRunning = true;
QString errorMessage = ""; QString errorMessage = "";
ErrorCode errorCode = ErrorCode::UNKNOWN; ErrorCode errorCode = ErrorCode::UNKNOWN;
RecognitionResult t_result; RecognitionResult t_result;
@ -91,6 +94,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath,con
errorMessage = "Can't pass an empty image path!"; errorMessage = "Can't pass an empty image path!";
errorCode = ErrorCode::OCR_P_NULL; errorCode = ErrorCode::OCR_P_NULL;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
@ -102,6 +106,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath,con
errorMessage = "Image does not exist! imagePath: " + imagePath; errorMessage = "Image does not exist! imagePath: " + imagePath;
errorCode = ErrorCode::OCR_P_NULL; errorCode = ErrorCode::OCR_P_NULL;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
try { try {
@ -116,6 +121,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath,con
errorMessage = "Failed to load picture! " + QString(e.what()); errorMessage = "Failed to load picture! " + QString(e.what());
errorCode = ErrorCode::OCR_LI_F; errorCode = ErrorCode::OCR_LI_F;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
//获取识别结果 //获取识别结果
@ -131,6 +137,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(const QString &imagePath)
//传入待识别图片和想得到的返回结果类型,获取识别结果 //传入待识别图片和想得到的返回结果类型,获取识别结果
RecognitionResult TessOcrUtils::getRecogitionResult(QImage *image, const ResultType &resultType) RecognitionResult TessOcrUtils::getRecogitionResult(QImage *image, const ResultType &resultType)
{ {
m_isRunning = true;
QString errorMessage = ""; QString errorMessage = "";
ErrorCode errorCode = ErrorCode::UNKNOWN; ErrorCode errorCode = ErrorCode::UNKNOWN;
RecognitionResult t_result; RecognitionResult t_result;
@ -141,6 +148,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(QImage *image, const ResultT
errorMessage = "Can't pass an empty image!"; errorMessage = "Can't pass an empty image!";
errorCode = ErrorCode::OCR_P_NULL; errorCode = ErrorCode::OCR_P_NULL;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
Pix *p_image; Pix *p_image;
@ -172,6 +180,11 @@ RecognitionResult TessOcrUtils::getRecogitionResult(QImage *image)
return getRecogitionResult(image,ResultType::RESULT_STRING); return getRecogitionResult(image,ResultType::RESULT_STRING);
} }
bool TessOcrUtils::isRunning()
{
return m_isRunning;
}
//获取系统当前的语言 //获取系统当前的语言
Languages TessOcrUtils::getSystemLang() Languages TessOcrUtils::getSystemLang()
{ {
@ -230,9 +243,11 @@ RecognitionResult TessOcrUtils::getRecogitionResult(Pix * image,ResultType resul
errorMessage = "The result type does not exist! resultType: " + QString::number(resultType); errorMessage = "The result type does not exist! resultType: " + QString::number(resultType);
errorCode = ErrorCode::OCR_RT_NULL; errorCode = ErrorCode::OCR_RT_NULL;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
tesseract::TessBaseAPI *t_Tesseract = new tesseract::TessBaseAPI(); //最新的tesseract库可以new出来老版本的库无法在appcation后new出来
//tesseract::TessBaseAPI *t_Tesseract = new tesseract::TessBaseAPI();
try{ try{
//初始化语言包 //初始化语言包
if (t_Tesseract->Init(m_sTessdataPath.toLatin1().data(), m_sLangs.toLatin1().data())) if (t_Tesseract->Init(m_sTessdataPath.toLatin1().data(), m_sLangs.toLatin1().data()))
@ -241,6 +256,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(Pix * image,ResultType resul
errorMessage = "Could not initialize tesseract! Tesseract couldn't load any languages!"; errorMessage = "Could not initialize tesseract! Tesseract couldn't load any languages!";
errorCode = ErrorCode::OCR_INI_F; errorCode = ErrorCode::OCR_INI_F;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
}catch(const std::logic_error &e){ }catch(const std::logic_error &e){
@ -248,6 +264,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(Pix * image,ResultType resul
errorMessage = "Could not initialize tesseract! Tesseract internal error! " + QString(e.what()); errorMessage = "Could not initialize tesseract! Tesseract internal error! " + QString(e.what());
errorCode = ErrorCode::OCR_INI_F; errorCode = ErrorCode::OCR_INI_F;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
//为Tesseract设置待识别图片 //为Tesseract设置待识别图片
@ -268,6 +285,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(Pix * image,ResultType resul
errorMessage = "Image recognition failed! " + QString(e.what()); errorMessage = "Image recognition failed! " + QString(e.what());
errorCode = ErrorCode::OCR_LI_F; errorCode = ErrorCode::OCR_LI_F;
setResult(errorCode,errorMessage,resultType,t_result); setResult(errorCode,errorMessage,resultType,t_result);
m_isRunning = false;
return t_result; return t_result;
} }
t_Tesseract->End(); t_Tesseract->End();
@ -277,6 +295,7 @@ RecognitionResult TessOcrUtils::getRecogitionResult(Pix * image,ResultType resul
t_result.errorCode = ErrorCode::OK; t_result.errorCode = ErrorCode::OK;
t_result.resultType = resultType; t_result.resultType = resultType;
t_result.result = result; t_result.result = result;
m_isRunning = false;
return t_result; return t_result;
} }

View File

@ -166,6 +166,12 @@ public:
*/ */
RecognitionResult getRecogitionResult(QImage *image); RecognitionResult getRecogitionResult(QImage *image);
/**
* @brief
* @return true false
*/
bool isRunning();
private : private :
/** /**
@ -242,9 +248,14 @@ private :
*/ */
QString m_sLangs; QString m_sLangs;
/**
* @brief
*/
bool m_isRunning;
static TessOcrUtils *m_tessOcrUtils; static TessOcrUtils *m_tessOcrUtils;
// static tesseract::TessBaseAPI *t_Tesseract; static tesseract::TessBaseAPI *t_Tesseract;
}; };