fix: 修复打开多窗口识别崩溃问题
Description: 采用仓库中旧版本的识别库,正在识别过程中不响应启动另外一个识别 Log: 识别过程中不打开多个识别窗口进行识别 Change-Id: Ic75933f6d016c8c045ec5252cd92172219ca9cd5
This commit is contained in:
parent
84aa3515d0
commit
ba49aab3f4
103
CMakeLists.txt
103
CMakeLists.txt
|
@ -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)
|
||||||
|
#需要使用tesseract源码时添加tesseract三方库文件
|
||||||
|
#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)
|
||||||
|
#需要使用tesseract源码时添加tesseract三方库文件
|
||||||
|
#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})
|
||||||
|
|
||||||
|
#如果添加tesseract源码则需要arm平台需多添加几个文件
|
||||||
|
#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)
|
||||||
|
#需要使用tesseract源码时添加tesseract三方库文件
|
||||||
|
# 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)
|
||||||
|
#需要使用tesseract源码时添加tesseract三方库文件
|
||||||
|
# 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")
|
||||||
|
#需要使用tesseract源码时添加tesseract三方库文件
|
||||||
|
# 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
2
debian/control
vendored
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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() << "正在识别中!";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user