ScreenTranslator/src/ocr/recognizer.cpp

48 lines
1.1 KiB
C++
Raw Normal View History

2020-02-21 00:45:53 +07:00
#include "recognizer.h"
2020-04-11 17:57:37 +07:00
#include "debug.h"
2020-02-21 00:45:53 +07:00
#include "manager.h"
#include "recognizerworker.h"
#include "settings.h"
#include "tesseract.h"
#include <QThread>
2020-03-21 17:03:58 +07:00
Recognizer::Recognizer(Manager &manager, const Settings &settings)
2020-02-21 00:45:53 +07:00
: manager_(manager)
2020-03-21 17:03:58 +07:00
, settings_(settings)
2020-02-21 00:45:53 +07:00
, workerThread_(new QThread(this))
{
auto worker = new RecognizeWorker;
connect(this, &Recognizer::reset, //
worker, &RecognizeWorker::reset);
connect(this, &Recognizer::recognize, //
worker, &RecognizeWorker::handle);
connect(worker, &RecognizeWorker::finished, //
this, &Recognizer::recognized);
connect(workerThread_, &QThread::finished, //
worker, &QObject::deleteLater);
workerThread_->start();
worker->moveToThread(workerThread_);
}
void Recognizer::recognized(const TaskPtr &task)
{
manager_.recognized(task);
}
Recognizer::~Recognizer()
{
workerThread_->quit();
const auto timeoutMs = 2000;
if (!workerThread_->wait(timeoutMs))
workerThread_->terminate();
}
2020-03-21 17:03:58 +07:00
void Recognizer::updateSettings()
2020-02-21 00:45:53 +07:00
{
2020-04-11 17:57:37 +07:00
SOFT_ASSERT(!settings_.tessdataPath.isEmpty(), return );
2020-02-21 00:45:53 +07:00
2020-03-21 17:03:58 +07:00
emit reset(settings_.tessdataPath);
2020-02-21 00:45:53 +07:00
}