diff --git a/src/ocr/recognizerworker.cpp b/src/ocr/recognizerworker.cpp index db76645..5366655 100644 --- a/src/ocr/recognizerworker.cpp +++ b/src/ocr/recognizerworker.cpp @@ -33,6 +33,9 @@ void RecognizeWorker::handle(const TaskPtr &task) if (result->recognized.isEmpty()) result->error = engine->error(); + lastGenerations_[task->sourceLanguage] = task->generation; + removeUnused(task->generation); + emit finished(result); } @@ -44,3 +47,17 @@ void RecognizeWorker::reset(const QString &tessdataPath) tessdataPath_ = tessdataPath; engines_.clear(); } + +void RecognizeWorker::removeUnused(Generation current) +{ + const auto keepGenerations = 10; + for (auto it = lastGenerations_.begin(), end = lastGenerations_.end(); + it != end;) { + if (current - it->second < keepGenerations) { + ++it; + continue; + } + engines_.erase(it->first); + it = lastGenerations_.erase(it); + } +} diff --git a/src/ocr/recognizerworker.h b/src/ocr/recognizerworker.h index ac87039..74350b3 100644 --- a/src/ocr/recognizerworker.h +++ b/src/ocr/recognizerworker.h @@ -19,6 +19,9 @@ signals: void finished(const TaskPtr &task); private: + void removeUnused(Generation current); + std::map> engines_; + std::map lastGenerations_; QString tessdataPath_; };